使用STC12C5A60S2讀取IO口0~5V的電壓使用0~255范圍表示電壓范圍
P0^6 SCLP0^7
SDAP1.0
ADC 通道0P1.1 ADC 通道1
單片機源程序如下:
- //P0^6 SCL
- //P0^7 SDA
- //P1.0 ADC 通道0
- //P1.1 ADC 通道1
- #include <STC12C5A60S2.H>
- #include <intrins.h>
- #include <oled.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- /*聲明ADC相關寄存器 */
- //sfr ADC_CONTR = 0xBC; //ADC 控制寄存器
- //sfr ADC_RES = 0xBD; //ADC 高8位結果寄存器
- //sfr ADC_LOW2 = 0xBE; //ADC 低2位結果寄存器
- //sfr P1ASF = 0x9D; //P1 輔助控制寄存器
- /*ADC操作的一些宏定義*/
- #define ADC_POWER 0x80 //ADC power control bit
- #define ADC_FLAG 0x10 //ADC complete flag
- #define ADC_START 0x08 //ADC start control bit
- #define ADC_SPEEDLL 0x00 //420 clocks
- #define ADC_SPEEDL 0x20 //280 clocks
- #define ADC_SPEEDH 0x40 //140 clocks
- #define ADC_SPEEDHH 0x60 //70 clocks
- void DelayUs2x(unsigned char t)
- {
- while(--t);
- }
- void DelayMs(unsigned char t)
- {
-
- while(t--)
- {
- //大致延時1mS
- DelayUs2x(245);
- DelayUs2x(245);
- }
- }
- /**********************************************
- *函數名稱:InitADC()
- *函數功能:初始化ADC
- *輸入:無
- *返回:無
- **********************************************/
- void InitADC()
- {
- P1ASF = 0xf0; //開啟8路ADC功能 1111 0000
- ADC_RES = 0; //清楚之前的結果
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL;
- DelayMs(2); //ADC上電和延時
- }
- /**************************************
- 函數名稱:GetADCResult(unsigned int ch)
- 功能描述:讀取AD
- 入口參數:unsigned int ch 輸入0-7分別讀取AD0-AD7值
- 返回值:無
- ***************************************/
- unsigned char GetADCResult(unsigned char ch)
- {
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
- _nop_(); //查詢前必須等待
- _nop_();
- _nop_();
- _nop_();
- while (!(ADC_CONTR & ADC_FLAG));//等待完成標志
- ADC_CONTR &= ~ADC_FLAG; //關閉 ADC
- return ADC_RES; //返回ADC結果
- }
- void main()
- {
- unsigned char temp , T ;
- unsigned int a ,b ,c, d;
- InitADC();//ADC初始化
- OLED_Init();//初始化OLED
- OLED_ColorTurn(0);//0正常顯示,1 反色顯示
- OLED_DisplayTurn(1);//0正常顯示 1 屏幕翻轉顯示
- while(1)
- {
- temp = GetADCResult(0);
- T = GetADCResult(1);
- a = (temp / 1000 );//打印千位
- b = (temp % 1000 / 100 );//打印百位
- c = (temp % 100 / 10 );//打印十位
- d = (temp % 10 );//打印個位
- DelayMs(100);
-
- OLED_ShowString(53,2,"temp:",8);
- OLED_ShowNum(86,2,temp,3,8);
- OLED_ShowString(53,1,"T:",8);
- OLED_ShowNum(86,1,T,3,8);
-
-
-
- // OLED_ShowString(53,0,"a:",8);
- // OLED_ShowNum(86,0,a,3,8);
- //
- // OLED_ShowString(53,1,"b:",8);
- // OLED_ShowNum(86,1,b,3,8);
- //
- // OLED_ShowString(53,2,"c:",8);
- // OLED_ShowNum(86,2,c,3,8);
-
- }
- }
復制代碼
Keil代碼下載:
試驗.rar
(61.67 KB, 下載次數: 52)
2023-5-1 18:36 上傳
點擊文件名下載附件
源代碼
|