#include<ADI/ADuC834.h> //sfr定义用头文件
// Delay routine //延时用子程序
//unsigned char data[]={08FE,10F9,0795,09CA};
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^3; //1602的数据/指令选择控制线
sbit rw=P2^4; //1602的读写控制线
sbit en=P2^5; //1602的使能控制线
unsigned char DIAC[]="0xAC";
unsigned char DIBC[]="0xBC";
unsigned char DICC[]="0xCC";
unsigned char EICC[]="sbuf=0x02";
unsigned char g_data=0;
unsigned char tcount;
void delay(int a)
{
int length;
for(;a>0;a--)
{
length=10000;
while (length >=0)
length--;
}
}
void lcd_wcom(uchar com) //1602写命令函数
{
rs=0; //选择指令寄存器
rw=0; //选择写
P0=com; //把命令字送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(uchar dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
P0=dat; //把要显示的数据送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0F); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}
void uart_int() interrupt 4
{
unsigned char i;
if(SBUF&0x32==0x32)
{
lcd_wcom(0x80);
//lcd_wdat('L');
for(i=0;i<10;i++)
{
lcd_wdat(EICC[i]);
}
g_data|=SBUF;
}
switch(SBUF)
{
case 0x32:
lcd_wcom(0x80+0x40);
//lcd_wdat('L');
for(i=0;i<5;i++)
{
lcd_wdat(DIAC[i]);
}
//curkey=0;
break;
case 0x33:
lcd_wcom(0x80+0x40);
//lcd_wdat('L');
for(i=0;i<5;i++)
{
lcd_wdat(DIBC[i]);
}
//curkey=0;
break;
default :
lcd_wcom(0x80);
//lcd_wdat('L');
for(i=0;i<5;i++)
{
lcd_wdat(DICC[i]);
}
break;
}
RI=0;
}
void main(void)
{
uchar i;
// ES=1;
// EA=1;
lcd_init();
PLLCON=PLLCON&0xF8; //CPU主频为12.58MHZ
SCON=SCON|0x50; //UART WORK IN MODE 1
RCAP2H=-1;
RCAP2L=-41; //使用定时器T2,产生9600的波特率,数据手册上有
T2CON=T2CON|0x30; //设定定 时器T2的工作方式
TR2=1; //开启定时器T2
for(;;)
{
//g_data=SBUF; //将要发送到串口的数据送入缓冲
for(;;)
{
if(SCON&0x01==0x01) //是否发送完毕
{
RI=0; //关串口接收中断
lcd_wcom(0x80+0x40);
//lcd_wdat('L');
for(i=0;i<5;i++)
{
lcd_wdat(DIBC[i]);
}
if(SBUF)//==0x32)
{
lcd_wcom(0x80);
//lcd_wdat('L');
for(i=0;i<5;i++)
{
lcd_wdat(DIBC[i]);
}
}
}
break; //退出查寻
}
delay(2); //延时
}
// for(;;)
// {
// SBUF=0x32; //将要发送到串口的数据送入缓冲
// for(;;)
// {
// if(SCON&0x02==0x02) //是否发送完毕
// TI=0; //关串口接收中断
// break; //退出查寻
// }
// delay(2); //延时
// }
}