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

標(biāo)題: 深入學(xué)習(xí)STC12單片機(jī)AD多通道轉(zhuǎn) [打印本頁]

作者: 冰冰潔潔    時間: 2018-12-4 03:20
標(biāo)題: 深入學(xué)習(xí)STC12單片機(jī)AD多通道轉(zhuǎn)
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個通道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)//定義一個帶指針的函數(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,將這個值轉(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個通道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


作者: 冰冰潔潔    時間: 2018-12-4 03:30
上個圖

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

20181204_030839.jpg

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

20181204_030925.jpg





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 天天操操 | 91黄在线观看| 亚洲欧美在线视频 | 亚洲精品在线看 | 中文字幕在线观看 | 日本不卡一区 | 亚洲一区久久 | 欧美a在线 | 福利片在线看 | 亚洲国产精品一区二区www | 91免费在线看 | 精品久久久久久亚洲综合网站 | 一区中文字幕 | 97人澡人人添人人爽欧美 | 国产欧美在线 | 看黄在线 | 国产视频在线观看一区二区三区 | 午夜综合| 欧美日韩精品一区二区天天拍 | 成人区一区二区三区 | 精精国产xxxx视频在线播放 | 亚洲人成网亚洲欧洲无码 | 黄色香蕉视频在线观看 | 美女黄色在线观看 | 欧美成人精品一区 | 精品一区二区av | 美女一级a毛片免费观看97 | 日韩一区精品 | 欧美极品视频 | 欧美福利专区 | www精品| 男女网站视频 | 亚洲精品国产精品国自产在线 | 99re视频在线免费观看 | 97精品超碰一区二区三区 | 国产一区二区影院 | 国产精品久久久久久久久久三级 | 久久伊人免费视频 | 一区二区免费视频 | 午夜精品一区 | 国产精品不卡视频 |