河南理工大学毕业设计(论文)说明书
{ }
BYTE i; while(ms--) { }
for(i = 0; i< 250; i++) { }
_nop_();
_nop_(); //空执行消耗CPU时间达到等待的效果 _nop_(); _nop_();
/*******************LCD侧忙函数********************/ BOOL lcd_bz() { }
lcd_wcmd(BYTE cmd)
BOOL result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_();
result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1 ep = 0;
return result;//返回测忙结果
32
河南理工大学毕业设计(论文)说明书
{ }
// 写入指令数据到LCD
while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_();
P0=cmd; //将8位指令通过P0口传给1602 _nop_();
_nop_();//用于产生一个脉冲宽度 _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0;
lcd_wdat(BYTE dat) {
//写入字符显示数据到LCD
while(lcd_bz()); rs = 1; rw = 0; ep = 0;
P0 = dat;//将8位数据通过P0口传给1602 _nop_(); _nop_();
33
河南理工大学毕业设计(论文)说明书
_nop_(); //用于产生一个脉冲宽度 _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0;
}
BYTE read_status() //读状态
{ P0 = 0xff; rs = 0; rw = 1; ep = 0; delay(5); ep = 1; delay(5);
while(P0 & 0x80); ep = 0; return(P0);
}
BYTE lcd_rdat() //从LCD读数据 { BYTE address; rs = 1; rw = 1; ep = 0; delay(5);
ep = 1;
34
河南理工大学毕业设计(论文)说明书
}
delay(5); address=P0; ep = 0;
return(address);
lcd_init() //初始化 {
//LCD初始化设定
////16*2显示,5*7点阵,8位数据
lcd_wcmd(0x38); delay(1); lcd_wcmd(0x0c); delay(1); lcd_wcmd(0x06); delay(1); lcd_wcmd(0x01); delay(1); lcd_wcmd(0x82);
//显示开,关光标
//移动光标
//清除LCD的显示内容
for(num=0;num<11;num++) //循环写入
{ }
lcd_wdat(dis1[num]); delay(5);
lcd_wcmd(0x80+0x40); for(num=0;num<15;num++)
{ }
lcd_wdat(dis2[num]); delay(5);
TMOD=0x01; //定时器初始化 TH0=(65536-50000)/256;
35
河南理工大学毕业设计(论文)说明书
}
TL0=(65536-50000)%6;
EA=1; //开中断 ET0=1; TR0=1;
void write_sfm(BYTE add,BYTE date) //时间写入函数 { BYTE shiw,gew; shiw=date/10; gew=date;
lcd_wcmd(0x80+0x40+add); lcd_wdat(0x30+shiw); lcd_wdat(0x30+gew);
}
void write_dsgt(BYTE add,BYTE date) { lcd_wcmd(0x80+0x40+add); lcd_wdat(0x30+date); }
void keyscan() { if(s1==0)
{ delay(5); if(s1==0) { s1num++;
while(!s1); if(s1num==1)
{
//药量写入函数 //键盘扫描函数 //按键消抖 //等待按键松手 36