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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機ADC0809 A\D轉換 數碼管顯示實驗

[復制鏈接]
跳轉到指定樓層
樓主
已知有ADC0809模數轉換器,實驗箱51單片機工作在總線模式,有一模擬電壓,電壓高低由旋鈕電位器控制
要求:
1、通過接線令ADC0809的起始地址為0A000H
2、使用0809上的IN0采集模擬電壓值
3、將0809轉換的結果的二進制數值用8位LED顯示
4、將轉換結果的16進制數值用2位數碼管顯示
5、將采集到的電壓值用3位數碼管顯示,整數位占1位,顯示小數點,小數占2位


單片機源程序如下:
  1.                                                           /*************************************************************************************

  2. *
  3.                                                                        

  4.                                                                                   
  5. **************************************************************************************

  6. */
  7. #include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  8. #include"temp.h"

  9. typedef unsigned int u16;          //對數據類型進行聲明定義
  10. typedef unsigned char u8;

  11. sbit led1=P2^0;
  12. sbit led2=P2^1;
  13. sbit LSA=P2^2;
  14. sbit LSB=P2^3;
  15. sbit LSC=P2^4;



  16. #define GPIO_DIG P0
  17. #define GPIO_KEY P1


  18. char num=0;
  19. u8 DisplayData[8];


  20. u8 KeyValue;        //用來存放讀取到的鍵值


  21. u8 code smgduan[13]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0xc0,0xf9,0xa4};//顯示0~F的值

  22. /*******************************************************************************
  23. * 函 數 名         : delay
  24. * 函數功能                   : 延時函數,i=1時,大約延時10us
  25. *******************************************************************************/
  26. void delay(u16 i)
  27. {
  28.         while(i--);       
  29. }

  30. /*******************************************************************************
  31. * 函 數 名         : KeyDown
  32. * 函數功能                   : 檢測有按鍵按下并讀取鍵值
  33. * 輸    入         : 無
  34. * 輸    出         : 無
  35. *******************************************************************************/
  36. void KeyDown(void)
  37. {                                                                                                                                                                      
  38.         char a=0;
  39.         GPIO_KEY=0x0f;
  40.         if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
  41.         {
  42.                
  43.                 {       
  44.                         //測試列
  45.                         GPIO_KEY=0X0F;
  46.                         switch(GPIO_KEY)
  47.                         {
  48.                         case(0X07):        KeyValue=11;break;
  49.                                 case(0X0b):        KeyValue=12;break;
  50.                                 case(0X0d): KeyValue=10;break;
  51.                                 case(0X0e):        KeyValue=3;break;
  52.                         }
  53.                         //測試行
  54.                         GPIO_KEY=0XF0;
  55.                         switch(GPIO_KEY)
  56.                         {
  57.                                 case(0X70):        KeyValue=KeyValue;break;
  58.                                 case(0Xb0):        KeyValue=10;break;
  59.                                 case(0Xd0): KeyValue=10;break;
  60.                                 case(0Xe0):        KeyValue=10;break;
  61.                         }
  62.                        
  63.                 }
  64.         }
  65.          }


  66.         void LED(void)
  67.         {
  68.         switch(KeyValue)
  69.         {
  70.         case(1):LSA=1;LSB=1;LSC=1;break;
  71.         case(2):LSA=1;LSB=1;LSC=1;break;
  72.         case(0):LSA=1;LSB=1;LSC=1;break;
  73.         }
  74.         }




  75. /*******************************************************************************
  76. * 函 數 名         : datapros()
  77. * 函數功能                   : 溫度讀取處理轉換函數
  78. * 輸    入         : temp
  79. * 輸    出         : 無
  80. *******************************************************************************/

  81. void datapros(int temp)          
  82. {
  83.            float tp;  
  84.         if(temp< 0)                                //當溫度值為負數
  85.           {
  86.                 DisplayData[0] = 0x40;           //   -
  87.                 //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
  88.                 temp=temp-1;
  89.                 temp=~temp;
  90.                 tp=temp;
  91.                 temp=tp*0.0625*100+0.5;       
  92.                 //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  93.                 //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  94.                 //算加上0.5,還是在小數點后面。

  95.           }
  96.         else
  97.           {                       
  98.                 DisplayData[0] = 0x00;
  99.                 tp=temp;//因為數據處理有小數點所以將溫度賦給一個浮點型變量
  100.                 //如果溫度是正的那么,那么正數的原碼就是補碼它本身
  101.                 temp=tp*0.0625*100+0.5;       
  102.                 //留兩個小數點就*100,+0.5是四舍五入,因為C語言浮點數轉換為整型的時候把小數點
  103.                 //后面的數自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  104.                 //算加上0.5,還是在小數點后面。
  105.         }
  106.         DisplayData[1] = smgduan[temp % 10000 / 1000];
  107.         DisplayData[2] = smgduan[temp % 1000 / 100]|0x80;
  108.         DisplayData[3] = smgduan[temp %  100 / 10];
  109.         DisplayData[4] = smgduan[temp %  10 / 1];

  110. }


  111. /*******************************************************************************
  112. * 函數名         :DigDisplay()
  113. * 函數功能                 :數碼管顯示函數
  114. * 輸入           : 無
  115. * 輸出                  : 無
  116. *******************************************************************************/
  117. void DigDisplay()
  118. {
  119.         u8 i;
  120.         for(i=1;i<6;i++)
  121.         {
  122.                 switch(i)         //位選,選擇點亮的數碼管,
  123.                 {
  124.                        
  125.                         case(1):
  126.                                 LSA=1;LSB=1;LSC=1; break;//顯示第1位
  127.                         case(2):
  128.                                 LSA=0;LSB=1;LSC=1; break;//顯示第2位
  129.                         case(3):
  130.                                 LSA=1;LSB=0;LSC=1; break;//顯示第3位
  131.                         case(4):
  132.                                 LSA=0;LSB=0;LSC=1; break;//顯示第4位
  133.                         case(5):
  134.                                 LSA=1;LSB=1;LSC=1; break;//顯示第1位
  135.                                
  136.                 }       
  137.                 P0=DisplayData[i];//發送數據
  138.                 delay(100); //間隔一段時間掃描       
  139.                 P0=0x00;//消隱
  140.         }               
  141. }


  142.                    void        end(){
  143.                                    KeyDown();                   //按鍵判斷函數
  144.                    if(KeyValue==3){
  145.             datapros(Ds18b20ReadTemp());         //數據處理函數
  146.                 DigDisplay();//數碼管顯示函數       
  147.         }
  148.         else{
  149.                 GPIO_DIG=~smgduan[KeyValue];          //
  150.                 LED();}         }


  151. /*******************************************************************************
  152. * 函 數 名       : main
  153. * 函數功能                 : 主函數
  154. * 輸    入       : 無
  155. * 輸    出             : 無
  156. *******************************************************************************/
  157. void main()
  158. {       
  159.         while(1)
  160.         {                       
  161.         end();
  162.         }               
  163. }
  164. void sheding()
  165. {
  166.                 DisplayData[5] = smgduan[3];
  167.         DisplayData[6] = smgduan[0];
  168. }
復制代碼


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:328014 發表于 2021-7-1 18:18 | 只看該作者
樓主你好 缺少頭文件 無法編譯啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕第一页在线 | 国产精品大全 | 日韩有码一区 | 成人在线视频网站 | 看片91| 久久精品国产亚洲 | 五月婷婷激情网 | 国产综合精品一区二区三区 | 综合九九| 91色网站| 精品国产色 | 日韩av在线一区 | 99视频网| 日本特黄特色aaa大片免费 | 99精品国产一区二区三区 | 色久电影 | 成人性视频免费网站 | 亚洲国产日韩一区 | 人人九九精 | www.伊人.com| 丁香一区二区 | 天天插天天舔 | 中文成人无字幕乱码精品 | 久久日韩精品一区二区三区 | 欧美一级片在线播放 | 国产精品亚洲综合 | 国产高清一区二区三区 | 日韩免费视频 | 福利视频一区二区 | 欧美二区在线 | 亚洲三区视频 | 国产羞羞视频在线观看 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 国产精品久久久久久久久久久久冷 | 男人的天堂在线视频 | 丝袜毛片 | 亚洲精品一区二区三区蜜桃久 | 粉嫩高清一区二区三区 | 国产欧美一区二区三区在线看 | 日韩av在线播 | 欧美精品被 |