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

QQ登錄

只需一步,快速開始

搜索
查看: 3108|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

時(shí)鐘,計(jì)算器與溫度顯示的綜合實(shí)現(xiàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是學(xué)校的一次單片機(jī)實(shí)驗(yàn)要求,自己修改的程序,可以實(shí)現(xiàn)時(shí)鐘,計(jì)算器與溫度在1602顯示,附件包含原始keil程序及proteus仿真。希望大家能夠采納。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DSPORT=P3^7;
  6. void Delay1ms(uint );
  7. uchar Ds18b20Init();
  8. void Ds18b20WriteByte(uchar com);
  9. uchar Ds18b20ReadByte();
  10. void  Ds18b20ChangTemp();
  11. void  Ds18b20ReadTempCom();
  12. int Ds18b20ReadTemp();
  13. #define LCD1602_DATAPINS P2
  14. sbit lcde=P1^4;
  15. sbit w=P1^5;
  16. sbit rs=P1^6;
  17. void Lcd1602_Delay1ms(uint c);   //誤差 0us
  18. void LcdWriteCom(uchar com);         
  19. void LcdWriteData(uchar dat);
  20. void wendu();        
  21. void LcdInit();
  22. void LcdDisplay(int);
  23. void init_jsq();
  24. void init_sz();
  25. void write_data(uchar date);
  26. void delay(uint z);
  27. void write_com(uchar com);
  28. void write_sfm(uchar add,uchar date);


  29. sbit k1=P3^3;
  30. sbit k2=P3^4;
  31. sbit k3=P3^5;
  32. uchar num,count,k1num,miao1,miao2,ki;
  33. char miao,fen,shi;
  34. uchar code table2[]=" 2018-12-10 SAT" ;
  35. uchar code table21[]=" 00:00:00";


  36. char i,j,temp,num_1;
  37. long a,a1,a2,b,b1,b2,c,c1,c2;//a,第一個(gè)數(shù) b第二個(gè)數(shù)  c第三個(gè)數(shù)
  38. uchar flag1,fuhao; //flag1表示是否有符號(hào)按下,fuhao表示按下哪個(gè)符號(hào)
  39. uchar code table[]={
  40.                                         1,2,3,0,
  41.                                         4,5,6,0,
  42.                                         7,8,9,0,
  43.                                         0,0,0,0,
  44.                                         };
  45. uchar code table1[]={
  46.                                          1,2,3,0x2f-0x30,
  47.                                          4,5,6,0x2a-0x30,
  48.                                          7,8,9,0x2d-0x30,
  49.                                          0x01-0x30,0,0x3d-0x30,0x2b-0x30,                                       
  50.                                         };
  51. void jisuanqi();
  52. void shizhong();
  53. sbit ky1=P3^2;
  54. sbit d1=P0^0;
  55. sbit d2=P0^1;
  56. sbit d3=P0^2;
  57. void main()
  58. {

  59.         
  60.                 i=50;
  61.                 ki=0;
  62.         while(1)
  63.         {
  64.                 if(ky1==0)
  65.                 {
  66.                         while(ky1==0);
  67.                         ki++;
  68.                 }
  69.                                 
  70.                 if(ki>5)
  71.                 {
  72.                         ki=0;
  73.                 }
  74.                
  75. ///////////溫度//////////////////               
  76.                 if(ki==0)
  77.                 {
  78.                         LcdInit();
  79.                         LcdWriteCom(0x88);        //寫地址 80表示初始地址
  80.                         LcdWriteData('C');
  81.                         if(ki==0)
  82.                         {
  83.                                 ki++;
  84.                         }
  85.                 }
  86.                
  87.                 if(ki==1)
  88.                         {
  89.                                 d1=0;
  90.                                 d2=1;
  91.                                 d3=1;
  92.                                 wendu();
  93.                         }
  94.                         
  95.                         
  96. ////////////計(jì)算器////////////////
  97.                 if(ki==2)
  98.                 {
  99.                         init_jsq();
  100.                         if(ki==2)
  101.                         {
  102.                                 ki++;
  103.                         }
  104.                 }        
  105.                         if(ki==3)
  106.                         {
  107.                                 d1=1;
  108.                                 d2=0;
  109.                                 d3=1;
  110.                                 jisuanqi();               
  111.                         }
  112.                         
  113. //////////時(shí)鐘////////////////
  114.                 if(ki==4)
  115.                 {
  116.                         init_sz(); //初始化
  117.                         for(num=0;num<16;num++)
  118.                         {
  119.                                 write_data(table2[num]);
  120.                                 delay(5);
  121.                         }

  122.                         write_com(0x80+0x40); //開始時(shí)第二行顯s
  123.                         for(num=0;num<10;num++)
  124.                         {
  125.                                 write_data(table21[num]);
  126.                                 delay(5);
  127.                         }
  128.                         if(ki==4)
  129.                         {
  130.                                 ki++;
  131.                         }
  132.                         
  133.                         write_sfm(2,shi);
  134.                         write_sfm(5,fen);
  135.                         write_sfm(8,miao);
  136.                 }
  137.                
  138.                         if(ki==5)
  139.                         {
  140.                                 d1=1;
  141.                                 d2=1;
  142.                                 d3=0;
  143.                                 shizhong();
  144.                         }

  145.         }
  146. }

  147. void wendu()
  148. {
  149.                 LcdDisplay(Ds18b20ReadTemp());
  150. }
  151. void LcdDisplay(int temp)          //lcd顯示
  152. {
  153.    
  154.   unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組
  155.         float tp;  
  156.         if(temp< 0)                                //當(dāng)溫度值為負(fù)數(shù)
  157.           {
  158.                   LcdWriteCom(0x80);                //寫地址 80表示初始地址
  159.             LcdWriteData('-');                  //顯示負(fù)
  160.                 temp=temp-1;
  161.                 temp=~temp;
  162.                 tp=temp;
  163.                 temp=tp*0.0625*100+0.5;        
  164.           }
  165.          else
  166.           {                        
  167.                   LcdWriteCom(0x80);                //寫地址 80表示初始地址
  168.             LcdWriteData('+');                 //顯示正
  169.                 tp=temp;//因?yàn)閿?shù)據(jù)處理有小數(shù)點(diǎn)所以將溫度賦給一個(gè)浮點(diǎn)型變量
  170.                 temp=tp*0.0625*100+0.5;        
  171.         }
  172.         datas[0] = temp / 10000;
  173.         datas[1] = temp % 10000 / 1000;
  174.         datas[2] = temp % 1000 / 100;
  175.         datas[3] = temp % 100 / 10;
  176.         datas[4] = temp % 10;

  177.         LcdWriteCom(0x82);                  //寫地址 80表示初始地址
  178.         LcdWriteData('0'+datas[0]); //百位
  179.         
  180.         LcdWriteCom(0x83);                 //寫地址 80表示初始地址
  181.         LcdWriteData('0'+datas[1]); //十位

  182.         LcdWriteCom(0x84);                //寫地址 80表示初始地址
  183.         LcdWriteData('0'+datas[2]); //個(gè)位

  184.         LcdWriteCom(0x85);                //寫地址 80表示初始地址
  185.         LcdWriteData('.');                 //顯示 ‘.’

  186.         LcdWriteCom(0x86);                 //寫地址 80表示初始地址
  187.         LcdWriteData('0'+datas[3]); //顯示小數(shù)點(diǎn)  

  188.         LcdWriteCom(0x87);                 //寫地址 80表示初始地址
  189.         LcdWriteData('0'+datas[4]); //顯示小數(shù)點(diǎn)  
  190. }
  191.         
  192. void Delay1ms(uint y)
  193. {
  194.         uint x;
  195.         for( ; y>0; y--)
  196.         {
  197.                 for(x=110; x>0; x--);
  198.         }
  199. }
  200. uchar Ds18b20Init()
復(fù)制代碼

原理圖: 無(wú)
仿真: 無(wú)
代碼: 時(shí)鐘·溫度顯示及計(jì)算器.7z (267.79 KB, 下載次數(shù): 44)

IMG_20181228_125845.jpg (2.93 MB, 下載次數(shù): 71)

IMG_20181228_125845.jpg

IMG_20181228_125803.jpg (2.5 MB, 下載次數(shù): 69)

IMG_20181228_125803.jpg

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:375715 發(fā)表于 2019-4-28 11:55 來(lái)自觸屏版 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:663849 發(fā)表于 2019-12-20 16:48 | 只看該作者
Thanks♪(・ω・)ノ
回復(fù)

使用道具 舉報(bào)

地板
ID:670923 發(fā)表于 2019-12-23 09:16 | 只看該作者
謝謝大佬
回復(fù)

使用道具 舉報(bào)

5#
ID:752144 發(fā)表于 2020-6-26 16:06 | 只看該作者
非常好!很實(shí)用!
回復(fù)

使用道具 舉報(bào)

6#
ID:787742 發(fā)表于 2020-6-27 11:44 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表