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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數字電壓表,溫度檢測,計算器仿真設計+代碼

  [復制鏈接]
跳轉到指定樓層
樓主
ID:430683 發表于 2018-11-21 17:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式






內含4種課程設計

單片機源程序如下:
  1. /*******************************************************************************************/
  2. //   單片機原理與應用課程設計
  3. //   題目:數字電壓表設設計
  4. //   要點:1、用單片機內部10位ADC對電位器上的0-5V范圍內變化的直流電壓進行測量,用LCD1602顯示測量結果
  5. //       2、用PROTEUS仿真
  6. //       3、焊接電路板并調試運行
  7. //   出品:濰坊學院信息與控制工程學院
  8. //   編程:戴曰章
  9. //   日期:2014年12月
  10. //   注意:該程序1602顯示應該沒有問題,因為PROTEUS不能對STC12C5A60S2的AD進行仿真,
  11. /*******************************************************************************************/

  12. #include<reg52.h>
  13. #include<intrins.h>
  14. #define uchar unsigned char
  15. #define uint unsigned int

  16. #define     LCDIO      P0  //1602數據口


  17. sbit rs=P2^0;  //1602數據命令選擇引腳
  18. sbit rd=P2^1;        //讀寫選擇
  19. sbit lcden=P2^2;        //1602選通引腳

  20. uint tvalue=0;//擬輸出的值
  21.   


  22. uchar code table[]=        {"Current voltage "};    //每行顯示16個字符
  23. uchar code table1[]=        {"is:  00.00V wfu "};

  24. uchar data disdata[5];



  25. /*------------------------以下為ADC相應寄存器初始化及端口定義-------------*/                           
  26. /***** 定義與ADC相關的特殊功能寄存器 *****/
  27.                         
  28. sfr  ADC_CONTR =  0xBC;                            //ADC控制寄存器                    
  29. sfr  ADC_RES  =  0xBD;                             //ADC hight 8-bit result register
  30. sfr  ADC_RESL  =  0xBE;                            //ADC low 2-bit result register
  31. sfr  P1ASF     =  0x9D;                            //P1口功能控制寄存器P1ASF

  32. /************定義相應操作位***************/
  33. #define  ADC_POWER          0x80            //ADC電源控制位,0:關閉,1:打開
  34. #define  ADC_FLAG           0x10            //ADC結束標志位
  35. #define  ADC_START          0x08            //ADC啟動控制位
  36. #define  ADC_SPEEDLL        0x00            //540 clocks___________選擇轉換速度

  37. /*------------------------以下為相關函數聲明------------------------------*/
  38. void InitADC();                                                                                                        //ADC初始化
  39. uint GetADCResult(uchar ch);                                                                                                                                                                        
  40. void delay(uint n);                                                                                         //延時程序


  41. /*-------------------------------- ADC 取值 ------------------------------*/
  42. uint GetADCResult(uchar ch)
  43. {
  44.           ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
  45.           _nop_();                                        //Must wait before inquiry
  46.           _nop_();
  47.           _nop_();
  48.           _nop_();
  49.           while (!(ADC_CONTR & ADC_FLAG));                //Wait complete flag
  50.           ADC_CONTR &= ADC_FLAG;                          //Close ADC

  51.           return (ADC_RES*4 + ADC_RESL);                  //Return ADC result
  52. }
  53.                                           
  54. /*---------------------------- 初始化ADC特殊功能寄存器 -------------------*/

  55. void InitADC( )
  56. {
  57.           P1ASF = P1 | 0x3f;                //Set  P1.0 - P1.5 as analog input port
  58.           ADC_RES  = 0;                  //Clear previous result
  59.                   ADC_RESL = 0;
  60.           ADC_CONTR = ADC_POWER | ADC_SPEEDLL ;
  61.           delay(20);                      //ADC power-on delay and Start A/D conversion
  62. }           


  63. void delay(uint z)        //短延時
  64. {
  65.         uint x,y;
  66.         for(x=z;x>0;x--)
  67.                 for(y=110;y>0;y--);
  68. }

  69. void write_com(uchar com)        //1602寫命令子程序
  70. {
  71.         rs=0;                //RS是數據命令選擇短,高電平寫數據,低電平寫命令
  72.         rd=0;                //RD是讀寫選擇短,高電平讀,低電平寫
  73.         lcden=0;        //1602選通端,高電平選通,低電平禁止
  74.         LCDIO=com;
  75.         delay(5);
  76.         lcden=1;
  77.         delay(5);
  78.         lcden=0;        
  79. }

  80. void write_date(uchar date)        //1602寫數據子程序
  81. {
  82.         rs=1;        //RS是數據命令選擇短,高電平寫數據,低電平寫命令
  83.         rd=0;        //RD是讀寫選擇短,高電平讀,低電平寫
  84.         lcden=0;        //1602選通端,高電平選通,低電平禁止
  85.         LCDIO=date;
  86.         delay(5);
  87.         lcden=1;
  88.         delay(5);
  89.         lcden=0;        
  90. }



  91. void init()                                //1602初始化程序
  92. {
  93.         uchar num;
  94.         lcden=0;

  95.         write_com(0x38);        //0011 1000B,功能模式設置,設置為8為數據口,兩行顯示,5*7點陣
  96.         write_com(0x0c);        //0000 1011B,顯示開及光標設置,關顯示,顯示光標,光標閃爍
  97.         write_com(0x06);        //0000 0110B,顯示光標移動設置,讀或寫一個字符,地址指針減一且光標減一,寫一個字符屏幕顯示不移動
  98.         write_com(0x01);        //0000 0001B,顯示清屏,數據指針和所有顯示清屏
  99.         write_com(0x80);        //1000 000B,關閉顯示
  100.         delay(5);
  101.         write_com(0x80);        //1000 000B,設置為2行顯示,寫入第一行字符的地址,第一行地址是00-2F
  102.         for(num=0;num<16;num++)
  103.                 {
  104.                         write_date(table[num]);        //寫入第一行數據
  105.                         delay(5);
  106.                 }
  107.         write_com(0x80+0x40);        //1100 0000B,設置為2行顯示,寫入第二行字符的地址,第而行地址是40-67
  108.         for(num=0;num<16;num++)        //寫入第二行數據
  109.                 {
  110.                         write_date(table1[num]);//寫入第二行數據
  111.                         delay(5);
  112.                 }      
  113.         

  114. }



  115. void convert(uint n)
  116. {

  117.         float NUM;
  118.         int xx, yy, zz;

  119.         NUM = (n * 5/ 1024.0);        //計算公式:10-bit A/D Conversion Result = 1024 x (Vin / Vcc)
  120.         xx = (int)NUM;
  121.         yy = (int)((NUM - (float)(xx)) * 10);
  122.         zz = (int)((NUM - (float)(xx)) * 100)%10;  

  123.         disdata[0] =xx / 10+0x30;                //電壓值十位
  124.         disdata[1] =xx % 10+0x30;                //電壓值個位
  125.         disdata[2] =yy+0x30;                        //電壓值小數點后一位
  126.         disdata[3] =zz+0x30;                        //電壓值小數點后兩位?



  127.      if(disdata[0]==0x30)
  128.            {disdata[0]=0x20;//如果十位為0,不顯示
  129.                
  130.                 }



  131. }








  132. void ds1602disp()//溫度值顯示
  133.         {

  134.    


  135.            write_com(0x80+0x45);
  136.            write_date(disdata[0]);//顯示百位
  137.            write_com(0x80+0x46);
  138.            write_date(disdata[1]);//顯示十位         
  139.            write_com(0x80+0x47);
  140.     write_date(0x2e);//顯示小數點
  141.                
  142.            write_com(0x80+0x48);
  143.         
  144.            write_date(disdata[2]);//顯示x小數
  145.            write_com(0x80+0x49);
  146.            write_date(disdata[3]);//顯示小數位
  147.            write_com(0x80+0x4a);
  148.            write_date('V');
  149.    }



  150. void main()
  151. {        
  152.         init();
  153.         convert(tvalue);
  154.         ds1602disp();//顯示
  155.         InitADC();                                      //初始化ADC特殊功能寄存器

  156.         while(1)
  157.         {
  158.                 tvalue=GetADCResult(0);      //轉換輸入電壓值(P1.0 - P1.7對應數字0-7,當前對應0)
  159. //                                                  tvalue=1023;

  160.         convert(tvalue);

  161.         delay(1000);


  162.          ds1602disp();//顯示

  163.         }

  164. }
復制代碼

所有資料51hei提供下載:
原理圖-仿真-程序-參考資料.7z (961.18 KB, 下載次數: 796)


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

使用道具 舉報

沙發
ID:316073 發表于 2018-11-26 21:17 | 只看該作者
太謝謝了
回復

使用道具 舉報

板凳
ID:435796 發表于 2018-11-29 16:33 | 只看該作者
太謝謝了
回復

使用道具 舉報

地板
ID:57433 發表于 2019-3-4 19:12 | 只看該作者
謝謝,都是些好程序
回復

使用道具 舉報

5#
ID:866713 發表于 2020-12-23 22:43 | 只看該作者
很不錯  可以換成at89c52嗎,
回復

使用道具 舉報

6#
ID:994772 發表于 2021-12-21 08:14 | 只看該作者
謝謝,這個程序很好
回復

使用道具 舉報

7#
ID:487266 發表于 2022-3-12 18:57 | 只看該作者
溫度測量的不準啊,是不是我版本的問題
回復

使用道具 舉報

8#
ID:1057652 發表于 2022-12-15 09:04 | 只看該作者
太棒了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产区在线观看 | 激情网站在线观看 | 午夜一级做a爰片久久毛片 精品综合 | 婷婷成人在线 | 狠狠色狠狠色综合日日92 | av一级毛片| 国产激情一区二区三区 | 国产精品免费在线 | 日韩亚洲视频 | 亚洲精品乱码8久久久久久日本 | 亚洲女人天堂网 | 在线日韩视频 | 午夜天堂精品久久久久 | 天天av网 | 久久久久久久av麻豆果冻 | 美女一级毛片 | 国产一级淫片a直接免费看 免费a网站 | 亚洲精品美女在线观看 | dy天堂| 一级毛片在线播放 | 中文字幕久久精品 | 日韩精品在线网站 | 天天射夜夜操 | 玖玖精品 | 亚洲一区欧美 | 久久亚洲国产精品日日av夜夜 | 国产偷自视频区视频 | 一区二区三区日韩精品 | 亚洲一二三在线观看 | 国产精品一区在线观看 | 免费在线观看成人av | 国产精品不卡一区 | 91视频免费视频 | 免费观看色| 中文字幕黄色大片 | 精品免费在线 | 国产午夜高清 | 国产色网站| japan21xxxxhd美女 日本欧美国产在线 | 成人黄色在线 | 欧美在线综合 |