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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4752|回復: 6
打印 上一主題 下一主題
收起左側

兩路溫度顯示單片機程序,請問怎樣才能把LCD改成數碼管顯示,可以不要上下限。

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned  int
  4. sbit AD0832_CS = P1^0 ; //片選信號
  5. sbit AD0832_CLK = P1^1; //時鐘接口
  6. sbit AD0832_DI = P1^2; //數據接口
  7. uchar code table[8]={0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};        // 攝氏溫度符號
  8. sbit RS = P2^0;                                //LCD數據/命令選擇端(H/L)位聲明
  9. sbit RW = P2^1;                                //LCD讀寫控制,寫為0,讀為1
  10. sbit EN = P2^2;                                //LCD使能信號端位聲明
  11. sbit k1=P2^3;                                                               //按鍵定義
  12. sbit k2=P2^4;
  13. sbit k3=P2^5;
  14. sbit k4=P2^6;
  15. int shang=40;                                 //上限溫度定義
  16. int xia=20;
  17. uchar data disdata[7];
  18. uchar data  data1[7];
  19. /***********************************************************************
  20. 利用按鍵來控制上限下限溫度
  21. *********************************************************/
  22. void delay1(unsigned short i)
  23. {
  24.         while(i--);        
  25. }

  26. void keypros()
  27. {
  28.         if(k1==0)                         //上加
  29.         {
  30.                 delay1(1000);
  31.                 shang=shang+1;
  32.         }
  33.         if(k2==0)                          //上減
  34.         {
  35.                 delay1(1000);
  36.                 shang=shang-1;
  37.         }
  38.         if(k3==0)                          //下加
  39.         {
  40.                 delay1(1000);
  41.                 xia=xia+1;
  42.     }
  43.         if(k4==0)                          //下減
  44.         {
  45.                 delay1(1000);
  46.                 xia=xia-1;
  47.         }
  48.         if((k3==0)&&(k1==0)        )          //歸位

  49.         {
  50.                 delay1(1000);
  51.                 shang=40;
  52.                 xia=20;
  53.         }
  54. }
  55. /*************************lcd1602程序**************************/
  56. void delay1ms(uint ms)//延時1毫秒(不夠精確的)
  57. {  uint i,j;
  58.    for(i=0;i<ms;i++)
  59.     for(j=0;j<100;j++);
  60. }
  61. void wr_com(uchar com)//寫指令//
  62. {
  63.    delay1ms(1);
  64.    RS=0;
  65.    RW=0;
  66.    EN=0;
  67.    P0=com;
  68.    delay1ms(1);
  69.    EN=1;
  70.    delay1ms(1);
  71.    EN=0;
  72. }void wr_dat(uchar dat)//寫數據//
  73. {  
  74.    delay1ms(1);
  75.    RS=1;
  76.    RW=0;
  77.    EN=0;
  78.    P0=dat;
  79.    delay1ms(1);
  80.    EN=1;
  81.    delay1ms(1);
  82.    EN=0;
  83. }
  84. void wr_new()                  //寫新字符
  85. {
  86.         uchar i;
  87.         wr_com(0x40);
  88.         for(i=0;i<8;i++)
  89.         {
  90.                 wr_dat(table[i]);
  91.         }
  92. }
  93. void lcd_init()//初始化設置//
  94. {       delay1ms(15);
  95.         wr_com(0x38);delay1ms(5);
  96.         wr_com(0x08);delay1ms(5);
  97.         wr_com(0x01);delay1ms(5);
  98.         wr_com(0x06);delay1ms(5);
  99.         wr_com(0x0c);delay1ms(5);
  100. }uchar GetAD0832(uint Channel)
  101. {
  102.         uchar i=0 , Data1 =0 , Data2 = 0 ;
  103.         AD0832_CLK = 0 ; //時鐘置低平
  104.         AD0832_DI = 1 ; //開始信號為高電平
  105.         AD0832_CS = 0 ; //片選信號置低,啟動AD轉換芯片
  106.         AD0832_CLK = 1 ; //輸入開始信號(構成一個正脈沖),時鐘上升沿,輸入開始信號
  107.         AD0832_CLK = 0 ; //時鐘下降沿
  108.         //模擬信號輸入模式選擇(1:單模信號,0:雙模差分信號)
  109.         AD0832_DI = 1 ;
  110.         AD0832_CLK = 1 ; //時鐘上升沿,輸入開始信號
  111.         AD0832_CLK = 0 ; //時鐘下降沿
  112.         //模擬信號輸入通道選擇(1:通道CH1,0:通道CH0)
  113.         AD0832_DI = Channel ; //選擇通道0
  114.         AD0832_CLK = 1 ; //時鐘上升沿,輸入開始信號
  115.         AD0832_CLK = 0 ; //時鐘下降沿
  116.         AD0832_DI = 1 ; //數據線置高,準備接收數據
  117.     for(i=0;i<8;i++) //從高位移入數據
  118.   {
  119.    AD0832_CLK = 1 ;
  120.    AD0832_CLK = 0 ; //時鐘下降沿,AD0832輸出數據,高位(MSB)先
  121.    Data1 = Data1<<1;
  122.     if(AD0832_DI == 1)
  123.         {Data1 = Data1 | 0x01;} //數據左移位,補0 ,如果數據為“1”,移入1, 如果數據為“0”,移入0,
  124.    }

  125. for(i=0;i<8;i++) //從低位移入數據
  126.    {
  127.                 Data2 = Data2>>1;
  128.                 if(AD0832_DI == 1)
  129.                         {  Data2 = Data2 | 0x80;} //數據右移位,補0,如果數據為“1”,移入1如果數據為“0”,移入0,
  130.                            AD0832_CLK = 1 ;
  131.                            AD0832_CLK = 0 ; //時鐘下降沿,AD0832輸出數據,高位(MSB)先
  132.                      }
  133. //數據線置高,釋放總線,完成一次轉換
  134.                 AD0832_CLK = 1 ;
  135.                 AD0832_DI = 1 ;
  136.                 AD0832_CS = 1 ;
  137.                 return (Data1==Data2)?Data1:0; //   如果相等輸出data1  or  0
  138.    }

  139.     void delay(uint i) //延時程序,i是形式參數,i為1時 延時約1MS
  140.     {
  141.                         uint j;
  142.                         for(;i>0;i--) //變量i由實際參數傳入一個值,因此i不能賦初值
  143.                         for(j=0;j<125;j++) //j由0自增到125 所用的時間大約是1MS
  144.                         {;}
  145.     }
  146.     void main() //主函數
  147. {
  148.     uchar AD_val1; //儲存A/D轉換后的值
  149.         uchar AD_val2;
  150.         delay1(1000);
  151.         lcd_init();//初始化顯示
  152.         delay1(1000);         
  153.      while(1)
  154.       {
  155.                 keypros() ;
  156.             data1[0] = shang / 10;
  157.                     data1[1] = shang % 10;
  158.                         data1[2] = xia / 10;
  159.                     data1[3] = xia % 10;
  160.                     wr_com(0xc0);                 //寫地址 第二行
  161.                     wr_dat('0'+data1[0]);
  162.                         wr_com(0xc1);                 //寫地址 第二行
  163.                         wr_dat('0'+data1[1]);
  164.                         wr_com(0xc3);                 //寫地址 第二行
  165.                         wr_dat('0'+data1[2]);
  166.                         wr_com(0xc4);                 //寫地址 第二行
  167.                         wr_dat('0'+data1[3]);
  168.                         AD_val1= GetAD0832(0); //進行A/D轉換
  169.             if(AD_val1!=0)
  170.                         {
  171.                         disdata[1]=AD_val1/100+0x30;//?位數
  172.                         disdata[2]=AD_val1%100/10+0x30;//?位數
  173.                         disdata[3]=AD_val1%10/1+0x30;//?數位
  174.             delay(5);
  175.                         wr_com(0x81);
  176.             wr_dat(disdata[1]);//顯示小數點
  177.                         delay(5);
  178.                         wr_com(0x82);                 //寫地址 第一行
  179.                         wr_dat(disdata[2])         ;
  180.                         delay(5); //延時1ms
  181.                         wr_com(0x83);                 //寫地址 第一行
  182.                         wr_dat(disdata[3])         ;
  183.                          }
  184.            AD_val2= GetAD0832(1); //進行A/D轉換
  185.            if(AD_val2!=0)
  186.                         {
  187.                         disdata[4]=AD_val2/100+0x30;//?位數
  188.                         disdata[5]=AD_val2%100/10+0x30;//?位數
  189.                         disdata[6]=AD_val2%10/1+0x30;//?數位
  190.             delay(5);
  191.                         wr_com(0x85);
  192.             wr_dat(disdata[4]);//顯示小數點
  193.                         delay(5);
  194.                         wr_com(0x86);                 //寫地址 第一行
  195.                         wr_dat(disdata[5])         ;
  196.                         delay(5); //延時1ms
  197.                         wr_com(0x87);                 //寫地址 第一行
  198.                         wr_dat(disdata[6])         ;

  199.                           }
  200.        }
  201. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:303383 發表于 2018-11-26 23:28 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:279632 發表于 2018-11-27 16:28 | 只看該作者
兄弟  不管是LCD屏還是數碼管都只是顯示工具  你讓他顯示什么他就顯示什么   只要把lcd要打印的參數,賦給數碼管就OK了
回復

使用道具 舉報

地板
ID:358930 發表于 2018-11-27 18:29 來自觸屏版 | 只看該作者
wangwenhao 發表于 2018-11-27 16:28
兄弟  不管是LCD屏還是數碼管都只是顯示工具  你讓他顯示什么他就顯示什么   只要把lcd要打印的參數,賦給 ...

我之前總是把數碼管改成液晶屏,你的要求是反的。但原理一下,我開始學的時候總是喜歡一個程序弄個幾種顯示。回到你的問題:1刪除你的全部LCD定意和驅動程序為的是給數碼管讓出IO口,移植數碼管顯示程序和段位選定意,把數據從新賦給數碼管的顯示。我的多樣顯示文件圖片。每次找起方便。見圖

15433144874840.587751767891784.jpg (30.02 KB, 下載次數: 46)

15433144874840.587751767891784.jpg
回復

使用道具 舉報

5#
ID:412814 發表于 2018-11-29 06:55 | 只看該作者
冰冰潔潔 發表于 2018-11-27 18:29
我之前總是把數碼管改成液晶屏,你的要求是反的。但原理一下,我開始學的時候總是喜歡一個程序弄個幾種顯 ...

謝謝,受教了。以后多請教。
回復

使用道具 舉報

6#
ID:412814 發表于 2018-11-29 06:55 | 只看該作者
小貓貓愛吃魚 發表于 2018-11-26 23:28
你這個呀,液晶改成數碼管顯示,等同于重新寫;
只有 GetAD0832(uint Channel) 函數可以用。。。

謝謝,受教了。以后多請教。
回復

使用道具 舉報

7#
ID:412814 發表于 2018-11-29 06:56 | 只看該作者
wangwenhao 發表于 2018-11-27 16:28
兄弟  不管是LCD屏還是數碼管都只是顯示工具  你讓他顯示什么他就顯示什么   只要把lcd要打印的參數,賦給 ...

謝謝,受教了。以后多請教。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91久久久久蜜臀青青天草二 | 欧美日日 | 高清欧美性猛交xxxx黑人猛交 | 国色天香成人网 | 青青草原综合久久大伊人精品 | 日韩欧美中文在线 | 欧美久久久网站 | 一区二区免费视频 | 国产一区在线看 | 精品一区二区在线观看 | 久久久久一区二区 | av黄色免费 | 精国产品一区二区三区四季综 | 欧美一区二区三区 | 国产精品1区 | 久久久久久久国产 | 一区二区三区视频在线 | 日韩成人 | 国产不卡一区在线观看 | 久久激情视频 | 久久久亚洲 | 成人在线网址 | 免费一级黄色录像 | 黄色在线观看 | 久久高清免费视频 | 永久看片| 色视频www在线播放国产人成 | 99热99| 久久精品国产亚洲 | 亚洲国产精品久久久 | 蜜桃在线一区二区三区 | 色婷婷亚洲国产女人的天堂 | 亚洲综合视频 | wwwxx在线观看| 巨大荫蒂视频欧美另类大 | 青青草视频免费观看 | 日韩一区二区免费视频 | 亚洲精品自拍 | 欧美一区免费 | 一区欧美| 国产一区二区不卡 |