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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2188|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

如何把這個(gè)單片機(jī)的ADC改為16位,把電壓顯示轉(zhuǎn)為對(duì)照度的顯示

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:345989 發(fā)表于 2019-6-22 18:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
這是網(wǎng)從上下載的一段程序代碼,我們的設(shè)計(jì)是把其中的ADC改為16位,把電壓顯示轉(zhuǎn)為對(duì)照度的顯示,其中也需要用proteus進(jìn)行一下仿真,因?yàn)閷?duì)單片機(jī)這一塊不太了解,請(qǐng)熱心人士不吝指教。

單片機(jī)源程序如下:
  1. //控制口定義
  2. #include<reg52.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. #define   ad0_7  P1
  7. sbit CS=P1^0;
  8. sbit CLK=P1^1;
  9. sbit DIO=P1^2;
  10. sbit RS=P3^5;
  11. sbit RW=P3^6;
  12. sbit E=P3^7;
  13. sbit BF=P0^7;



  14. void delay (uint t)
  15. {uint i;
  16.         uchar j;
  17.                 for(i=t;i>0;i--);
  18.                         for(j=0;j<200;j++);
  19. }

  20. //AD轉(zhuǎn)換子程序
  21. unsigned char  A_D()
  22. {
  23.   unsigned char i,dat;
  24.    CS=1;   //一個(gè)轉(zhuǎn)換周期開始
  25.    CLK=0;  //為第一個(gè)脈沖作準(zhǔn)備
  26.    CS=0;  //CS置0,片選有效

  27.    DIO=1;    //DIO置1,規(guī)定的起始信號(hào)  
  28.    CLK=1;   //第一個(gè)脈沖
  29.    CLK=0;   //第一個(gè)脈沖的下降沿,此前DIO必須是高電平
  30.    DIO=1;   //DIO置1, 通道選擇信號(hào)  
  31.    CLK=1;   //第二個(gè)脈沖,第2、3個(gè)脈沖下沉之前,DI必須跟別輸入兩位數(shù)據(jù)用于選擇通道,這里選通道CH0
  32.    CLK=0;   //第二個(gè)脈沖下降沿
  33.    DIO=0;   //DI置0,選擇通道0
  34.    CLK=1;    //第三個(gè)脈沖
  35.    CLK=0;    //第三個(gè)脈沖下降沿
  36.    DIO=1;    //第三個(gè)脈沖下沉之后,輸入端DIO失去作用,應(yīng)置1
  37.    CLK=1;    //第四個(gè)脈沖
  38.    for(i=0;i<8;i++)  //高位在前
  39.     {
  40.       CLK=1;         //第四個(gè)脈沖
  41.       CLK=0;
  42.       dat<<=1;       //將下面儲(chǔ)存的低位數(shù)據(jù)向右移
  43.                 dat|=(unsigned char)DIO;          //將輸出數(shù)據(jù)DIO通過或運(yùn)算儲(chǔ)存在dat最低位
  44.     }                                  
  45.     CS=1;          //片選無效
  46.          return dat;         //將讀書的數(shù)據(jù)返回     
  47.   }

  48. unsigned char code digit[10]={"0123456789"};   //定義字符數(shù)組顯示數(shù)字
  49. unsigned char code Str1[]={"LX="};            //說明顯示的是電壓
  50. unsigned char code Str2[]={"nine"};
  51. /*******************************************************************************
  52. 以下是對(duì)液晶模塊的操作程序
  53. *******************************************************************************/

  54. /*****************************************************
  55. 函數(shù)功能:延時(shí)1ms
  56. (3j+2)*i=(3×33+2)×10=1010(微秒),可以認(rèn)為是1毫秒
  57. ***************************************************/
  58. void delay1ms()
  59. {
  60.    unsigned char i,j;       
  61.          for(i=0;i<10;i++)
  62.           for(j=0;j<33;j++)
  63.            ;                 
  64. }
  65. /*****************************************************
  66. 函數(shù)功能:延時(shí)若干毫秒
  67. 入口參數(shù):n
  68. ***************************************************/
  69. void delaynms(unsigned char n)
  70. {
  71.    unsigned char i;
  72.         for(i=0;i<n;i++)
  73.            delay1ms();
  74. }
  75. /*****************************************************
  76. 函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)
  77. 返回值:result。result=1,忙碌;result=0,不忙
  78. ***************************************************/
  79. bit BusyTest(void)
  80.   {
  81.     bit result;
  82.         RS=0;       //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)
  83.     RW=1;
  84.     E=1;        //E=1,才允許讀寫
  85.     _nop_();   //空操作
  86.     _nop_();
  87.     _nop_();
  88.     _nop_();   //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間       
  89.     result=BF;  //將忙碌標(biāo)志電平賦給result
  90.    E=0;         //將E恢復(fù)低電平
  91.    return 0;
  92.   }
  93. /*****************************************************
  94. 函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊
  95. 入口參數(shù):dictate
  96. ***************************************************/
  97. void WriteInstruction (unsigned char dictate)
  98. {   
  99.     while(BusyTest()==1);   //如果忙就等待
  100.          RS=0;                  //根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫入指令
  101.          RW=0;   
  102.          E=0;                   //E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,
  103.                            // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
  104.          _nop_();
  105.          _nop_();               //空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  106.          P0=dictate;            //將數(shù)據(jù)送入P0口,即寫入指令或地址
  107.          _nop_();
  108.          _nop_();
  109.          _nop_();
  110.          _nop_();               //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  111.          E=1;                   //E置高電平
  112.          _nop_();
  113.          _nop_();
  114.          _nop_();
  115.          _nop_();               //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  116.           E=0;                  //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令
  117. }
  118. /*****************************************************
  119. 函數(shù)功能:指定字符顯示的實(shí)際地址
  120. 入口參數(shù):x
  121. ***************************************************/
  122. void WriteAddress(unsigned char x)
  123. {
  124.      WriteInstruction(x|0x80); //顯示位置的確定方法規(guī)定為"80H+地址碼x"
  125. }
  126. /*****************************************************
  127. 函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊
  128. 入口參數(shù):y(為字符常量)
  129. ***************************************************/
  130. void WriteData(unsigned char y)
  131. {
  132.     while(BusyTest()==1);  
  133.           RS=1;           //RS為高電平,RW為低電平時(shí),可以寫入數(shù)據(jù)
  134.           RW=0;
  135.           E=0;            //E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖,
  136.                      // 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置"0"
  137.           P0=y;           //將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊
  138.           _nop_();
  139.           _nop_();
  140.           _nop_();
  141.      _nop_();       //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  142.           E=1;           //E置高電平
  143.           _nop_();
  144.           _nop_();
  145.           _nop_();
  146.          _nop_();        //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間
  147.          E=0;            //當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令
  148. }
  149. /*****************************************************
  150. 函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化設(shè)置
  151. ***************************************************/
  152. void LcdInitiate(void)
  153. {
  154.     delaynms(15);               //延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間
  155.     WriteInstruction(0x38);     //顯示模式設(shè)置:16×2顯示,5×7點(diǎn)陣,8位數(shù)據(jù)接口
  156.         delaynms(5);                //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間
  157.     WriteInstruction(0x38);
  158.         delaynms(5);               //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間
  159.         WriteInstruction(0x38);     //連續(xù)三次,確保初始化成功
  160.         delaynms(5);               //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間
  161.         WriteInstruction(0x0c);     //顯示模式設(shè)置:顯示開,無光標(biāo),光標(biāo)不閃爍
  162.         delaynms(5);               //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間
  163.         WriteInstruction(0x06);     //顯示模式設(shè)置:光標(biāo)右移,字符不移
  164.         delaynms(5);                //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間
  165.         WriteInstruction(0x01);     //清屏幕指令,將以前的顯示內(nèi)容清除
  166.         delaynms(5);             //延時(shí)5ms ,給硬件一點(diǎn)反應(yīng)時(shí)間

  167. }
  168. /**************************************************************************
  169. 以下是電壓顯示的說明
  170. **************************************************************************/
  171. /*****************************************************
  172. 函數(shù)功能:顯示電壓符號(hào)
  173. ***************************************************/   
  174. void display_volt(void)
  175. {
  176.     unsigned char i;
  177.          WriteAddress(0x01);    //寫顯示地址,將在第2行第1列開始顯示
  178.          i = 0;                //從第一個(gè)字符開始顯示
  179.          while(Str1[i] != '\0')  //只要沒有寫到結(jié)束標(biāo)志,就繼續(xù)寫
  180.           {                                               
  181.                  WriteData(Str1[i]);   //將字符常量寫入LCD
  182.                  i++;                 //指向下一個(gè)字符                               
  183.                 }
  184.                
  185.                
  186. }


  187. void display3(void)
  188. {
  189.     unsigned char i;
  190.          WriteAddress(0x80+0x41);    //寫顯示地址,將在第2行第1列開始顯示
  191.          i = 0;                //從第一個(gè)字符開始顯示
  192.          while(Str2[i] != '\0')  //只要沒有寫到結(jié)束標(biāo)志,就繼續(xù)寫
  193.           {                                               
  194.                  WriteData(Str2[i]);   //將字符常量寫入LCD
  195.                  i++;                 //指向下一個(gè)字符                               
  196.                 }
  197.                
  198.                
  199. }

  200. /*****************************************************
  201. 函數(shù)功能:顯示電壓的小數(shù)點(diǎn)
  202. ***************************************************/   
  203. void         display_dot(void)
  204. {         
  205.          WriteAddress(0x09);          //寫顯示地址,將在第1行第10列開始顯示                  
  206.          WriteData('.');       //將小數(shù)點(diǎn)的字符常量寫入LCD               
  207. }

  208. /*****************************************************
  209. 函數(shù)功能:顯示電壓的單位(V)
  210. ***************************************************/   
  211. void         display_V(void)
  212. {
  213.     WriteAddress(0x0e); //寫顯示地址,將在第2行第13列開始顯示       
  214.          WriteData('V');     //將字符常量寫入LCD                       
  215.                        
  216. }
  217. /*****************************************************
  218. 函數(shù)功能:顯示電壓的整數(shù)部分
  219. 入口參數(shù):x
  220. ***************************************************/
  221. void display1(unsigned char x)
  222. {

  223.         WriteAddress(0x08);    //寫顯示地址,將在第2行第7列開始顯示
  224.         WriteData(digit[x]);    //將百位數(shù)字的字符常量寫入LCD
  225. }
  226. /*****************************************************
  227. 函數(shù)功能:顯示電壓的小數(shù)數(shù)部分
  228. 入口參數(shù):x
  229. ***************************************************/
  230. void display2(unsigned char x)
  231. {
  232.         unsigned char i,j;
  233.         i=x/10;            //取十位(小數(shù)點(diǎn)后第一位)
  234.         j=x%10;            //取個(gè)位(小數(shù)點(diǎn)后第二位)
  235.    WriteAddress(0x0a);      //寫顯示地址,將在第1行第11列開始顯示
  236.         WriteData(digit[i]);     //將小數(shù)部分的第一位數(shù)字字符常量寫入LCD
  237.         WriteData(digit[j]);     //將小數(shù)部分的第一位數(shù)字字符常量寫入LCD
  238. }
  239. main(void)
  240. {
  241.   unsigned int AD_val;    //儲(chǔ)存A/D轉(zhuǎn)換后的值
  242.   unsigned char Int,Dec;   //分別儲(chǔ)存轉(zhuǎn)換后的整數(shù)部分與小數(shù)部分
  243.    LcdInitiate();         //將液晶初始化
  244.    delaynms(50);           //延時(shí)5ms給硬件一點(diǎn)反應(yīng)時(shí)間       
  245.    display3();
  246.         display_volt();        //顯示溫度說明
  247.    display_dot();         //顯示溫度的小數(shù)點(diǎn)
  248.    display_V();           //顯示溫度的單位
  249.    while(1)
  250.       {
  251.                   AD_val= A_D();    //進(jìn)行A/D轉(zhuǎn)換
  252.                  
  253.                   Int=(AD_val)/51;  //計(jì)算整數(shù)部分
  254.                   Dec=(AD_val%51)*100/51;    //計(jì)算小數(shù)部分
  255.                   display1(Int);     //顯示整數(shù)部分
  256.                   display2(Dec);     //顯示小數(shù)部分
  257.                   delaynms(500);     //延時(shí)250ms
  258.                 }
  259.                     
  260. }
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī)照度計(jì).zip (22.06 KB, 下載次數(shù): 9)


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

使用道具 舉報(bào)

沙發(fā)
ID:552614 發(fā)表于 2019-6-24 17:00 | 只看該作者
AD轉(zhuǎn)換不是應(yīng)該看芯片類型嗎?,我進(jìn)來學(xué)習(xí)一下,不懂怎么轉(zhuǎn)換
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线视频91 | 精品婷婷| 色视频欧美 | 亚洲国产精品久久久 | 日韩在线精品视频 | 亚洲成人一区二区三区 | 91免费视频观看 | 在线观看成人小视频 | 不卡视频在线 | 91精品国产一区二区三区香蕉 | 激情久久av一区av二区av三区 | 久久久久久色 | 精品视频免费 | 中文字幕精品一区二区三区精品 | av在线播放网 | 亚洲视频 欧美视频 | 国产精久久久久久久妇剪断 | www.国产.com| 国产精品成人一区二区三区 | 成人精品在线视频 | 一级大黄色片 | 中文天堂在线一区 | 二区精品 | 国产精品久久久久久久久免费樱桃 | 一区二区三区不卡视频 | 国产一区二区精品在线 | 欧美成人一区二免费视频软件 | 一区二区三区四区不卡 | 男女下面一进一出网站 | 九九热国产精品视频 | 男女羞羞视频在线观看 | 欧美在线观看一区二区 | 亚洲在线久久 | 免费看a| 久久草视频 | 欧美中文字幕在线观看 | 亚洲国产精品久久久久秋霞不卡 | 国产精品一区2区 | 久久国产精品视频 | 欧美亚洲综合久久 | 亚洲精品在线看 |