使用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)
|