编写MCS-51单片机控制程序,利用AD采集光敏电阻的信号,实现环境亮度的检测,并将亮度值显示于LED数码管。
时间: 2024-03-17 20:39:55 浏览: 20
好的,这是一个具体的嵌入式开发问题,需要编写C语言程序,下面是程序的基本框架和实现步骤:
基本框架:
```c
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit AD_PIN=P3^7;//AD采集引脚
sbit LED_COM=P2^7;//数码管位选引脚
sbit LED_A=P2^6;//数码管A段引脚
sbit LED_B=P2^5;//数码管B段引脚
sbit LED_C=P2^4;//数码管C段引脚
sbit LED_D=P2^3;//数码管D段引脚
sbit LED_E=P2^2;//数码管E段引脚
sbit LED_F=P2^1;//数码管F段引脚
sbit LED_G=P2^0;//数码管G段引脚
void delay(uint x);//延时函数
void AD_init();//AD采集初始化
uint AD_read();//AD采集函数
void LED_display(uchar num);//数码管显示函数
void main(){
uint ad_value;//AD采集的值
uchar display_num;//要显示的数码管数字
AD_init();//AD采集初始化
while(1){
ad_value=AD_read();//读取AD采集的值
display_num=ad_value/100;//计算要显示的数码管数字
LED_display(display_num);//数码管显示
}
}
void delay(uint x){
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void AD_init(){
P1=0xff;//设置P1口为输入
TMOD=0x01;//设置计时器0为模式1
TH0=0x3c;//计时器0初始值
TL0=0xb0;//计时器0初始值
TR0=1;//启动计时器0
}
uint AD_read(){
uint ad_value;
AD_PIN=1;//启动AD采集
delay(1);//等待采集完成
ad_value=TH0*256+TL0;//读取AD采集的值
TH0=0x3c;//重新设置计时器0初始值
TL0=0xb0;//重新设置计时器0初始值
return ad_value;
}
void LED_display(uchar num){
switch(num){
case 0: LED_A=LED_B=LED_C=LED_D=LED_E=LED_F=1;LED_G=0;break;
case 1: LED_B=LED_C=1;LED_A=LED_D=LED_E=LED_F=LED_G=0;break;
case 2: LED_A=LED_B=LED_D=LED_E=LED_G=1;LED_C=LED_F=0;break;
case 3: LED_A=LED_B=LED_C=LED_D=LED_G=1;LED_E=LED_F=0;break;
case 4: LED_B=LED_C=LED_F=LED_G=1;LED_A=LED_D=LED_E=0;break;
case 5: LED_A=LED_C=LED_D=LED_F=LED_G=1;LED_B=LED_E=0;break;
case 6: LED_A=LED_C=LED_D=LED_E=LED_F=LED_G=1;LED_B=0;break;
case 7: LED_A=LED_B=LED_C=1;LED_D=LED_E=LED_F=LED_G=0;break;
case 8: LED_A=LED_B=LED_C=LED_D=LED_E=LED_F=LED_G=1;break;
case 9: LED_A=LED_B=LED_C=LED_D=LED_F=LED_G=1;LED_E=0;break;
default: break;
}
LED_COM=0;//位选
delay(1);
LED_COM=1;
}
```
实现步骤:
1. 定义各个引脚和常量:AD采集引脚、LED数码管引脚、延时函数等。
2. 编写延时函数,用于等待AD采集完成和数码管显示。
3. 编写AD采集初始化函数,设置P1口为输入,计时器0为模式1,定时器初值为0x3c和0xb0,启动计时器0。
4. 编写AD采集函数,启动AD采集,等待采集完成,读取计时器0的值,重新设置计时器0的初值,返回AD采集值。
5. 编写数码管显示函数,根据要显示的数字,设置相应的数码管引脚电平,启动位选引脚,延时一段时间后关闭位选引脚。
6. 在主函数中,循环读取AD采集值,计算要显示的数字,调用数码管显示函数显示数字。
注意事项:
1. AD采集的结果是一个16位的值,需要将其转换为要显示的数字。
2. 数码管显示函数中,需要设置数码管引脚电平时,要注意引脚的极性和编号。
3. 数码管显示函数中,需要先启动位选引脚,再设置数码管引脚电平,延时一段时间后关闭位选引脚,以实现数码管的显示。