for(j=0;j<1827;j++)
;
}
/********************************************************************
*名称:
delay()
*功能:
延时,延时时间大概为140US。
*输入:
无
*输出:
无
***********************************************************************/
voiddelay()
{
inti,j;
for(i=0;i<=10;i++)
for(j=0;j<=2;j++)
;
}
/********************************************************************
*名称:
Convert(ucharIn_Date)*功能:
因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
*输入:
1602资料上的值
*输出:
送到1602的值
***********************************************************************/
ucharConvert(ucharIn_Date){
uchari,Out_Date=0,temp=0;
for(i=0;i<8;i++)
{
temp=(In_Date>>i)&0x01;Out_Date|=(temp<<(7-i));
}
returnOut_Date;
}
/********************************************************************
*名称:
enable(uchardel)
*功能:
1602命令函数
*输入:
输入的命令值
*输出:
无
***********************************************************************/
voidenable(uchardel)
{
P0=Convert(del);
RS=0;
RW=0;
E=0;
delay();
E=1;
delay();
}
/********************************************************************
*名称:
write(uchardel)
*功能:
1602写数据函数
*输入:
需要写入1602的数据
*输出:
无
***********************************************************************/
voidwrite(uchardel)
{
P0=Convert(del);
RS=1;
RW=0;
E=0;
delay();
E=1;
delay();
}
/********************************************************************
*名称:
L1602_init()
*功能:
1602初始化,请参考1602的资料
*输入:
无
*输出:
无
***********************************************************************/
voidL1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
/********************************************************************
*名称:
L1602_char(ucharhang,ucharlie,charsign)*功能:
改变液晶中某位的值,如果要让第一行,第五个字符显示"b",调用该函数如下
L1602_char(1,5,'b')
*输入:
行,列,需要输入1602的数据
*输出:
无
***********************************************************************/
voidL1602_char(ucharhang,ucharlie,charsign)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
write(sign);
}
/********************************************************************
*名称:
L1602_string(ucharhang,ucharlie,uchar*p)
*功能:
改变液晶中某位的值,如果要让第一行,第五个字符开始显示"abcdef",调用该函数如下
L1602_string(1,5,"abcdef;")*输入:
行,列,需要输入1602的数据
*输出:
无
***********************************************************************/
voidL1602_string(ucharhang,ucharlie,uchar*p)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
while
(1)
{
if(*p=='\0')break;
write(*p);
p++;
}
}
/********************************************************************
*名称:
Com_Int()
*功能:
串口中断子函数
*输入:
无
*输出:
无
***********************************************************************/
voidCom_Int(void)interrupt4{
EA=0;
if(RI==1)//当硬件接收到一个数据时,RI会置位
{
LED_Buffer[com_dat]=SBUF;//把从串口读出的数存到数组
RI=0;
com_dat++;
if(com_dat==16)com_dat=0;//当com_dat=16时,清0,防止数组溢出
}
EA=1;
}
/********************************************************************
*名称:
Com_Init()
*功能:
串口初始化,晶振11.0592,波特率9600,使能了串口中断*输入:
无
*输出:
无
***********************************************************************/
voidCom_Init(void)
{
TMOD=0x20;//定时器工作在定时器1的方式2
PCON=0x00;//不倍频
SCON=0x50;//串口工作在方式1,并且启动串行接收
TH1=0xFd;//设置波特率9600
TL1=0xFd;
TR1=1;//启动定时器1
ES=1;//开串口中断
EA=1;//开总中断
}
/********************************************************************
*名称:
Main()
*功能:
主函数
*输入:
无
*输出:
无
***********************************************************************/
voidMain()
{
uchari=0,com_dat=0;
L1602_init();
Delay(100);
Com_Init();
P2=0x00;
while
(1)
{
q=LED_Buffer;
L1602_string(1,1,q);
com_dat=0;
Delay(100);
}
}