📄 v.c
字号:
#include<reg51.h>
#include<intrins.h> //调用_nop_()延时函数用
#define ad_con P2 //0809的控制口?
#define addata P0 //0809的数据口
#define disdata P1 //数码管的字段码码输出口
#define uchar unsigned char
#define uint unsigned int
uchar num=0x00; //存放单通道显示时的当前通道数
sbit ALE=P2^3; //0809的地址锁存信号
sbit START=P2^4; //0809的启动信号
sbit OE=P2^5; //0809的输出允许信号
sbit KEY1=P3^5; //循环或单路显示选择按键
sbit KEY2=P3^6; //通道选择?按键
sbit EOC=P3^7; //0809的转换结束?信号
sbit DISX=disdata^7; //小数点位
sbit FLAG=PSW^0; //循环或单路显示标志位
uchar code dis_7[11]={0x3f,0x06,0x5b,0x4f,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //LED数码管的字段码
uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //4个LED数码管的位选码
uchar ad_data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //0809的8个通道转换数据缓冲区
uint dis[5]={0x00,0x00,0x00,0x00,0x00}; //显示缓冲区
delay1ms(uint t) //1ms延时子函数
{uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
keytest() //检测按键子函数
{ if(KEY1==0) //检测循环或单路选择按键是否按下
{FLAG=!FLAG; //标志位取反 ,循环,单路显示切换
while(KEY1==0);
}
if(FLAG==1) //单路显示方式时,检测通道选择按键是否按下
{ if(KEY2==0)
{num++;
if(num==8)
{num=0;}
while(KEY2==0);
}
}
}
scan() ?/显示扫面子函数
{
uchar k,n;
int h;
if(FLAG==0) //循环显示子程序
{dis[3]=0x00; //通道值清0
for(n<0;n<8;n++) //8路通道循环8次
{dis[2]=ad_data[n]/51; //当前 通道数据转换为BCD码 ?
dis[4]=ad_data[n]%51;
dis[4]=dis[4]*10;
dis[1]=dis[4]/51;
dis[4]=dis[4]%51;
dis[4]=dis[4]*10;
dis[0]=dis[4]/51;
for(h=0;h<500;h++) //每个通道显示时间控制为1s
{
for(k=0;k<4;k++) //4位LED扫描显示
{
disdata=dis_7[dis[k]];
if(k==2)
{DISX=0;}
P3=scan_con[k];
delay1ms(1);
P3=0xff;
}
}
dis[3]++; //通道值加1
keytest(); //检测按键
}
}
if(FLAG==1) //单路显示子程序
{
dis[3]=num; //当前通道数送通道显示位
for(k=0;k<4;k++) //4位LED扫描显示
{disdata=dis_7[dis[k]];
if(k==2)
{DISX=0;}
P3=scan_con[k];
delay1ms(1);
P3=0xff;
}
keytest(); //检测按键
}
}
test() //ADC0809转换子函数
{ uchar m;
uchar s=0x00; //初始通道为0;
ad_con=s; //第一通道地址送0809控制口
for(m=0;m<8;m++)
{ALE=1;_nop_();_nop_();ALE=0; //锁存通道地址
START=1;_nop_();_nop_();START=0; //启动转换
_nop_();_nop_();_nop_();_nop_();
while(EOC==0); //等待转换结束
OE=1;ad_data[m]=addata;OE=0; //读取当前通道转换数据
s++;ad_con=s; //改变通道地址
}
ad_con=0x00; //通道地址恢复初值
}
main() //主函数
{P0=0xff; //初始化端口
P2=0x00;
P1=0xff;
P3=0xff;
while(1)
{test();
scan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -