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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

深入學(xué)習(xí)STC12單片機(jī)AD多通道轉(zhuǎn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:358930 發(fā)表于 2018-12-4 03:20 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
AD的用途還是很大的
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define uchar unsigned char//只有256
  4. #define uint unsigned int//有16位但占內(nèi)存。
  5. sbit rs=P2^6;//
  6. sbit rw=P2^5;//
  7. sbit en=P2^7;//
  8. sbit k1=P1^4;//按鍵
  9. sbit k2=P1^5;//按鍵
  10. sbit k3=P1^6;//按鍵
  11. sbit k4=P1^7;//按鍵
  12. sbit k5=P3^5;//按鍵
  13. uchar th=50;//放大10 倍
  14. uchar tl=37;//放大10 倍
  15. uint tmp;//tmp電壓值
  16. sbit led=P2^0;
  17. //STC12C5A60S2 特殊功能寄存器 關(guān)于AD部分的寄存器定義
  18. sfr ADC_CONTR   =   0xBC;           //ADC控制寄存器 通道配置
  19. sfr ADC_RES     =   0xBD;           //ADC高8位數(shù)據(jù)寄存器(存AD轉(zhuǎn)換的結(jié)果,共10位)
  20. sfr ADC_LOW2    =   0xBE;           //ADC低2位數(shù)據(jù)寄存器(存AD轉(zhuǎn)換的結(jié)果,共10位)
  21. sfr P1ASF       =   0x9D;           //P1第二功能選擇寄存器
  22. unsigned char ch ; //ADC通道選擇,本例程選擇P1.0為AD轉(zhuǎn)換,其他P1口做普通IO用 01234567
  23. unsigned int ad_out;//ADC_CONTR寄存器的位變量定義
  24. #define ADC_POWER   0x80            //ADC power control bit
  25. #define ADC_FLAG    0x10            //ADC complete flag
  26. #define ADC_START   0x08            //ADC start control bit
  27. #define ADC_SPEEDLL 0x00            //420 clocks
  28. #define ADC_SPEEDL  0x20            //280 clocks
  29. #define ADC_SPEEDH  0x40            //140 clocks
  30. #define ADC_SPEEDHH 0x60            //70 clocks
  31. void delay(unsigned int n)
  32. {
  33.     unsigned int x;
  34.     while (n--)
  35.     {
  36.         x = 5000;
  37.         while (x--);
  38.     }
  39. }
  40. void InitADC() //10位AD數(shù)據(jù)緩存
  41. {
  42.     P1ASF = 0xff;//設(shè)置P1.0為AD腳,P1ASF = 0x01 其他P1口為普通IO功能
  43.     ADC_RES = 0;                    //清空AD輸出高8位
  44. //        if(++ch>7)ch=0;        //循環(huán)顯示8個(gè)通道AD采樣
  45.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
  46.     delay(2);                       //ADC power-on delay and Start A/D conversion
  47. }                     
  48. void write_com(uchar com)//寫命令
  49. {
  50. rs=0;//
  51. rw=0;
  52. en=0;
  53. P0=com;
  54. delay(2);
  55. en=1;
  56. delay(5);
  57. en=0;
  58. delay(2);
  59. }
  60. void write_dat(uchar dat)//寫數(shù)據(jù)
  61. {
  62. rs=1;//
  63. rw=0;
  64. en=0;
  65. P0=dat;
  66. delay(2);
  67. en=1;
  68. delay(5);
  69. en=0;
  70. delay(2);
  71. }
  72. void write_zfc(uchar *p)//定義一個(gè)帶指針的函數(shù)?(字符串)
  73. {
  74.         while(*p!=0)//不能用";"
  75.         write_dat(*p++);
  76. }
  77. void init_1602()//1602初始化
  78. {
  79. write_com(0x38);//設(shè)置16X2顯示
  80. delay(1);
  81. write_com(0x0C);//0e光標(biāo)不閃//0c不顯//0f閃爍顯示
  82. delay(1);
  83. write_com(0x06);//光標(biāo)移位加1
  84. delay(1);
  85. write_com(0x01);//清屏
  86. delay(1);
  87. write_com(0x80);
  88. write_zfc("TH:");
  89. write_com(0x80+8);
  90. write_zfc("TL:");
  91. }
  92. void write_TH(uchar th)//高溫顯示
  93. {
  94. uchar a,b;
  95. a=th/10;
  96. b=th%10;
  97. write_com(0x80+3);
  98. write_dat(0x30+a);
  99. write_dat('.');
  100. write_dat(0x30+b);
  101. write_dat('V');  
  102. }
  103. void write_TL(uchar tl)//低溫顯示
  104. {
  105. uchar a,b;
  106. a=tl/10;
  107. b=tl%10;
  108. write_com(0x80+11);
  109. write_dat(0x30+a);
  110. write_dat('.');
  111. write_dat(0x30+b);
  112. write_dat('V');  
  113. }
  114.    void display()//4位顯示子函數(shù)
  115. {
  116.    uchar qian,bai,shi,ge;

  117.         tmp = (ad_out * 50) / 1024; //10位AD讀取的數(shù)值是0-1024,將這個(gè)值轉(zhuǎn)換成對應(yīng)的0-5V電壓
  118.         qian=tmp/1000;
  119.         bai=tmp%1000/100;
  120.         shi=tmp%100/10;
  121.         ge=tmp%10;
  122.         write_com(0x80+0x40);
  123.         write_zfc("ch");
  124.         write_dat(0x30+ch);
  125.         write_com(0x80+0x40+5);
  126.         write_zfc("out:");
  127.       
  128.         //write_dat(0x30+qian);
  129.    // write_dat(0x30+bai);
  130.         write_dat(0x30+shi);
  131.         write_dat('.');
  132.     write_dat(0x30+ge);
  133.         //write_dat(0xdf);//顯上0標(biāo)志
  134.    write_dat('V');  
  135.    }
  136.         void keyscan()
  137. {
  138. if(k1==0)
  139. {
  140. delay(5);
  141. while(!k1);
  142. th++;
  143. if(th>50)
  144. th=0;
  145. write_TH(th);
  146. }
  147. if(k3==0)
  148. {
  149. delay(5);
  150. while(!k3);
  151. th--;
  152. if(th<1)
  153. th=50;
  154. write_TH(th);
  155. }
  156. if(k2==0)
  157. {
  158. delay(5);
  159. while(!k2);
  160. tl++;
  161. if(tl>50)
  162. tl=0;
  163. write_TL(tl);
  164. }
  165. if(k4==0)
  166. {
  167. delay(5);
  168. while(!k4);
  169. tl--;
  170. if(tl<1)
  171. tl=50;
  172.   write_TL(tl);
  173. }
  174.   if(k5==0)//選擇AD通道0——7
  175. {
  176. delay(5);
  177. while(!k5);
  178. ch++;
  179. if(ch>7)
  180. ch=0;  
  181. }
  182. }
  183. void main()
  184. {               
  185.      InitADC();                      //AD初始化
  186.      IE = 0xa0;                      //允許AD中斷
  187.      init_1602();         
  188.          write_TH(th);
  189.          write_TL(tl);
  190.          led=1;
  191.     while (1)
  192.         {
  193.             display();
  194.                  keyscan();
  195.             EA = 1;// 打開AD中斷         
  196.            if(tmp>tl)//tmp電壓值放大10倍進(jìn)行比較顯示
  197.            {led=0;}
  198.            else led=1;                          
  199.     }
  200. }
  201. void adc_isr() interrupt 5 using 1 //通道電壓整合
  202. {
  203.     ADC_CONTR &= !ADC_FLAG;                                 //Clear ADC interrupt flag
  204.     ad_out = (ADC_RES << 2) + ADC_LOW2;                     //高8位+低兩位
  205.         //if(++ch>7)ch=0;//循環(huán)顯示8個(gè)通道AD采樣
  206.     ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
  207.       
  208. }
復(fù)制代碼









1602顯STC12 8通道按鍵選擇顯示OK.zip

43.12 KB, 下載次數(shù): 29, 下載積分: 黑幣 -5

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:358930 發(fā)表于 2018-12-4 03:30 | 只看該作者
上個(gè)圖

20181204_030839.jpg (314.2 KB, 下載次數(shù): 34)

20181204_030839.jpg

20181204_030925.jpg (353.06 KB, 下載次數(shù): 31)

20181204_030925.jpg
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品一二三 | 色视频网站免费 | 久久亚洲国产精品日日av夜夜 | 一区二区在线免费观看视频 | 亚洲性视频网站 | 久久大陆 | 日韩成人在线观看 | 国产一级视频免费播放 | 大象视频一区二区 | 一级黄色绿像片 | 涩爱av一区二区三区 | 激情网站在线观看 | 欧美激情国产日韩精品一区18 | 久久久久中文字幕 | 国产一级淫片a直接免费看 免费a网站 | 精品在线播放 | 91精品国产自产在线老师啪 | 亚洲免费成人av | ririsao久久精品一区 | 欧美黑人国产人伦爽爽爽 | 色桃网| 伊人久久在线观看 | 免费观看av | 在线亚洲一区二区 | 青青久草 | 91成人午夜性a一级毛片 | 日本福利视频免费观看 | 国产精品不卡 | 国际精品鲁一鲁一区二区小说 | 一区免费看 | 亚洲精品福利在线 | 日本免费视频 | 久久网一区二区三区 | 国产丝袜一区二区三区免费视频 | 狠狠操av | 久久成人高清视频 | 中文字幕免费 | 日本黄色大片免费 | 国产精品久久毛片av大全日韩 | 欧美a区 | 紧缚调教一区二区三区视频 |