STC12C5A60S2单片机AD转换程序及显示代码
"STC12C5A60S2单片机AD程序,用于实现ADC转换并将结果显示在LCD12864屏幕上。" 本文将详细解释STC12C5A60S2单片机的ADC(模拟数字转换)程序,并介绍其在显示方面的应用。STC12C5A60S2是一款常见的8位单片机,内置了模拟到数字转换器,允许我们读取模拟信号并将其转换为数字值,以便进行数字处理。 首先,代码中包含了STC12C5A60S2的头文件`<STC12C5A60S2.H>`,这使得我们可以直接访问该单片机的寄存器和功能。在单片机编程中,头文件通常包含了特定型号单片机的定义和宏,便于开发人员操作硬件资源。 接着,定义了一些符号常量,如`sbit CS=P2^0;`,这里的`CS`、`SID`和`SCLK`分别代表LCD12864模块的选择引脚、数据线和时钟线。`P2^0`、`P2^1`和`P2^2`表示P2口的第0位、第1位和第2位,用于与LCD模块通信。`PSB`则是选择LCD工作模式的引脚。 `unsigned int temp1, sh1, ge1, n1, m1;`是用于存储中间计算结果的变量。`unsigned char ad_result_data[10]`、`ad_result_low2[10]`和`ad_result_total[10]`数组分别用来存放AD转换的高8位、低2位和总结果的数据。`unsigned char ad_average_result`则用于保存AD转换的平均值。 在代码中,可以看到一些预定义的字符数组,例如`codema1[]`和`codenum0[]`等,它们用于在LCD12864上显示特定的文字和数字。这些数组实际上包含了ASCII码或者定制的液晶显示码,通过发送这些码值到LCD,可以控制显示的内容。 程序的核心部分应该是ADC的转换过程,这通常涉及到配置ADC控制器,启动转换,等待转换完成,然后读取转换结果。然而,这部分代码没有给出完整的转换过程。通常,我们需要设置ADC的参考电压、选择输入通道、启动转换(可能需要设置一个标志),并在转换完成后读取结果寄存器。 在STC12C5A60S2中,ADC的配置可能涉及以下步骤: 1. 设置ADC时钟分频,例如通过配置`ADCLK`、`ADPS2`、`ADPS1`和`ADPS0`来调整ADC的采样频率。 2. 选择输入通道,通过`CH0SA`、`CH0SB`等寄存器或位选择不同的模拟输入。 3. 启动转换,可能通过设置`ADEN`、`ADTRG`等控制位来触发转换。 4. 检查转换状态,当`ADBUSY`位清零时,表示转换完成。 5. 读取转换结果,从`ADCH`或`ADCW`寄存器获取转换后的数字值。 最后,程序可能会根据得到的AD转换结果进行一些处理,例如计算平均值、显示在LCD上等。这部分在提供的代码片段中并未完全展示,但可以想象它会包含循环读取多个样本,计算平均值,然后将结果显示在LCD上,可能使用到之前定义的显示数组。 这个程序实现了使用STC12C5A60S2单片机的ADC功能读取模拟信号,并将结果通过LCD12864屏幕显示出来。由于代码不完整,具体的转换和显示逻辑需要结合其他代码段来理解。不过,上述分析提供了理解单片机ADC应用的基础。
* 文件名:AD_CAIYANG.C
* 功能:使用AD采集电压显示在LCD
* 说明:转自网络,本人验证通过
****************************************************************************/
#include<STC12C5A60S2.H>
#define uint unsigned int
#define uchar unsigned char
sbit CS=P2^0; //LCD12864串行通信片选
sbit SID=P2^1; //LCD12864串行通信数据口
sbit SCLK=P2^2; //LCD12864串行通信同步时钟信号
sbit PSB=P2^5; //LCD12864并/串选择:H并行 L串行
unsigned int temp1,sh1,ge1,n1,m1;
unsigned char ad_result_data[10]; //AD转换高八位
unsigned char ad_result_low2[10]; //AD转换低八位
unsigned char ad_result_total[10]; //AD转换总十位
unsigned char ad_average_result; //AD转换十次的平均值
unsigned char Ain,Vin;
unsigned char b,t,R;
char tp=0;
unsigned char code ma1[6]={0xb5,0xe7,0xd1,0xb9,0xa1,0xc3}; //电压:
unsigned char code ma2[]={"."};
uchar code disp1[]={"提示: 按1 键进入"};
uchar code disp2[]={"功能选择界面. "};
unsigned char code num0[]={0xa3,0xb0};
unsigned char code num1[]={0xa3,0xb1};
unsigned char code num2[]={0xa3,0xb2};
unsigned char code num3[]={0xa3,0xb3};
unsigned char code num4[]={0xa3,0xb4};
unsigned char code num6[]={0xa3,0xb6};
unsigned char code num7[]={0xa3,0xb7};
unsigned char code num8[]={0xa3,0xb8};
unsigned char code num9[]={0xa3,0xb9};
//-------模块延时程序---------------------------- 1ms
void delay1ms(uint delay1ms) //STC11F60XE,22.1184M,延时1ms
{
uint i,j;
for(;delay1ms>0;delay1ms--)
for(i=0;i<7;i++)
for(j=0;j<210;j++);
}
void delay(uint delay) //STC11F60XE,22.1184M,延时170us
{
uint i,j;
for(;delay>0;delay--)
for(i=0;i<124;i++);
for(j=0;j<124;j++);
}
/*******************************************************
AD转换程序
*******************************************************/
void AD_initiate() //初始化函数
{
ES=0;
TMOD=0x21; //定时计数器方式控制寄存器,"自动重装,16位计数器".
剩余10页未读,继续阅读
- 粉丝: 0
- 资源: 7
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Unity UGUI性能优化实战:UGUI_BatchDemo示例
- Java实现小游戏飞翔的小鸟教程分享
- Ant Design 4.16.8:企业级React组件库的最新更新
- Windows下MongoDB的安装教程与步骤
- 婚庆公司响应式网站模板源码下载
- 高端旅行推荐:官网模板及移动响应式网页设计
- Java基础教程:类与接口的实现与应用
- 高级版照片排版软件功能介绍与操作指南
- 精品黑色插画设计师作品展示网页模板
- 蓝色互联网科技企业Bootstrap网站模板下载
- MQTTFX 1.7.1版:Windows平台最强Mqtt客户端体验
- 黑色摄影主题响应式网站模板设计案例
- 扁平化风格商业旅游网站模板设计
- 绿色留学H5模板:科研教育机构官网解决方案
- Linux环境下EMQX安装全流程指导
- 可爱卡通儿童APP官网模板_复古绿色动画设计