proteus4位数码管仿真在仿真中怎么找到

最近因为课程需要,需要做一个基于PCF8591 A/D转换的数字直流电压表,精确到小数点后三位。本来一个很简单的题目,三下五下写完代码烧到开发板运行没多大问题。接下来需要画出相应的protues仿真电路图,画好电路图加载程序却出现数码管显示不出来的结果。
于是改代码,检查电路都没效果。最终发现是消影语句出的问题。 在开发板上演示时消影语句是:P0=0
而在protues 上仿真时消影要写成:P0=0x00 ; 只有这样程序才能运行正常。下面把整个题目分享出来,有兴趣的可以试一下,希望不要有人再掉入这个坑!!
#include&reg52.h&
#include &intrins.h&
#define AddWr 0x90
#define AddRd 0x91
#define uchar unsigned char
#define uint unsigned int
sbit RST=P2^4;
sbit Sda=P2^0;
sbit Scl=P2^1;
sbit DU=P2^6;
sbit WE=P2^7;
uchar code table[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
0x5e , 0x79 , 0x71 , 0x80 };
stopwatch(uchar ge, uchar z1,uchar z2, uchar z3)
void mDelay(unsigned char j)
unsigned int
for(;j&0;j--)
for(i=0;i&125;i++)
void Init_Timer1(void)
TMOD |= 0x10;
void Start(void)
void Stop(void)
void Ack(void)
void NoAck(void)
void Send(unsigned char Data)
unsigned char BitCounter=8;
unsigned char
if((temp&0x80)==0x80)
temp=Data&&1;
BitCounter--;
while(BitCounter);
unsigned char Read(void)
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
temp=temp|0x01;
temp=temp&0xfe;
if(BitCounter-1)
temp1=temp&&1;
temp=temp1;
BitCounter--;
while(BitCounter);
return(temp);
void DAC(unsigned char Data)
Send(AddWr);
Send(0x40);
Send(Data);
unsigned char ReadADC(unsigned char Chl)
unsigned char D
Send(AddWr);
Send(0x40|Chl);
Send(AddRd);
Data=Read();
void main()
ge , z1, z2, z3 ;
mDelay(20);
Init_Timer1();
if(ADFlag)
ADtemp=(int)(ReadADC(3)*0.01961*1000);
ge =ADtemp/1000;
z1 =ADtemp%1000/100;
z2 =ADtemp%1000%100/10;
z3=ADtemp%10;
stopwatch( ge, z1, z2,
stopwatch(uchar ge, uchar z1,uchar z2, uchar z3)
P0=table[ ge];
mDelay(3) ;
P0=table[ 16];
mDelay( 1) ;
P0=table[ z1];
mDelay( 8) ;
P0=table[ z2];
mDelay( 5) ;
P0=table[ z3];
mDelay( 5) ;
void Timer1_isr(void) interrupt 3
static unsigned int
{j=0;ADFlag=1;}
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2479次
排名:千里之外
(1)(1)(5)(2)21ic官方微信-->
后使用快捷导航没有帐号?
查看: 5193|回复: 14
用proteus仿真的时候 动态显示 数码管产生一闪一闪的现象
&&未结帖(5)
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
proteus仿真的时候,数码管发生一闪一闪的现象 我没有加驱动电路 这个需要加吗?怎么加?我上网查过很多资料,都试过,结果还是不行,请说详细点,谢谢。然后我问过老师之后,他让我改一个4位共阳极的数码管试试,请问,这个4位共阳极数码管怎么连接,如何加驱动电路,加了驱动电路以后程序怎么改?谢谢,小弟初来乍到,请各位大神多多包涵.最好有图。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
中级技术员, 积分 204, 距离下一级还需 96 积分
中级技术员, 积分 204, 距离下一级还需 96 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
中级技术员, 积分 204, 距离下一级还需 96 积分
中级技术员, 积分 204, 距离下一级还需 96 积分
扫描时间是不是有点长了
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1723, 距离下一级还需 277 积分
助理工程师, 积分 1723, 距离下一级还需 277 积分
主题帖子积分
专家等级:结帖率:75%
主题帖子积分
助理工程师, 积分 1723, 距离下一级还需 277 积分
助理工程师, 积分 1723, 距离下一级还需 277 积分
修改数码管的参数,把时间调长一点。好像叫延迟时间还是余辉时间来着。
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
叶伤 发表于
修改数码管的参数,把时间调长一点。好像叫延迟时间还是余辉时间来着。
数码管参数怎么改?我点击数码管的时候只有电压和电流两个参数
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
初级工程师, 积分 2707, 距离下一级还需 293 积分
初级工程师, 积分 2707, 距离下一级还需 293 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
初级工程师, 积分 2707, 距离下一级还需 293 积分
初级工程师, 积分 2707, 距离下一级还需 293 积分
proteus 本来就是这样,硬件正常不一定仿真正常,仿真正常不一定硬件正常,
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
主题帖子积分
专家等级:结帖率:100%打赏:8.88受赏:78.88
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
proteus仿真数码管时,是可以不加驱动电路的,仿真毕竟是相对理想的状态,只要管脚连接正确就可以正常点亮的。你说的一闪一闪,应该是扫描时间偏长(要控制在20ms以内),这个是通过修改单片机的delay时长(这是在学校的做法)。
当你知道迷惑时,并不可怕;当你不知道迷惑时,才最可怕。
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
lmx89 发表于
proteus仿真数码管时,是可以不加驱动电路的,仿真毕竟是相对理想的状态,只要管脚连接正确就可以正常点亮 ...
我已经改过延时时间了啊 但还是不行 我改成了1ms
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
主题帖子积分
专家等级:结帖率:100%打赏:8.88受赏:78.88
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
本帖最后由 lmx89 于
21:29 编辑
那你贴下程序贴下图,才会有人帮你看。其实你的问题,找度娘是可以解决的!
当你知道迷惑时,并不可怕;当你不知道迷惑时,才最可怕。
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
#include&&&msp430f2491.h&
#define CPU_F ((double)1000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/))
const int a[10]={0xc0,0xf9,0xa4,0x60,0x99,0x92,0x82,0xf8,0x80,0x90};
int juli_cm[4];
int T_COUNT;
void init_port( )
& & P1DIR=0x10;& &//P1端口输入模式
& & P2DIR=0xFF;& &//P2端口输出模式
& & P1SEL=0x10;& &//P1端口引脚功能选择器,变为功能端口,作为中断使用
& & P1IE=0x01;& & //P1端口允许中断
& & P1IES=0x00;& &//P1端口上升沿产生中断
& & P4DIR=0xFF;& &//P4端口初始化,为输出模式
& & P6DIR=0xFF;& &//P6端口初始化,为输出模式
void disp( )& && &//显示模块
&&//P6OUT=0x01;& &&&//依次使用数码管,再将值赋给数码管
//P4OUT=a[1];&&
&&P6OUT=0x07;
&&delay_us(1000);
&&P4OUT=juli_cm[3];
//& &P4OUT=a[2];
&&delay_us(1000);
&&P6OUT=0x0B;
&&delay_us(1000);
&&P4OUT=juli_cm[2];
&&delay_us(1000);
// P4OUT=a[3];
&&P6OUT=0x0D;
&&delay_us(1000);
&&P4OUT=juli_cm[1];
&&delay_us(1000);
//& &P4OUT=a[4];
& &P6OUT=0x0E;
& &delay_us(1000);
& &P4OUT=juli_cm[0];
& &delay_us(1000);
#pragma vector=PORT1_VECTOR& & //中断服务子程序
__interrupt void P1_IRQ(void)
//&&while(P1IN&0x01==0x01);& && &&&//如果持续着高电平,就让中断程序等在那边等待低电平调变
& &TACTL=0x02C0;& &//中断模式关闭
& &T_COUNT=TAR;
& &d=T_COUNT*0.017;
& &D=d*10+0.5;
& &juli_cm[3]=a[D/1000];
& &juli_cm[2]=a[D%];
& &juli_cm[1]=a[D%100/10];
& &juli_cm[0]=a[D%10];
& &P1IFG=0x00;
void main(void)
&&WDTCTL = WDTPW + WDTHOLD;& &//关闭看门狗
&&init_port();& && && && && &//调入初始化函数& &
&&_EINT();
&&P1IFG=0x00;
&&while(1)& && && && && && &&&//进入循环
& &P2OUT=0x01;& && && && && & //P2端口输出高电平
& &TACTL=0x02E0;& && && && &&&//中断模式开启,同时进行计数,连续计数模式
& &delay_us(1);& && && && &&&//延时20us
& &P2OUT=0x00;& && && && && & //P2端口跳变为低电平
& &delay_us(1);& && && && &&&//延时20us
& &P2OUT=0x01;
& &disp( );& && && && && && & //调入显示模块&&
这是我的程序 麻烦大神们看一下
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
lmx89 发表于
那你贴下程序贴下图,才会有人帮你看
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
主题帖子积分
专家等级:结帖率:100%打赏:8.88受赏:78.88
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
本帖最后由 lmx89 于
22:07 编辑
chengang992215 发表于
430没接触过,最好带上电路图。
当你知道迷惑时,并不可怕;当你不知道迷惑时,才最可怕。
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
本帖子中包含更多资源
才可以下载或查看,没有帐号?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 42, 距离下一级还需 8 积分
实习生, 积分 42, 距离下一级还需 8 积分
chengang992215 发表于
发了 哎 我要崩溃了 都不知道应该怎么改 什么都试过了 就是不行
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
主题帖子积分
专家等级:结帖率:100%打赏:8.88受赏:78.88
主题帖子积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
助理工程师, 积分 1005, 距离下一级还需 995 积分
chengang992215 发表于
发了 哎 我要崩溃了 都不知道应该怎么改 什么都试过了 就是不行
虽然程序有很多需要改进和优化的地方,总体上没什么大问题(中断我不知道你有没配置正确)。建议先将中断屏蔽,直接在主程序while(1)里只运行disp(),仿真电路也只接数码管(其他都不用)测试,一步一步调试,最后会找到问题所在的
当你知道迷惑时,并不可怕;当你不知道迷惑时,才最可怕。
主题帖子积分
资深技术员, 积分 464, 距离下一级还需 36 积分
资深技术员, 积分 464, 距离下一级还需 36 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深技术员, 积分 464, 距离下一级还需 36 积分
资深技术员, 积分 464, 距离下一级还需 36 积分
用四位的数码管试试,不要用分立数码管。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术新星奖章
人才类勋章
技术高手奖章
人才类勋章
时间类勋章
技术奇才奖章
人才类勋章
湍急之河流
发帖类勋章
时间类勋章
社区建设奖章
等级类勋章
精华达人奖章
等级类勋章
时间类勋章
甘甜之泉水
发帖类勋章
时间类勋章
热门推荐 /1

我要回帖

更多关于 数码管显示仿真图 的文章

 

随机推荐