内容发布更新时间 : 2024/11/15 23:42:23星期一 下面是文章的全部内容请认真阅读。
中北大学毕业论文
Write_Comm(0x01); //清显示 Write_Comm(0x80); //写首地址 for(a=0;a<16;a++) {
d=dispBUF[a];
if((a>11)&&(a<14)) {
d=numcode[num[a]]; }
if(14==a) { d=0xdf; }
Write_Data(d); }
Write_Comm(0xc0); for(b=16;b<33;b++) {
d=dispBUF[b]; if((b>24)&&(b<29)) {
d=numcode[num[b]]; }
Write_Data(d); } }
/*********检查LCD忙状态***********/ bit LCD_BUSY() { bit BS; RW = 1; RS = 0; E = 1; delay1ms(1); BS =(bit)(P0&0x80);
//如果是结果位到num[]里面读取
//待显示的结果
//写入要显示的数据
//换行,换到第二行
//写入要显示的数据(数据传输)
//lcd_busy为1时,忙,等待。lcd-busy
为0时,闲,可写指令与数据
41
中北大学毕业论文
E = 0; return BS; }
/*******************写指令函数******************************/ void Write_Comm(uchar lcdcomm) //写指令
{
while(LCD_BUSY()); RS = 0; RW = 0; E = 1; delay1ms(1); P0= lcdcomm; delay1ms(1); E = 0; }
/*********************写数据函数****************************/ void Write_Data(uchar lcddata)//写数据 {
while(LCD_BUSY()); RS = 1; RW = 0; E = 1; delay1ms(1); P0= lcddata;
delay1ms(1); //判断是否忙状态 E = 0; }
/*********************初始化LCD****************************/ void Init_LCD() {
delay(); //稍微延时,等待LCD进入工作状态 Write_Comm(0x01); //清显示 Delay(2);
Write_Comm(0x38); //8位2行 5*8 Delay(2);
Write_Comm(0x06); //文字不动,光标右移
42
中北大学毕业论文
Delay(2);
Write_Comm(0x0c); //显示开/关,光标开闪烁开 Delay(2); }
/*************************延时n*15US函数*************************/ void delay15(uchar us) { do { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); us--; }
while(us); }
/************************18b20延时函数************************/ void Delay(uint time) {
while( time-- ); }
/****************************延时1MS*************************/ void delay1ms(uint ms) {
uint i,j;
for(i=0;i 43 中北大学毕业论文 for(j=0;j<100;j++); } /***************************显示延时函数*********************/ void delay() { uchar y; for(y=0;y<0xff;y++); } /*********************导通即可驱动蜂鸣器*********************/ void beep(uint bp) { uchar i, j; for (i=0;i<250;i++) { BUZZER=!BUZZER; //BEEP取反 for (j = 0 ; j } BUZZER=0; //关闭蜂鸣器 } /*******************系统主函数******************/ void main(void) { uchar i,j; for(i=0;i<255;i++) for(j=0;j<255;j++); //延时 SYS_INIT(); //初始化 while(!START ) { beep(150); //调用beep()函数,使喇叭发声 delay1ms(500); LCD_DISP(); //显示 sta_flag=0; //标准位复位 ET0=1; //开定时器0中断 TR0=1; //启动定时器0 TESTTEMP(); //启动温度转换 44 中北大学毕业论文 while(1) { if(sta_flag) //10MS到了(sta_flag=1) { while(0==CSBIN); //收到回波 TR1=0; //关闭计数器1 jsh=TH1; jsl=TL1; //读取计数器高低位的数值 HEXtoBCD(); //转换成BCD码 JULIJS(); //计算距离 if(15==count) //900MS到,检测温度 { temp=GET_WD(); //读取温度 count=0; TESTTEMP(); //重新启动转换 LCD_DISP(); //刷新显示 } sta_flag=0; //标准位复位 } if(distance<=110) { beep(150); } } } } 45