基于51单片机,P1接口一个按钮A/D转换并设置数码管上下限,数码管接口P3,位码接口P0,两个按钮分别加减数码管数值的keil程序 。
时间: 2024-02-24 13:55:09 浏览: 140
以下是基于51单片机,使用Keil编写的程序,可以实现一个按钮进行A/D转换并设置数码管上下限,数码管接口为P3,位码接口为P0,另外还有两个按钮用于加减数码管数值。
```c
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit ADD=P1^0; //加按钮,按下时ADD=0
sbit SUB=P1^1; //减按钮,按下时SUB=0
sbit LSA=P0^0; //数码管位码选择
sbit LSB=P0^1;
sbit LSC=P0^2;
sbit LEDP=P3^0; //数码管段码控制
sbit LEDG=P3^1;
sbit LEDF=P3^2;
sbit LEDE=P3^3;
sbit LEDD=P3^4;
sbit LEDC=P3^5;
sbit LEDB=P3^6;
sbit LEDA=P3^7;
uchar code table[17]={ //数码管段码表
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,
0x71,0x00
};
void delay(uint xms) { //延时函数
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num) { //数码管显示函数
switch(num) {
case 0: LEDP=table[0]; break;
case 1: LEDP=table[1]; break;
case 2: LEDP=table[2]; break;
case 3: LEDP=table[3]; break;
case 4: LEDP=table[4]; break;
case 5: LEDP=table[5]; break;
case 6: LEDP=table[6]; break;
case 7: LEDP=table[7]; break;
case 8: LEDP=table[8]; break;
case 9: LEDP=table[9]; break;
case 10: LEDP=table[10]; break;
case 11: LEDP=table[11]; break;
case 12: LEDP=table[12]; break;
case 13: LEDP=table[13]; break;
case 14: LEDP=table[14]; break;
case 15: LEDP=table[15]; break;
case 16: LEDP=table[16]; break;
default: break;
}
}
uchar get_ad() { //获取A/D转换值
uchar ad_val;
ADC_CONTR=0x80; //启动A/D转换
delay(10); //延时等待转换完成
while(!(ADC_CONTR&0x20)); //查询转换是否完成
ad_val=ADC_RES; //获取转换结果
return ad_val;
}
void main() {
uchar ad_val,dis_val,up_limit,down_limit;
dis_val=0; //数码管显示值初始为0
up_limit=16; //数码管显示上限值
down_limit=0; //数码管显示下限值
while(1) {
ad_val=get_ad(); //获取A/D转换值
if(ad_val>=down_limit && ad_val<=up_limit) //如果值在上下限范围内
dis_val=ad_val; //显示值为A/D转换值
display(dis_val); //显示数码管值
if(!ADD) { //如果按下加按钮
delay(20); //延时消抖
if(!ADD) { //再次检测按键是否按下
if(dis_val<up_limit) //如果显示值小于上限值
dis_val++; //数码管值加1
while(!ADD); //等待按键松开
}
}
if(!SUB) { //如果按下减按钮
delay(20); //延时消抖
if(!SUB) { //再次检测按键是否按下
if(dis_val>down_limit) //如果显示值大于下限值
dis_val--; //数码管值减1
while(!SUB); //等待按键松开
}
}
}
}
```
程序实现的功能是,通过一个按钮进行A/D转换并设置数码管上下限,然后使用数码管显示A/D转换值,并且可以通过另外两个按钮进行加减数码管的显示值,同时限制了数码管的显示范围。
阅读全文