基于51单片机的简易数字电压表

来源:百度知道 编辑:UC知道 时间:2024/07/06 16:03:12
不知道为什么数码管总是显示乱码,感觉其他的部分都比较正常
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};
sbit ST=P3^0;
sbit eoc=P3^2;
sbit oe=P3^1;
sbit clk=P3^3;
uchar getdata;
uchar dis_ge,dis_fen,dis_bai;
long int i;

void init()
{
TMOD=0x12;//定时器1方式1,定时器0方式2
TH0=216;
TL0=216;
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
TR1=1;
TR0=1;
ET1=1;
ET0=1;
EA=1;
}
void main()
{

init();
while(1)
{
ST=0;
ST=1;
ST=0;
while(eoc==0);
oe=1;
getdata=P0;
oe=0;
i=getdata*196;
dis_ge=i/10000;
i=i%10000;
dis_fen=i/1000;
i=i%1000;
dis_bai=i/100;
ST=1;
ST=0;
}
}
void time0() interrupt 1
{
clk=~clk;
}
void time1() interrupt 3
{

中间加一些延时。。

数码管显示程序,网上有很多,这样写恐怕不对

你可以参考一下,延时肯定要的

扫描分为段扫描很位扫描 段有八段,位一般是四位
八段构成了一位 当需要哪位显示时就先讲段数据送出 然后将位扫描数据送出

你把程序好像不全
如果是因为采集数据中有杂质而造成闪烁,那么你单纯的加延时是不起作用的,需要滤波