帮我写一个C51的程序,利用adc调控大小,实现lcd的四位数字逐渐递增
时间: 2024-03-06 18:51:55 浏览: 71
基于C51的4位数码管动态显示程序
5星 · 资源好评率100%
好的,这里提供一个简单的C51程序,利用ADC调节LCD显示的四位数字逐渐递增。
```c
#include <reg52.h>
#include <intrins.h>
#define LCD_DATA_PORT P0 // LCD数据口
sbit LCD_RS = P2^0; // LCD_RS
sbit LCD_RW = P2^1; // LCD_RW
sbit LCD_EN = P2^2; // LCD_EN
unsigned int ADC_value; // ADC采集的数值
unsigned int num = 0; // 要显示的数字
// ADC初始化函数
void ADC_Init() {
ADC_CONTR = 0x80; // 开启ADC电源
P1ASF = 0x01; // P1.0作为ADC输入口
ADC_RES = 0; // 清除结果寄存器
ADC_RESL = 0; // 清除结果寄存器低8位
}
// ADC采样函数
unsigned int GetADCResult() {
ADC_CONTR = 0x88; // ADC转换开始
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR & 0x10)); // 等待ADC转换完成
ADC_CONTR &= 0xEF; // 清除ADC转换完成标志
return ADC_RES * 256 + ADC_RESL; // 返回ADC采集到的数值
}
// LCD写命令函数
void LCD_WriteCmd(unsigned char cmd) {
LCD_RS = 0;
LCD_RW = 0;
LCD_DATA_PORT = cmd;
LCD_EN = 1;
_nop_();
_nop_();
LCD_EN = 0;
}
// LCD写数据函数
void LCD_WriteData(unsigned char dat) {
LCD_RS = 1;
LCD_RW = 0;
LCD_DATA_PORT = dat;
LCD_EN = 1;
_nop_();
_nop_();
LCD_EN = 0;
}
// LCD初始化函数
void LCD_Init() {
LCD_WriteCmd(0x38); // 8位数据口,2行显示,5x7点阵
LCD_WriteCmd(0x0C); // 显示开,光标关,闪烁关
LCD_WriteCmd(0x06); // 光标移动,文字不动
LCD_WriteCmd(0x01); // 清屏
}
// 显示数字函数
void DisplayNum(unsigned int num) {
unsigned char i;
unsigned char str[4] = {0, 0, 0, 0};
str[0] = num / 1000;
str[1] = (num % 1000) / 100;
str[2] = (num % 100) / 10;
str[3] = num % 10;
for (i = 0; i < 4; i++) {
LCD_WriteData(str[i] + '0');
}
}
int main() {
ADC_Init(); // 初始化ADC
LCD_Init(); // 初始化LCD
while (1) {
ADC_value = GetADCResult(); // 获取ADC采集到的数值
num = ADC_value / 4; // 将采集到的数值转换为0~9999范围内的数字
DisplayNum(num); // 显示数字
}
return 0;
}
```
这个程序的主要思路是:不断读取ADC采集到的数值,并将其转换为0~9999范围内的数字,然后在LCD上显示出来。通过调节ADC输入的电压,可以实现LCD上数字的逐渐递增或递减。需要注意的是,这个程序只是一个简单的示例,实际应用时需要根据具体要求进行修改和完善。
阅读全文