久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3684|回復(fù): 9
收起左側(cè)

如何修改單片機(jī)LCD1602顯示程序

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 1 黑幣 回復(fù)本帖可獲得 1 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:637154 發(fā)表于 2019-12-8 00:16 | 顯示全部樓層 |閱讀模式
  修改多次任然無(wú)果   找不出具體原因  屬實(shí)頭疼      望大神指點(diǎn)迷津

   附有 仿真圖 跟 源程序  
批注 2019-12-08 000031.png 51hei圖片_20191208000503nnnn.jpg 51hei圖片_20191208000448wwww.jpg
  1. #include<reg52.h> //包含頭文件,一般情況不需要改動(dòng),頭文件包含特殊功能寄存器的定義
  2. #include<stdio.h>
  3. #include "18b20.h"
  4. #include "1602.h"
  5. #include "delay.h"

  6. #define SETDOWN 0x01
  7. #define SETUP 0x02

  8. sbit key1=P2^0;        //引腳定義
  9. sbit key2=P2^1;
  10. sbit key3=P2^2;

  11. sbit relay_jiare=P1^0;
  12. sbit relay_zhileng=P1^1;
  13. sbit buzzer=P1^4;

  14. unsigned int setL= 50;         //上限
  15. unsigned int setH= 45;        //下限
  16. unsigned char DisFlag=0;                //更新顯示標(biāo)志
  17. unsigned char SetFlag=0;                //設(shè)置參數(shù)標(biāo)志

  18. unsigned long time2ms=0;        //定時(shí)計(jì)數(shù)
  19. unsigned int buzLater=0;  //蜂鳴器計(jì)時(shí)報(bào)

  20. int temp1;                                                //讀取溫度初始值
  21. float temperature;                                //實(shí)際溫度值
  22. unsigned char ReadTempFlag=0;//定義讀時(shí)間標(biāo)志

  23. char dis0[16];//定義顯示區(qū)域臨時(shí)存儲(chǔ)數(shù)組
  24. char dis1[16];//定義顯示區(qū)域臨時(shí)存儲(chǔ)數(shù)組

  25. unsigned char Num=0;         //計(jì)數(shù)

  26. void CheckKey(void);
  27. void Init_Timer0(void);//定時(shí)器初始化

  28. void main (void)
  29. {                  
  30.         relay_jiare=0;
  31.         relay_zhileng=0;
  32.          buzzer=0;

  33.         Init_Timer0();
  34.         LCD_Init();           //初始化液晶
  35.         DelayMs(200);          //延時(shí)有助于穩(wěn)定
  36.         LCD_Clear();          //清屏

  37.         relay_jiare=1;
  38.         relay_zhileng=1;
  39.          buzzer=1;

  40.         while (1)         //主循環(huán)
  41.         {
  42.                 CheckKey();                          //檢測(cè)按鍵
  43.                 if(ReadTempFlag==1)                //讀取溫度標(biāo)志
  44.                 {
  45.                         ReadTempFlag=0;
  46.                         temp1=ReadTemperature();        //讀取溫度
  47.                         temperature=(float)temp1*0.0625;          //溫度值轉(zhuǎn)換
  48.                 }
  49.                 if(DisFlag==1)        
  50.                 {
  51.                         DisFlag=0;
  52.                         if((temperature>0)&&(temperature<150))
  53.                         {
  54.                                 sprintf(dis0,"Temp:%4.1f C",temperature);//打印溫度值
  55.                                 LCD_Write_String(0,0,dis0);//顯示第二行
  56.                                 LCD_Write_Char(9,0,0xdf);//寫(xiě)入溫度右上角點(diǎn)
  57.                                 
  58.                                 if(temperature<setL)         //溫度過(guò)低
  59.                                 {
  60.                                         relay_jiare=0;        //開(kāi)啟升溫 關(guān)閉降溫
  61.                                         relay_zhileng=1;
  62.                                 }
  63.                                 else if((temperature)>setH)                  //溫度超高
  64.                                 {
  65.                                         relay_jiare=1;        //關(guān)閉升溫 開(kāi)啟降溫
  66.                                         relay_zhileng=0;
  67.                                 }
  68.                                 else                         //正常溫度
  69.                                 {
  70.                                         relay_jiare=1;        //關(guān)閉升溫 關(guān)閉降溫
  71.                                         relay_zhileng=1;
  72.                                         buzLater=0;
  73.                                 }
  74.                                 if(buzLater>=60)//正常清零 否則過(guò)高過(guò)低都會(huì)累加 超過(guò)1min
  75.                                 {buzzer=0;}        //打開(kāi)蜂鳴器                                
  76.                                 else
  77.                                 {buzzer=1;}        //關(guān)閉蜂鳴器
  78.                                                         
  79.                         }
  80.                         sprintf(dis1," %02d -- %02d       ",setL,setH);
  81.                         LCD_Write_String(0,1,dis1);        //初始化顯示
  82.                         
  83.                         if(SetFlag == 0)//按鍵設(shè)置標(biāo)志
  84.                         {
  85.                                 LCD_Write_Char(0,1,' ');LCD_Write_Char(5,1,' ');//更新顯示標(biāo)志
  86.                         }
  87.                         else if(SetFlag == 1)//按鍵設(shè)置標(biāo)志
  88.                         {
  89.                                 LCD_Write_Char(0,1,'S');LCD_Write_Char(5,1,' ');//更新顯示標(biāo)志
  90.                         }                        
  91.                         else if(SetFlag == 2)//按鍵設(shè)置標(biāo)志
  92.                         {
  93.                                 LCD_Write_Char(0,1,' ');LCD_Write_Char(5,1,'S');//更新顯示標(biāo)志
  94.                         }        
  95.                 }
  96.         }
  97. }

  98. void CheckKey(void)
  99. {
  100.         static unsigned  char rekey =0;
  101.         if((key1==0)||(key2==0)||(key3==0))                 //檢測(cè)到按鍵按下
  102.         {
  103.                 DelayMs(10);   //小抖動(dòng)
  104.                 if(rekey==0)
  105.                 {
  106.                         if(key1==0)    //檢測(cè)是否按下
  107.                         {
  108.                                 rekey=1;
  109.                                 SetFlag++;//設(shè)置標(biāo)志
  110.                                 if(SetFlag >= 3) SetFlag = 0;
  111.                         }        
  112.                         else if(key2==0)//設(shè)置值鍵
  113.                         {
  114.                                 rekey=1;
  115.                                 if(SetFlag==1)      //處于設(shè)置1
  116.                                 {
  117.                                         if(setL > 0 )
  118.                                         {setL=setL-1;}
  119.                                 }
  120.                                 else if(SetFlag==2)//處于設(shè)置2
  121.                                 {
  122.                                         if(setH > 0)
  123.                                         {setH=setH-1;}
  124.                                 }                                                
  125.                         }
  126.                         else if(key3==0)//設(shè)置值鍵
  127.                         {
  128.                                 rekey=1;
  129.                                 if(SetFlag==1)      //處于設(shè)置1
  130.                                 {
  131.                                         if(setL < 99 )
  132.                                         {setL=setL+1;}
  133.                                 }
  134.                                 else if(SetFlag==2)//處于設(shè)置2
  135.                                 {
  136.                                         if(setH < 99 )
  137.                                         {setH=setH+1;}
  138.                                 }                                
  139.                         }
  140.                 }
  141.         }
  142.         else
  143.         {
  144.         rekey=0;    //防止重復(fù)檢測(cè)到按鍵
  145.         }
  146. }


  147. /*------------------------------------------------
  148.                     定時(shí)器初始化子程序
  149. ------------------------------------------------*/
  150. void Init_Timer0(void)
  151. {
  152.         TMOD |= 0x01;          //使用模式1,16位定時(shí)器,使用"|"符號(hào)可以在使用多個(gè)定時(shí)器時(shí)不受影響                     
  153.         //TH0=0x00;              //給定初值
  154.         //TL0=0x00;
  155.         EA=1;            //總中斷打開(kāi)
  156.         ET0=1;           //定時(shí)器中斷打開(kāi)
  157.         TR0=1;           //定時(shí)器開(kāi)關(guān)打開(kāi)
  158. }
  159. /*------------------------------------------------
  160.                  定時(shí)器中斷子程序
  161. ------------------------------------------------*/
  162. void Timer0_isr(void) interrupt 1
  163. {
  164.         TH0=(65536-20000)/256;                  //重新賦值 20ms
  165.         TL0=(65536-20000)%256;
  166.         time2ms++;

  167.         if(time2ms%10==0)        //更新顯示
  168.         {
  169.                 DisFlag=1;
  170.                 if(time2ms%50==0)                 //讀取溫度
  171.                 {
  172.                         ReadTempFlag=1; //讀標(biāo)志位置1        
  173.                         if(buzLater<200)buzLater++;
  174.                 }
  175.         }
  176. }


復(fù)制代碼



5-protus仿真.zip

73.11 KB, 下載次數(shù): 14

72、程序.zip

66.84 KB, 下載次數(shù): 14

回復(fù)

使用道具 舉報(bào)

ID:25310 發(fā)表于 2019-12-8 08:21 | 顯示全部樓層
extern int sprintf  (char *, const char *, ...);

sprintf(dis0,"Temp:%4.1f C",temperature);//打印溫度值

這個(gè)直接調(diào)用不了吧。程序里也沒(méi)有串口初始化程序,用串口發(fā)送更直接吧。
回復(fù)

使用道具 舉報(bào)

ID:470332 發(fā)表于 2019-12-8 09:39 | 顯示全部樓層
temperature會(huì)被temperature=(float)temp1*0.0625;          //溫度值轉(zhuǎn)換 這句更改,如果想看效果的話直接吧60行的temperature = 具體數(shù)字
回復(fù)

使用道具 舉報(bào)

ID:403593 發(fā)表于 2019-12-8 09:47 | 顯示全部樓層
你要改什么內(nèi)容?想要達(dá)到什么效果?
回復(fù)

使用道具 舉報(bào)

ID:94031 發(fā)表于 2019-12-8 10:23 | 顯示全部樓層
仿真有些參數(shù)牽扯底部驅(qū)動(dòng),光改單片機(jī)程序不管用,要想學(xué)得徹底還是買(mǎi)元件焊板子。
回復(fù)

使用道具 舉報(bào)

ID:235200 發(fā)表于 2019-12-8 13:53 | 顯示全部樓層
沒(méi)有看明白,你要修改成什么樣,上面已有溫度值顯示(93.0),如果是覺(jué)得這溫度值不對(duì),應(yīng)該去檢查temperature變量的值,這地方只是顯示temperature的格式而已
回復(fù)

使用道具 舉報(bào)

ID:18307 發(fā)表于 2019-12-8 14:50 | 顯示全部樓層
沒(méi)有問(wèn)題呀,你是不是改完之后沒(méi)有點(diǎn)編譯,KEIL改完之后點(diǎn)編譯,proteus停止再運(yùn)行
回復(fù)

使用道具 舉報(bào)

ID:637154 發(fā)表于 2019-12-8 15:36 來(lái)自觸屏版 | 顯示全部樓層
csmyldl 發(fā)表于 2019-12-8 13:53
沒(méi)有看明白,你要修改成什么樣,上面已有溫度值顯示(93.0),如果是覺(jué)得這溫度值不對(duì),應(yīng)該去檢查temperature變 ...

第一行原本是,temp:溫度值 想改Wendu=溫度值
第二行原本是,20---50     想改45----50
回復(fù)

使用道具 舉報(bào)

ID:637154 發(fā)表于 2019-12-8 16:06 來(lái)自觸屏版 | 顯示全部樓層
這一生只為你 發(fā)表于 2019-12-8 09:47
你要改什么內(nèi)容?想要達(dá)到什么效果?

屏幕第一行原本顯示:temp:溫度值,改成wendu:溫度值
第二行原本顯示20--50   改成45---50   (更改溫度的上下限)
回復(fù)

使用道具 舉報(bào)

ID:654098 發(fā)表于 2019-12-9 11:05 | 顯示全部樓層
你是不是改完之后沒(méi)有點(diǎn)編譯,KEIL改完之后點(diǎn)編譯,proteus停止再運(yùn)行
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人久久久 | 成人小视频在线观看 | 91资源在线 | 国产免费一区二区 | 日韩欧美中文在线 | 最新av中文字幕 | 国产精品久久久久久久久久久免费看 | 一区二区三区在线免费观看 | 九九九久久国产免费 | 色偷偷888欧美精品久久久 | 久优草| 天天干天天爽 | 一区二区三区国产好 | a视频在线观看 | 夜夜夜久久久 | 久久这里有精品 | 精品毛片在线观看 | 天天夜碰日日摸日日澡 | 精品日韩在线 | 黄色av网站在线观看 | 在线播放中文字幕 | 91精品www | 午夜男人天堂 | 国产第一页在线播放 | 成人激情视频免费观看 | 天天干b| 一二区视频 | 一级毛片在线播放 | 欧美精品日韩 | 国产不卡在线播放 | 91精品国产综合久久福利软件 | 欧美片网站免费 | 日韩中文在线视频 | 日日夜夜天天久久 | 中文字幕 国产精品 | 在线观看成年人视频 | www.婷婷| 狠狠热视频 | 国产精品久久久久久久久久久免费看 | 久久久久久国产一区二区三区 | 一区二区视屏 |