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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

ADC0832兩路ad轉換 LCD1602顯示單片機程序

  [復制鏈接]
跳轉到指定樓層
樓主
ADC0832兩路ad轉換仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)





單片機源程序如下:
  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.     }
  49.     if((k3==0)&&(k1==0)    )      //歸位

  50.     {
  51.         delay1(1000);
  52.         shang=40;
  53.         xia=20;
  54.    
  55.     }
  56. }



  57. /*************************lcd1602程序**************************/
  58. void delay1ms(uint ms)//延時1毫秒(不夠精確的)
  59. {  uint i,j;
  60.    for(i=0;i<ms;i++)
  61.     for(j=0;j<100;j++);
  62. }

  63. void wr_com(uchar com)//寫指令//
  64. {
  65.    delay1ms(1);
  66.    RS=0;
  67.    RW=0;
  68.    EN=0;
  69.    P0=com;
  70.    delay1ms(1);
  71.    EN=1;
  72.    delay1ms(1);
  73.    EN=0;
  74. }

  75. void wr_dat(uchar dat)//寫數據//
  76. {  
  77.    delay1ms(1);
  78.    RS=1;
  79.    RW=0;
  80.    EN=0;
  81.    P0=dat;
  82.    delay1ms(1);
  83.    EN=1;
  84.    delay1ms(1);
  85.    EN=0;
  86. }
  87. void wr_new()                  //寫新字符
  88. {
  89.         uchar i;
  90.         wr_com(0x40);
  91.         for(i=0;i<8;i++)
  92.         {
  93.                 wr_dat(table[i]);
  94.         }
  95. }
  96. void lcd_init()//初始化設置//
  97. {       delay1ms(15);
  98.         wr_com(0x38);delay1ms(5);
  99.         wr_com(0x08);delay1ms(5);
  100.         wr_com(0x01);delay1ms(5);
  101.         wr_com(0x06);delay1ms(5);
  102.         wr_com(0x0c);delay1ms(5);
  103.         
  104.         
  105. }

  106. uchar GetAD0832(uint Channel)
  107. {
  108.     uchar i=0 , Data1 =0 , Data2 = 0 ;
  109.     AD0832_CLK = 0 ; //時鐘置低平
  110.     AD0832_DI = 1 ; //開始信號為高電平
  111.     AD0832_CS = 0 ; //片選信號置低,啟動AD轉換芯片
  112.     AD0832_CLK = 1 ; //輸入開始信號(構成一個正脈沖),時鐘上升沿,輸入開始信號
  113.     AD0832_CLK = 0 ; //時鐘下降沿
  114.     //模擬信號輸入模式選擇(1:單模信號,0:雙模差分信號)
  115.     AD0832_DI = 1 ;
  116.     AD0832_CLK = 1 ; //時鐘上升沿,輸入開始信號
  117.     AD0832_CLK = 0 ; //時鐘下降沿
  118.     //模擬信號輸入通道選擇(1:通道CH1,0:通道CH0)
  119.     AD0832_DI = Channel ; //選擇通道0
  120.     AD0832_CLK = 1 ; //時鐘上升沿,輸入開始信號
  121.     AD0832_CLK = 0 ; //時鐘下降沿
  122.    
  123.     AD0832_DI = 1 ; //數據線置高,準備接收數據
  124.     for(i=0;i<8;i++) //從高位移入數據
  125.   {
  126.    AD0832_CLK = 1 ;
  127.    AD0832_CLK = 0 ; //時鐘下降沿,AD0832輸出數據,高位(MSB)先
  128.    Data1 = Data1<<1;
  129.     if(AD0832_DI == 1)
  130.         {Data1 = Data1 | 0x01;} //數據左移位,補0 ,如果數據為“1”,移入1, 如果數據為“0”,移入0,
  131.    }

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

  147.     void delay(uint i) //延時程序,i是形式參數,i為1時 延時約1MS
  148.     {
  149.             uint j;
  150.             for(;i>0;i--) //變量i由實際參數傳入一個值,因此i不能賦初值
  151.             for(j=0;j<125;j++) //j由0自增到125 所用的時間大約是1MS
  152.             {;}


  153.     }

  154.    


  155.      void main() //主函數
  156. {

  157.     uchar AD_val1; //儲存A/D轉換后的值
  158.     uchar AD_val2;
  159.     delay1(1000);
  160.     lcd_init();//初始化顯示
  161.     delay1(1000);     

  162.      
  163.       while(1)
  164.       {
  165.            keypros() ;


  166.                 data1[0] = shang / 10;
  167.                 data1[1] = shang % 10;
  168.                 data1[2] = xia / 10;
  169.                 data1[3] = xia % 10;
  170.         
  171.                 wr_com(0xc0);         //寫地址 第二行
  172.                 wr_dat('0'+data1[0]);
  173.                 wr_com(0xc1);         //寫地址 第二行
  174.                 wr_dat('0'+data1[1]);
  175.                 wr_com(0xc3);         //寫地址 第二行
  176.                 wr_dat('0'+data1[2]);
  177.                 wr_com(0xc4);         //寫地址 第二行
  178.                 wr_dat('0'+data1[3]);
  179.                

  180.            AD_val1= GetAD0832(0); //進行A/D轉換


  181.            if(AD_val1!=0)
  182.             {
  183.             
  184.              disdata[1]=AD_val1/100+0x30;//?位數
  185.             
  186.         
  187.              disdata[2]=AD_val1%100/10+0x30;//?位數
  188.             
  189.         
  190.              disdata[3]=AD_val1%10/1+0x30;//?數位

  191.             delay(5);
  192.             wr_com(0x81);
  193.             wr_dat(disdata[1]);//顯示小數點
  194.             delay(5);
  195.             wr_com(0x82);         //寫地址 第一行
  196.             wr_dat(disdata[2])     ;
  197.             delay(5); //延時1ms
  198.             wr_com(0x83);         //寫地址 第一行
  199.             wr_dat(disdata[3])     ;
  200.              }

  201.             AD_val2= GetAD0832(1); //進行A/D轉換
  202.            if(AD_val2!=0)
  203.             {
  204.             
  205.              disdata[4]=AD_val2/100+0x30;//?位數
  206.             
  207.         
  208.              disdata[5]=AD_val2%100/10+0x30;//?位數
  209.             
  210.         
  211.              disdata[6]=AD_val2%10/1+0x30;//?數位

  212.             delay(5);
  213.             wr_com(0x85);
  214.             wr_dat(disdata[4]);//顯示小數點
  215.             delay(5);
  216.             wr_com(0x86);         //寫地址 第一行
  217.             wr_dat(disdata[5])     ;
  218.             delay(5); //延時1ms
  219.             wr_com(0x87);         //寫地址 第一行
  220.             wr_dat(disdata[6])     ;



  221.               }
  222.        }
  223. }

復制代碼

所有資料51hei提供下載:
代碼肯定還存在很多問題,求大神指導,需要用Proteus7.5版本打開: adc0832.zip (90.32 KB, 下載次數: 463)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:298321 發表于 2018-5-21 00:47 | 只看該作者
請問你在哪里找的ADC0832??
回復

使用道具 舉報

板凳
ID:209954 發表于 2018-6-12 11:42 | 只看該作者
感謝樓主分享!!
回復

使用道具 舉報

地板
ID:342294 發表于 2018-7-27 15:31 | 只看該作者
為什么沒有中斷
回復

使用道具 舉報

5#
ID:438506 發表于 2019-3-31 13:23 | 只看該作者
多謝分享
回復

使用道具 舉報

6#
ID:438506 發表于 2019-3-31 13:23 | 只看該作者
多謝分享  剛需 謝了
回復

使用道具 舉報

7#
ID:155141 發表于 2019-6-5 23:28 | 只看該作者
代碼有點問題,仿真結果偏差太大
回復

使用道具 舉報

8#
ID:110875 發表于 2020-2-9 12:26 | 只看該作者
看了一眼,按鍵沒有消抖,也沒有松手檢測。
回復

使用道具 舉報

9#
ID:909077 發表于 2021-4-22 08:29 | 只看該作者
兩路電壓顯示壓根就不對
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91久久精品国产91久久性色tv | 久久久久国产精品一区二区 | 欧一区 | 毛片免费观看视频 | 欧美高清视频 | 国产伦精品一区二区三区高清 | 欧美久久国产精品 | 亚洲大片在线观看 | 成人在线一区二区 | 亚洲视频 欧美视频 | 久久精品免费观看 | 国产一区二区电影 | 国产欧美日韩视频 | 天天av综合 | 日韩免费一区二区 | 精品视频在线免费观看 | 天天曰夜夜 | 午夜精品视频 | 麻豆91精品91久久久 | 黄片毛片在线观看 | 日日噜噜夜夜爽爽狠狠 | 一区二区视频在线观看 | 九九热国产精品视频 | 日韩看片 | 成人精品毛片国产亚洲av十九禁 | 亚洲国产精品成人 | www国产成人免费观看视频,深夜成人网 | 国产在线精品一区二区 | 理论片免费在线观看 | 中文字幕一区在线 | 日日摸夜夜添夜夜添精品视频 | 久久久久久久一区 | 欧美日在线| 每日更新av | 男女羞羞的网站 | 青娱乐自拍 | 国产婷婷在线视频 | 麻豆91精品91久久久 | 国产精品视频免费播放 | 99热在线观看精品 | 成年人的视频免费观看 |