从网上摘抄到的通信程序,从机液晶显示为I5?请给位帮忙看一下。
主机:#include <reg52.h> //52系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
void send(uchar key_num)
{
SBUF=key_num;
while(!TI);
TI=0;
}
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
uchar key;
key=12;
send(key);
}
}
从机:
#include<stc11f16xe.h>
#define uchar unsigned char
#define uint unsigned int
#define dy 50
/*液晶端口定义*/
#define LCD_date P0 //数据口
sbit LCD_RS=P3^4; //寄存器选择输入
sbit LCD_RW=P3^5; //液晶读/写控制
sbit LCD_EN=P3^6; //液晶使能控制
sbit LCD_PSB=P4^6; //串/并方式控制
void delay_1ms(uint x) //设定时间X毫秒
{
uint i,j;
for(j=0;j<x;j++)
for(i=0;i<110;i++);
}
/*写指令数据到LCD*/
/*RS=L,RW=L,E=高脉冲,D0-D7=数据。*/
void write_cmd(uchar cmd)
{
LCD_RS=0;
LCD_EN=0;
LCD_RW=0;
P0=cmd;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
/*写显示数据到LCD*/
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。*/
void write_date(uchar date)
{
LCD_RS=1;
LCD_EN=0;
LCD_RW=0;
P0=date;
delay_1ms(5);
LCD_EN=1;
delay_1ms(5);
LCD_EN=0;
}
void shuzi_Disp(uchar n)
{
write_date(0x30+n/10);
write_date(0x30+n%10);
}
void lcd_init()//初始化液晶
{
delay_1ms(10); //延时
LCD_PSB=1; //并口方式
write_cmd(0x30); //基本指令操作
delay_1ms(5);
write_cmd(0x0c); //显示开,关光标
delay_1ms(5);
write_cmd(0x01); //清楚LCD的显示内容
delay_1ms(5);
}
void InitSystem(void) //系统初始化程序
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void main(void)
{
lcd_init();
InitSystem();
while(1);
}
void ser() interrupt 4
{
uchar a;
RI=0;
a=SBUF;
write_cmd(0x90);
shuzi_Disp(a);
} |