/*控制器测试程序IAP15W4K61S4板2017 1 9***/
/*按键测试按键2017 1 10 12864串口 *******/
#include <STC15F2K60S2.h>
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
uint k;
sbit OUTA=P1^7;
sbit OUTA0=P5^3;
sbit OUTA1=P0^5;
sbit OUTA2=P5^2;
sbit OUTA3=P0^6;
sbit OUTA4=P0^4;
sbit OUTA5=P0^7;
sbit OUTA6=P0^3;
sbit OUTA7=P6^0;
sbit OUTA8=P0^2;
sbit OUTA9=P6^1;
sbit OUTB0=P6^2;
sbit OUTB1=P6^3;
sbit OUTB2=P1^1;
sbit OUTB3=P1^0;
sbit OUTB4=P4^7;
sbit OUTB5=P1^2;
sbit OUTB6=P1^3;
sbit OUTB7=P1^4;
sbit OUTB8=P1^5;
sbit OUTB9=P1^6;
sbit OUTC0=P7^5;
sbit OUTC1=P7^4;
sbit OUTC2=P2^7;
sbit OUTC3=P2^0;
sbit OUTC4=P2^1;
sbit OUTC5=P2^3;
sbit OUTC6=P2^2;
sbit OUTC7=P2^4;
sbit OUTC8=P2^5;
sbit OUTC9=P2^6;
sbit KEYOUT1=P3^4; //5^3
sbit KEYOUT2=P3^0; //0^5/*1>0*/
sbit KEYOUT3=P6^6; //5^2
sbit KEYOUT4=P6^4; //0^6
sbit KEY0=P3^2; /*按键1使用中断*/
sbit KEY1=P4^0; /*按键2OUT 3.4 IN4.0*/
sbit KEY2=P3^1; /*按键3OUT 3.0 IN3.1*/
sbit KEY3=P4^0; /*按键4OUT 3.0 IN4.0*/
sbit KEY4=P6^7; /*按键5OUT 3.0 IN6.7*/
sbit KEY5=P6^5; /*按键6OUT 3.0 IN6.5*/
sbit KEY6=P3^1; /*按键7OUT 3.4 IN3.1*/
sbit KEY7=P6^7; /*按键8OUT 3.4 IN6.7*/
sbit KEY8=P6^5; /*按键9OUT 3.4 IN6.5*/
sbit KEY9=P6^5; /*按键10OUT 6.6 IN6.5*/
sbit KEYA=P4^0; /*按键11OUT 6.4 IN4.0*/
sbit KEYB=P3^3; /*按键12使用中断*/
sbit KEYC=P3^1; /*按键13OUT 6.6 IN3.1*/
sbit KEYD=P4^0; /*按键14OUT 6.6 IN4.0*/
sbit KEYE=P6^7; /*按键15OUT 6.6 IN6.7*/
sbit KEYF=P3^1; /*按键16OUT 6.4 IN3.1*/
sbit KEYG=P6^7; /*按键18OUT 6.4 IN6.7*/
sbit PB=P2^1;
sbit CS=P4^6; //PIN 6
sbit SID=P0^0; //PIN 5
sbit SCLK=P0^1; //PIN 4
uint aa=0;
/*------------------延时子程序------------------------*/
void delay_1ms(uint x)
{
int i, j;
for (i=0; i<x; i++)
for (j=0; j<50; j++);
}
/*------------------延时1mS子程序------------------------*/
void Delay1ms() //@11.0592MHz
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i =5;
j = 19;
do
{
while (--j);
}
while (--i);
}
/*------------------延时子程序------------------------*/
void delay(uint t)
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<1200;j++);
}
/*------------------写命令到LCD-----------------------*/
void write_com(unsigned char cmdcode)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
EA=0;
i_data=0xf8;
delay_1ms(10);
CS=1;
SCLK=0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=cmdcode;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=cmdcode;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
EA=1;
}
/*-------------------写数据到LCD----------------------*/
void write_data(unsigned char Dispdata)
{
uchar i;
uchar i_data,temp_data1,temp_data2;
EA=0;
i_data=0xfa;
delay_1ms(10);
CS=1;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=Dispdata;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
i_data=Dispdata;
temp_data1=i_data&0xf0;
temp_data2=i_data&0x0f;
temp_data1>>=4;
temp_data2<<=4;
i_data=temp_data1|temp_data2;
i_data&=0xf0;
for(i=0;i<8;i++)
{
SID=(bit)(i_data&0x80);
SCLK=0;
SCLK=1;
i_data=i_data<<1;
}
CS=0;
EA=1;
}
/*------------------初始化LCD屏-----------------------*/
void lcd_init()
{
uchar comdata;
delay_1ms(100);
comdata=0x30;
write_com(comdata); /*功能设置:一次送8位数据,基本指令集*/
comdata=0x04;
write_com(comdata); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
comdata=0x0f;
write_com(comdata); /*显示设定:开显示,显示光标,当前显示位反白闪动*/
comdata=0x01;
write_com(comdata); /*清DDRAM*/
comdata=0x02;
write_com(comdata); /*DDRAM地址归位*/
comdata=0x80;
write_com(comdata); /*把显示地址设为0X80,即为第一行的首位*/
}
/*----显示机器运行中---------------------*/
void disrun()
{
write_com(0x91); /*地址*/
write_data(0XBB); /*半个字符*/
write_data(0XFA); /*个位*/
write_com(0x92); /*地址*/
write_data(0XC6); /*半个字符*/
write_data(0XF7); /*个位*/
write_com(0x93); /*地址*/
write_data(0XD4); /*半个字符*/
write_data(0XCB); /*个位*/
write_com(0x94); /*地址*/
write_data(0XD0); /*半个字符*/
write_data(0XD0); /*个位*/
write_com(0x95); /*地址*/
write_data(0XD6); /*半个字符*/
write_data(0XD0); /*个位*/
}
/**************显示按键**************************/
void diakey()
{
write_com(0x80); /*---按---*/
write_data(0xB0);
write_data(0xB4);
write_com(0x81); /*---键---*/
write_data(0xBC);
write_data(0xFC);
}
/*--------------- 1 数字 显示 -----------*/
void DISONE()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB1);
}
/*--------------- 2 数字 显示 -----------*/
void DISTWO()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB2);
}
/*--------------- 3 数字 显示 -----------*/
void DISTHREE()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB3);
}
/*--------------- 4 数字 显示 -----------*/
void DISFOUR()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB4);
}
/*--------------- 5 数字 显示 -----------*/
void DISFIVE()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB5);
}
/*--------------- 6 数字 显示 -----------*/
void DISSIX()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB6);
}
/*--------------- 7 数字 显示 -----------*/
void DISSEVEN()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB7);
}
/*--------------- 8 数字 显示 -----------*/
void DISEIGHT()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB8);
}
/*--------------- 9 数字 显示 -----------*/
void DISNINE()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xB9);
}
/*--------------- A 数字 显示 -----------*/
void DISA()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC1);
}
/*--------------- B 数字 显示 -----------*/
void DISB()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC2);
}
/*--------------- C 数字 显示 -----------*/
void DISC()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC3);
}
/*--------------- D 数字 显示 -----------*/
void DISD()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC4);
}
/*--------------- E 数字 显示 -----------*/
void DISE()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC5);
}
/*--------------- F 数字 显示 -----------*/
void DISF()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC6);
}
/*--------------- F 数字 显示 -----------*/
void DISG()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC7);
}
/*--------------- F 数字 显示 -----------*/
void DISH()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xA3);
write_data(0xC8);
}
/*----------------清除 数字 显示 -----------*/
void clear()
{
write_com(0x82); /*---CLEAR---*/
write_data(0xB6);
write_data(0xA0);
}
/*----------------定时器中断 -----------*/
void timer0() interrupt 1
{
aa=aa+1;
TH0=0X53;
TL0=0X32;
if(aa==300)
OUTA=!OUTA,
aa=0;
}
/*-------------------主程序----------------------*/
void main()
{
P0M0=0;
P0M1=0;
P4M0=0;
P4M1=0;
AUXR=0X80; //STC系列的1T 设置 KEYB
lcd_init() ; /*液晶复位*/
TMOD=0X01;
TH0=0X53;
TL0=0X32;
EA=1;
ET0=1;
TR0=1;
lcd_init();
PB=0;
disrun();
KEYOUT1=1;
KEYOUT2=1;
KEYOUT3=1;
KEYOUT4=1;
OUTA0=1;
OUTA1=1;
OUTA2=1;
OUTA3=1;
OUTA4=1;
OUTA5=1;
OUTA6=1;
OUTA7=1;
OUTA8=1;
OUTA9=1;
OUTB0=1;
OUTB1=1;
OUTB2=1;
OUTB3=1;
OUTB4=1;
OUTB5=1;
OUTB6=1;
OUTB7=1;
OUTB8=1;
OUTB9=1;
OUTC0=1;
OUTC1=1;
OUTC2=1;
OUTC3=1;
OUTC4=1;
OUTC5=1;
OUTC6=1;
OUTC7=1;
OUTC8=1;
OUTC9=1;
while(1)
{
OUTA0=0;
delay(200);
OUTA0=1;
OUTA1=0;
delay(200);
OUTA1=1;
OUTA2=0;
delay(200);
OUTA2=1;
OUTA3=0;
delay(200);
OUTA3=1;
OUTA4=0;
delay(200);
OUTA4=1;
OUTA5=0;
delay(200);
OUTA5=1;
OUTA6=0;
delay(200);
OUTA6=1;
OUTA7=0;
delay(200);
OUTA7=1;
OUTA8=0;
delay(200);
OUTA8=1;
OUTA9=0;
delay(200);
OUTA9=1;
OUTB0=0;
delay(200);
OUTB0=1;
OUTB1=0;
delay(200);
OUTB1=1;
OUTB2=0;
delay(200);
OUTB2=1;
OUTB3=0;
delay(200);
OUTB3=1;
OUTB4=0;
delay(200);
OUTB4=1;
OUTB5=0;
delay(200);
OUTB5=1;
OUTB6=0;
delay(200);
OUTB6=1;
OUTB7=0;
delay(200);
OUTB7=1;
OUTB8=0;
delay(200);
OUTB8=1;
OUTB9=0;
delay(200);
OUTB9=1;
OUTC0=0;
delay(200);
OUTC0=1;
OUTC1=0;
delay(200);
OUTC1=1;
OUTC2=0;
delay(200);
OUTC2=1;
OUTC3=0;
delay(200);
OUTC3=1;
OUTC4=0;
delay(200);
OUTC4=1;
OUTC5=0;
delay(200);
OUTC5=1;
OUTC6=0;
delay(200);
OUTC6=1;
OUTC7=0;
delay(200);
OUTC7=1;
OUTC8=0;
delay(200);
OUTC8=1;
OUTC9=0;
delay(200);
OUTC9=1;
delay(200);
if(!KEY0)
{
diakey();
DISONE();
}
if(!KEYB)
{
diakey();
DISC();
}
KEYOUT1=0;
if(!KEY1)
{
diakey();
DISTWO();
}
if(!KEY6)
{
diakey();
DISSEVEN();
}
if(!KEY7)
{
diakey();
DISEIGHT();
}
if(!KEY8)
{
diakey();
DISNINE();
}
KEYOUT1=1;
KEYOUT2=0;
if(!KEY2)
{
diakey();
DISTHREE();
}
if(!KEY3)
{
diakey();
DISFOUR();
}
if(!KEY4)
{
diakey();
DISFIVE();
}
if(!KEY5)
{
diakey();
DISSIX();
}
KEYOUT2=1;
KEYOUT3=0;
if(!KEY9)
{
diakey();
DISA();
}
if(!KEYC)
{
diakey();
DISD();
}
if(!KEYD)
{
diakey();
DISE();
}
if(!KEYE)
{
diakey();
DISF();
}
KEYOUT3=1;
KEYOUT4=0;
if(!KEYA)
{
diakey();
DISB();
}
if(!KEYF)
{
diakey();
DISG();
}
if(!KEYG)
{
diakey();
DISH();
}
KEYOUT4=1;
}
}