#include <
#include <
#define uchar unsigned char
#define uint unsigned int
*ts12864a-3 端口定义*/
#define lcd_data p0数据口。
sbit lcd_rs = p3^5寄存器选择输入
sbit lcd_rw = p3^6液晶读/写控制。
sbit lcd_en = p3^4液晶使能控制。
/sbit lcd_psb = p3^7串/并方式控制。
sbit wela = p2^6;
sbit dula = p2^7;
/ uchar table[6];
/uchar flag;
*uchar code dis1
uchar code dis2
uchar code dis3
static int begin=0;//当为0时表示对于接收到的数据丢弃,1表示接收的数据放到数组array中。
int flags;//标志位,用到测试用。
char array[10];/数组。
char temp;
static int count=0;//数组计数。
uchar code dis1
uchar code dis2
uchar code dis3
uchar code dis4
uchar irdis[2];
uchar ircom[4];
void delay0(uchar x); x*0.14ms
void beep();
void dataconv();
void lcd_pos(uchar x,uchar y); 确定显示位置。
* 延时函数 */
void delay(int ms)
while(ms--)
uchar i;
for(i=0;i<250;i++)
nopnop_()
nop_()
nop_()
*检查lcd忙状态 */
*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 *
bit lcd_busy()
bit result;
lcd_rs = 0;
lcd_rw = 1;
lcd_en = 1;
delaynop();
result = bit)(p0&0x80);
lcd_en = 0;
return(result);
*写指令数据到lcd */
*rs=l,rw=l,e=高脉冲,d0-d7=指令码。
void lcd_wcmd(uchar cmd)
while(lcd_busy()
lcd_rs = 0;
lcd_rw = 0;
lcd_en = 0;
nop_()
nop_()
p0 = cmd;
delaynop();
lcd_en = 1;
delaynop();
lcd_en = 0写显示数据到lcd */
*rs=h,rw=l,e=高脉冲,d0-d7=数据void lcd_wdat(uchar datwhile(lcd_busy())
lcd_rs = 1;
lcd_rw = 0;
lcd_en = 0;
p0 = dat;
delaynop();
lcd_en = 1;
delaynop();
lcd_en = 0lcd初始化设定void lcd_initlcd_psb = 1并口方式。
wela=0;
dula=0;
lcd_wcmd(0x34扩充指令操作。
delay(5);
lcd_wcmd(0x30基本指令操作。
delay(5);
lcd_wcmd(0x0c显示开,关光标。
delay(5);
lcd_wcmd(0x01清除lcd的显示内容。
delay(5);
void lcd_init2()
uchar i;
delay(10延时。
/lcd_init初始化lcdlcd_pos(0,0设置显示位置为第一行的第1个字符。
i = 0;
while(dis1[i] !0显示字符。
lcd_wdat(dis1[i]);
i++;lcd_pos(1,0设置显示位置为第二行的第1个字符。
i = 0;
while(dis2[i] !0')
lcd_wdat(dis2[i显示字符。
i++;lcd_pos(2,0设置显示位置为第三行的第1个字符。
i = 0;
while(dis3[i] !0')
lcd_wdat(dis3[i显示字符。
i++;lcd_pos(3,0设置显示位置为第四行的第1个字符。
i = 0;
while(dis4[i] !0')
lcd_wdat(dis4[i显示字符。
ivoid lcd_init3()
lcd_pos(0,2);
lcd_wdat(0x3a);
lcd_pos(0,6);
lcd_wdat(0x3a);
lcd_pos(1,2);
lcd_wdat(0x3a);
lcd_pos(1,6);
lcd_wdat(0x3a);
lcd_pos(2,2);
lcd_wdat(0x3a);
lcd_pos(2,6);
lcd_wdat(0x3a);
lcd_pos(3,3);
lcd_wdat(0x3a主程序。
main()
lcd_init();
lcd_init2();
lcd_init3();
tmod=0x20;//设置定时器1为工作方式2
th1=0xfd;
tl1=0xfd;
tr1=1;
ren=1;
sm0=0;
sm1=1;
ea=1;es=1;
while(1)
p1=array[5延时x*0.14ms子程序void delay0(uchar x) /x*0.14ms
uchar i;
while(x--)
for (i = 0; i<13; i设定显示位置void lcd_pos(uchar x,uchar y) /设定在第x+1行第y+1列显示uchar pos;
if (x==0)
x=0x80;}
else if (x==1)
x=0x90;}
else if (x==2)
x=0x88;}
else if (x==3)
x=0x98;}
pos = x+y ;
lcd_wcmd(pos); 显示地址。
void serial() interrupt 4
ri = 0;
temp=sbuf;
if(temp=='begin==1)//如果是@,则接下来的数据都是要接收的,如果begin是1也表示是要接收的。
begin=1;
if(temp!='因为@是标致位,所以我们是要丢弃的。
if(temparray[count]=temp;
countelse if(temp=='#')/停止位。
begin=0;
count=0;
flags=1