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

標題: 兩路溫度顯示單片機程序,請問怎樣才能把LCD改成數碼管顯示,可以不要上下限。 [打印本頁]

作者: jifengjianwu    時間: 2018-11-26 19:01
標題: 兩路溫度顯示單片機程序,請問怎樣才能把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. }
復制代碼

作者: 小貓貓愛吃魚    時間: 2018-11-26 23:28
你這個呀,液晶改成數碼管顯示,等同于重新寫;
只有 GetAD0832(uint Channel) 函數可以用。。。
作者: wangwenhao    時間: 2018-11-27 16:28
兄弟  不管是LCD屏還是數碼管都只是顯示工具  你讓他顯示什么他就顯示什么   只要把lcd要打印的參數,賦給數碼管就OK了
作者: 冰冰潔潔    時間: 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

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

謝謝,受教了。以后多請教。
作者: jifengjianwu    時間: 2018-11-29 06:55
小貓貓愛吃魚 發表于 2018-11-26 23:28
你這個呀,液晶改成數碼管顯示,等同于重新寫;
只有 GetAD0832(uint Channel) 函數可以用。。。

謝謝,受教了。以后多請教。
作者: jifengjianwu    時間: 2018-11-29 06:56
wangwenhao 發表于 2018-11-27 16:28
兄弟  不管是LCD屏還是數碼管都只是顯示工具  你讓他顯示什么他就顯示什么   只要把lcd要打印的參數,賦給 ...

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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 99久久中文字幕三级久久日本 | 日韩一区中文字幕 | 啪一啪 | 成人黄色av网址 | 日本在线你懂的 | 久热国产精品 | 欧美一区二区在线观看视频 | 狠狠ri | 午夜电影一区 | 精品国产欧美一区二区 | 亚洲一区二区综合 | 国产精品毛片久久久久久 | 天天看天天干 | 性高湖久久久久久久久aaaaa | 9999视频 | 免费一区二区三区 | 成年人黄色一级毛片 | 国产精品视频久久 | 人人人人爽 | www.五月天婷婷.com | 在线免费观看日本 | 欧美日本在线 | 精品国产91久久久久久 | 免费国产黄网站在线观看视频 | 精品欧美激情在线观看 | 成人精品在线观看 | 天天干天天爱天天爽 | 免费毛片在线 | 欧美亚洲综合久久 | 亚洲天堂av网 | 亚洲成人网在线播放 | 亚洲人va欧美va人人爽 | 国产高清在线观看 | 一区二区三区中文字幕 | 在线中文字幕av | 亚洲综合视频 | 一区二区视频 | 国产精品久久久久久久久久三级 | 国产成人99久久亚洲综合精品 | 国产免费又色又爽又黄在线观看 | 精品久久久久久18免费网站 |