完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 574605863 于 2015-5-12 21:01 编辑
LCD1602不显示数据,求大神指导。谢谢大家。 #include #include #define uchar unsigned char #define uint unsigned int #define DelayNOP(){_nop_;_nop_;_nop_;_nop_;} ***it DQ=P3^3; //Êý¾ÝÏß ***it HI_LED =P2^3; //¸ßεÍα¨¾¯ÉÁ˸ ***it LO_LED =P2^6; ***it BEEP=P3^7; //±¨¾¯Æ÷ ***it K1=P1^7;//Õý³£ÏÔʾ ***it K2=P1^4;//±¨¾¯ ***it K3=P1^1; ***it RS=P2^0; ***it RW=P2^1; ***it E=P2^2; ***it BF=P0^7; uchar RomCodeStr[]={"--ROM CODE--"}; uchar RomCode[8] ={0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//64λROM CODE uchar code Temp_Disp_title[] ={"Current Temp: "}; uchar Current_Temp_Display_Buffer[] ={" TEMP: "}; uchar code Temperature_Char[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};//ζÈ×Ö·û uchar Alarm_Temp[]={"ALARM TEMP Hi Lo"}; uchar Alarm_HI_LO_STR[]={"Hi: Lo: "}; uchar temp_data[2]={0x00,0x00}; uchar temp_alarm[2]={0x00,0x00}; uchar display[5]={0x00,0x00,0x00,0x00,0x00};//ζÈÖµ uchar display1[3]={0x0C,0x00,0x00}; //±¨¾¯Öµ uchar df_Table[] ={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9}; //ζÈСÊýλ¶ÔÕÕ±í char Alarm_Temp_HL[2]={70,-20}; uchar CurrentT=0; uchar Temp_Value[]={0x00,0x00}; //¶ÁÈ¡µÄζÈÖµ uchar Display_Digit[]={0,0,0,0}; //´ýÏÔʾµÄ¸÷ζÈÊý bit HI_Alarm=0,LO_Alarm=0 ; //¸ßµÍα¨¾¯±êÖ¾ bit DS18B20_IS_OK =1; //´«¸ÐÆ÷Õý³£±êÖ¾ uint Time0_Count =0; //¶¨Ê±Æ÷ÑÓʱÀÛ¼Ó //ÑÓʱ void DelayXus(int x) { uchar i; while(x--)for(i=0;i<200;i++); } bit LCD_Busy_Check() { bit result; RS=0; RW=1; E=1; DelayNOP(); result=(bit)(P0 & 0x80); E=0; return result; } //ÏòLCDдָÁî void Write_LCD_Command (uchar cmd) { while(LCD_Busy_Check()); RS=0; RW=0; E=0; _nop_(); _nop_(); P0=cmd; DelayNOP(); E=1; DelayNOP(); E=0; } //ÏòlcdдÊý¾Ý void Write_lCD_Data(uchar str) { while(LCD_Busy_Check()==1); RS=1; RW=0; E=0; P0=str; DelayNOP(); E=1; DelayNOP(); E=0; } //ÉèÖóõʼλÖà void Set_LCD_POS(uchar x) { Write_LCD_Command (x|0x80); } //¶ÔlcdÏÔʾģʽ³õʼ»¯ void LCD_Initialize() { DelayXus(5); Write_LCD_Command (0x38); DelayXus(5); Write_LCD_Command (0x0c); DelayXus(5); Write_LCD_Command (0x06); DelayXus(5); Write_LCD_Command (0x01); DelayXus(5); } //×Ô¶¨Òå×Ö·ûдCGRAM void Write_NEW_LCD_Char() { uchar i; Write_LCD_Command (0x40);//D'CGRAM for (i=0;i<8;i++) Write_lCD_Data(Temperature_Char);//дÈëζȷûºÅ } //ÑÓʱ void Delay (uint num) { while (--num); } //³õʼ»¯DS18B20 uchar Init_DS18B20() { uchar status; DQ=1;Delay (8); DQ=0;Delay (90); DQ=1;Delay (8); status = DQ; Delay (100); DQ=1; return status; } //¶ÁÒ»×Ö½Ú uchar ReadOneByte() { uchar i,dat =0; DQ=1;_nop_(); for (i=0;i<8;i++) { DQ=0;dat >>=1; DQ=1;_nop_();_nop_(); if(DQ) dat |=0x80;Delay(30); DQ=1; } return dat; } //д×Ö½Ú void WriteOneByte(uchar dat) { uchar i; for (i=0;i<8;i++) DQ=0;DQ=dat&0x01;Delay(5);DQ=1;dat >>=1; } //¶ÁȡζÈÖµ void Read_Temperature() { if((Init_DS18B20() ==1)) DS18B20_IS_OK =0; else { WriteOneByte(0xCC); // WriteOneByte(0x44); Init_DS18B20(); WriteOneByte(0xCC); WriteOneByte(0xBE); } Temp_Value[0] =ReadOneByte(); Temp_Value[1] =ReadOneByte(); DS18B20_IS_OK =1; } //ÉèÖÃζȱ¨¾¯Öµ void Set_Alarm_Temp_Value() { Init_DS18B20(); WriteOneByte(0xCC); WriteOneByte(0x44); WriteOneByte(Alarm_Temp_HL[0]); WriteOneByte(Alarm_Temp_HL[1]); WriteOneByte(0x7F); Init_DS18B20(); WriteOneByte(0xCC); WriteOneByte(0x48); } //ÔÚLCDÉÏÏÔʾµ±Ç°ÎÂ¶È void Display_Temperature() { uchar i; uchar t=150 ; //ÑÓʱֵ uchar ng= 0 ;//¸ºÊý±êʶ char Signed_Current_Temp; //Èç¹ûΪ¸ºÊý£¬ÔòÈ¡·´¼Ó1£¬²¢ÉèÖøºÊý±êʶ if ((Temp_Value[1]&0xF8)==0xF8) { Temp_Value[1]=~Temp_Value[1]; Temp_Value[0]=~Temp_Value[0]+1; if(Temp_Value[0]==0x00)Temp_Value[1]++; ng=1;//É踺Êý±êʶ } //ζÈСÊý²¿·Ö Display_Digit[0]=df_Table[Temp_Value[0]&0x0F];//»ñȡζÈÕûÊý²¿·Ö CurrentT =((Temp_Value[0]&0x0F)>>4)|((Temp_Value[0]&0x07)<<4); Signed_Current_Temp=ng? -CurrentT:CurrentT; HI_Alarm =Signed_Current_Temp >=Alarm_Temp_HL[0] ?1:0; LO_Alarm =Signed_Current_Temp <=Alarm_Temp_HL[1] ?1:0; Display_Digit[3] =CurrentT /100; Display_Digit[2] =CurrentT % 100 /10; Display_Digit[1] =CurrentT % 10; Current_Temp_Display_Buffer[11] =Display_Digit[0]+'0'; Current_Temp_Display_Buffer[10] ='.' ; Current_Temp_Display_Buffer[9] =Display_Digit[1]+'0'; Current_Temp_Display_Buffer[8] =Display_Digit[2]+'0'; Current_Temp_Display_Buffer[7] =Display_Digit[3]+'0'; //¸ßλΪ0²»ÏÔʾ if(Display_Digit[3]==0) Current_Temp_Display_Buffer[7] =' ' ; //¸ßλΪ0ºÍ´Î¸ßλΪ0£¬´Î¸ßλ²»ÏÔʾ if(Display_Digit[2]==0&Display_Digit[3]==0) Current_Temp_Display_Buffer[8] =' ' ; //¸ºÊý·ûºÅÏÔʾÔÚÇ¡µ±Î»Öà if (ng) { if(Current_Temp_Display_Buffer[8]==' ') Current_Temp_Display_Buffer[8] ='-'; else if(Current_Temp_Display_Buffer[7] ==' ' ) Current_Temp_Display_Buffer[7] ='-' ; else Current_Temp_Display_Buffer[6] ='-' ; } //ÔÚµÚÒ»ÐÐÏÔʾ±êÌâ Set_LCD_POS(0X00); for(i= 0; i< 16; i++) Write_lCD_Data ( Temp_Disp_Title ); //ÔÚµÚ¶þÐÐÏÔʾµ±Ç°ÎÂ¶È Set_LCD_POS(0X40); for(i= 0; i< 16; i++) Write_lCD_Data (Current_Temp_Display_Buffer ); //ÏÔʾζȷûºÅ Set_LCD_POS(0x4D);Write_lCD_Data (0x00); Set_LCD_POS(0x4E);Write_lCD_Data ('C'); } // //¶¨Ê±Æ÷Öжϣ¬¿ØÖƾ¯±¨ÉùÒô void T0_INT() interrupt 1 { TH0 =-1000/256; TL0 =-1000%256; BEEP = !BEEP; if (++Time0_Count == 400) { Time0_Count = 0; if (HI_Alarm) HI_LED = ~HI_LED; else HI_LED =0; if (LO_Alarm) LO_LED = ~LO_LED; else LO_LED =0; TR0 =0; } } //ROM CODE ת»»ÓëÏÔʾ void Display_Rom_Code() { uchar i,t; Set_LCD_POS(0x40); for(i=0 ;i<8;i++) { t =((RomCode&0xF0)>>4); if(t>9)t += 0x37; else t +='0'; Write_lCD_Data(t); //¸ßλÏÔʾ t= RomCode & 0x0F; if(t>9)t += 0x37; else t +='0'; Write_lCD_Data(t); //µÍλÏÔʾ } } //¶ÁÈ¡64λÂë void Read_Rom_Code() { uchar i; Init_DS18B20(); WriteOneByte(0x33); //¶ÁÐòÁÐÂë for (i =0; i<8; i++) RomCode = ReadOneByte(); } //ÏÔʾROM CODE void Display_RomCode() { uchar i; Set_LCD_POS(0x00); for (i =0; i<16; i++) //ÏÔʾ±êÌâ Write_lCD_Data (RomCodeStr) ; Read_Rom_Code() ;//¶Á64λÐòÁÐÂë Display_Rom_Code();//ÏÔʾ64λROM CODE } //ÏÔʾ±¨¾¯ÎÂ¶È void Disp_Alarm_Temperature() { uchar i, ng; ng =0; if( Alarm_Temp_HL[0]< 0) { Alarm_Temp_HL[0] =~Alarm_Temp_HL[0]+1 ; ng =1; } Alarm_HI_LO_STR[4] = Alarm_Temp_HL[0] /100 + '0'; Alarm_HI_LO_STR[5] = Alarm_Temp_HL[0] /10%10 + '0'; Alarm_HI_LO_STR[6] = Alarm_Temp_HL[0] %10 + '0'; //·Ö½â¸ßθ÷Êýλµ½´ýÏÔʾ´®ÖÐ if(Alarm_HI_LO_STR[4] =='0') Alarm_HI_LO_STR[4] = ' '; if(Alarm_HI_LO_STR[4] =='0'&&Alarm_HI_LO_STR[5] =='0') Alarm_HI_LO_STR[5]=' '; if (ng) { if(Alarm_HI_LO_STR[5]==' ')Alarm_HI_LO_STR[5]='-'; else if(Alarm_HI_LO_STR[4]==' ')Alarm_HI_LO_STR[4]='-'; else Alarm_HI_LO_STR[3]='-'; } //µÍα¨¾¯ ng =0; if (Alarm_HI_LO_STR[1] <0) //Èç¹ûΪ¸ºÊýÔòÈ¡·´¼Ó1 { Alarm_Temp_HL[1] =~Alarm_Temp_HL[1] +1; ng =1; } //·Ö½âµÍθ÷Êýλµ½´ýÏÔʾ´®ÖÐ Alarm_HI_LO_STR[12]= Alarm_Temp_HL[1]/100+ '0'; Alarm_HI_LO_STR[13] =Alarm_Temp_HL[1]/10 % 10+ '0'; Alarm_HI_LO_STR[14] = Alarm_Temp_HL[1] % 10+ '0'; //ÆÁ±Î¸ßλ²»ÏÔʾµÄ0 if (Alarm_HI_LO_STR[12]=='0') Alarm_HI_LO_STR[12] =' '; if (Alarm_HI_LO_STR[12]=='0'&& Alarm_HI_LO_STR[13] =='0') Alarm_HI_LO_STR[13] =' '; if(ng) { if(Alarm_HI_LO_STR[13] ==' ') Alarm_HI_LO_STR[13] ='-'; else if (Alarm_HI_LO_STR[12] ==' ') Alarm_HI_LO_STR[12] ='-'; else Alarm_HI_LO_STR[11] ='-'; } //ÏÔʾ¸ßµÍα¨¾¯Î¶ÈÖµ Set_LCD_POS(0x00);for (i =0; i<16; i++) Write_lCD_Data (Alarm_Temp) ; Set_LCD_POS(0x40); for (i =0; i<16; i++) Write_lCD_Data (Alarm_HI_LO_STR) ; } //Ö÷º¯Êý void main() { uchar Current_Operation =1 ;//??è?µ±?°2ù×÷?a??ê????è LCD_Initialize(); IE =0x82; TMOD =0x01; TH0 = -1000 /256; TL0 =-1000 % 256; TR0 =0; HI_LED =0; LO_LED =0 ; Set_Alarm_Temp_Value(); Read_Temperature(); Delay(50000); Delay(50000); while(1) { if (K1==0) Current_Operation =1 ; if (K2==0) Current_Operation =2; if (K3==0) Current_Operation =3 ; switch (Current_Operation) { case 1://Õýµ±ÏÔʾÎÂ¶È Read_Temperature(); if (DS18B20_IS_OK) { if(HI_Alarm==1||LO_Alarm ==1) TR0 =1; else TR0 =0; Display_Temperature(); } DelayXus(100); break; case 2: //ÏÔʾ±¨¾¯ÎÂ¶È Read_Temperature(); Disp_Alarm_Temperature(); DelayXus(100); break; case 3://ÏÔʾROM CODE Display_RomCode(); DelayXus(50); break; } } } |
|
相关推荐
6个回答
|
|
我去,亲你还是上传仿真和编译文件吧!我调试一下!
|
|
|
|
|
|
|
|
额,玩笑开大了啊!
第一:没添加hex文件 第二:#define DelayNOP(){_nop_;_nop_;_nop_;_nop_;}这里写错了 #define DelayNOP(){_nop_();_nop_();_nop_();_nop_();} 第三:内存耗尽 这里改成 uchar code RomCodeStr[]={"--ROM CODE--"}; uchar RomCode[8] ={0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//64位ROM CODE uchar code Temp_Disp_Title[] ={"Current Temp: "}; uchar Current_Temp_Display_Buffer[] ={" TEMP: "}; uchar code Temperature_Char[8]={0x0C,0x12,0x12,0x0C,0x00,0x00,0x00,0x00};//温度字符 uchar code Alarm_Temp[]={"ALARM TEMP Hi Lo"}; 第四:逻辑问题了,显示好使,我试了! |
|
|
|
真是太感谢你了,能够用了,最近做毕设刚开始用这个,不太会。都纠结几天了,麻烦你了。 |
|
|
|
真是太感谢你了,能够用了,最近做毕设刚开始用这个,不太会。都纠结几天了,麻烦你了。 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
482 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
1928 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
933 浏览 0 评论
【原创】收藏!单片机输出4种波形的函数信号发生器毕设(Proteus仿真+原理图+源码和论文)
4092 浏览 1 评论
11631 浏览 6 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-4 09:24 , Processed in 0.782751 second(s), Total 86, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191