现已实现电位器调节是数码管显示0-100,但是我想通过外部按键触点低电平去定量程,例如:通过外部给一个口低电平来实现条件语句,比如说调节电位器制90时,外部给一个低电平,90就变成100了,然后实现0-90转换为0-100来显示,从而达到调量程的目的。以下是我的程序,红色部分是我加上的条件句,理论上方法好像就是这个样子的,但是貌似行不通!求大神解答!
//拧动电位器,会在数码管的前三位显示0-100之间的数值。这就是把模拟电压转换成数字信号。
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit adrd=P3^7; //IO口定义
sbit adwr=P3^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit key=P3^4;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint xms) //延时程序
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge) //显示程序
{
dula=1;
P0=table[bai]; //显示百位
dula=0;
P0=0xff;
wela=1;
P0=0x7e;
wela=0;
delayms(5);
dula=1;
P0=table[shi]; //显示十位
dula=0;
P0=0xff;
wela=1;
P0=0x7d;
wela=0;
delayms(5);
dula=1;
P0=table[ge]; //显示十位
dula=0;
P0=0xff;
wela=1;
P0=0x7b;
wela=0;
delayms(5);
}
void main() // 主程序
{
uchar a,A1,A2,A3,adval,D;
uint B,C;
wela=1;
P0=0x7f;
wela=0;
P3=0xff; //先将P3口都置为高位
while(1)
{ //选通ADCS
adwr=1; //AD写入(随便写个什么都行,主要是为了启动AD转换)
_nop_();
adwr=0;
_nop_();
adwr=1; //关闭有AD片选信号锁存器的锁存端以防止在操作数码管时使AD的片选发生变化
for(a=10;a>0;a--) //需要注意的是ADC0804在写和读之间的时间间隔要足够长否则无法读出数据
{ //这里把显示部分放这里的原因也是为了增加写读之间的时间间隔
display(A1,A2,A3);
} //送去显示各位。
P1=0xff; //读取P1口之前先给其写全1
wela=1; //重新打开有AD片选信号锁存器的锁存端
_nop_();
adrd=0;
_nop_();
adval=P1; //AD数据读取赋给P1口
if(key==0)
{
D=adval;
B=adval*100;
C=B/D;
adrd=1;
A1=C/100; //分出百,十,和个位
A2=C%100/10;
A3=C%10;
}
else
B=adval*100;
C=B/255;
adrd=1;
A1=C/100; //分出百,十,和个位
A2=C%100/10;
A3=C%10;
}
}
|