标题:
ADC0804+单片机数字电压表 数码管动态显示Proteus仿真
[打印本页]
作者:
lk123i
时间:
2019-11-9 19:52
标题:
ADC0804+单片机数字电压表 数码管动态显示Proteus仿真
单片机设计电压表,自己认为注释比较详细,注释附件里有,小白设计,有不足多多指教。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
3`[T3D8VOSTGQJ0CO9[7F.png
(49.22 KB, 下载次数: 57)
下载附件
2019-11-9 19:50 上传
单片机源程序如下:
#include<reg51.h> //头文件
#define uchar unsigned char; //宏定义
#define uint unsigned int;
sfr p2=0xa0; //特殊功能寄存器使用
sfr p3=0xb0; //P2端口所对应的字节地址就是0xA0 一整个P2的8位都在0xA0地址上
sbit P13=P1^3; //位定义
sbit P14=P1^4;
sbit P12=P1^2;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P11=P1^1;
sbit P10=P1^0;
sbit wr=P3^6;
sbit rd=P3^7;
uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管段码
uchar code weima[]= {0x0e,0x0d,0x0b,0x07}; //数码管位码
uchar w;
uint i,j,f,z,h;
uchar tem[]={0,0,0,0};
void zhuanhuan()
{
rd=0; //读操作
for(i=0;i<10;i++);
wr=0; //写操作
for(i=0;i<10;i++) //0~9 10个数
wr=1;
z=P1; //读回P1
tem[0]=(P1+1)*5/256; //个位 x=(255.99*5*100+5)/256=500
tem[1]=(P1+1)*50/256%10; //P1口最大值255 所以P1+1
tem[2]=(P1+1)*500/256%10;
tem[3]=(P1+1)*100/256%10;
if(P1==255)
{
tem[2]=0;
}
if(z==0)
{
tem[0]=0;
tem[1]=0;
tem[2]=0;
tem[3]=0;
}
}
void display() //数码管显示函数
{
for(w=0;w<4;w++)
{
p2=0;
p2=duanma[tem[w]];
P3=weima[w];
if(w==0)
{
p2=duanma[tem[w]]+0x80; //个位段码 后加小数点
P3=weima[w] ; //个位位码
}
for(j=0;j<10;j++) ;
}
}
void main()
{
while(1)
{
display();
zhuanhuan();
}
}
复制代码
所有资料51hei提供下载:
单片机设计电压表.rar
(154.21 KB, 下载次数: 84)
2019-11-9 19:51 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
Nexus
时间:
2019-11-28 13:49
楼主没看到仿真文件啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1