标题:
STC12C5A60S2单片机使用ADC读取IO电压用OLED显示程序
[打印本页]
作者:
嗨嗨害
时间:
2023-5-1 18:40
标题:
STC12C5A60S2单片机使用ADC读取IO电压用OLED显示程序
使用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 上传
点击文件名下载附件
源代码
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1