找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2580|回复: 2
收起左侧

定时器控制数码管动态扫描——(有错误)

[复制链接]
ID:76556 发表于 2015-4-10 03:10 | 显示全部楼层 |阅读模式
我的意思是想让其数码管以0~60循环显示数字但是最后只能显示个位或十位
而且位选也错了我叫它往东它却往西让后又往北!!
从早上写到晚上21点  改了好久好久  其结果是要么控制各位要么控制十位...
达不到我所要求的工作目的!!   瞬间明白为什么程序员爱加班了。。。而且有时加班时间超过14个小时............
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int
uchar aa,ss,ge,shi;
uchar code shuzi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
sbit a=P1^0;
sbit b=P1^1;
void time(uchar k);
void display(ge,shi);
void display(ge,shi);
void main()
{
TMOD=0x01;   
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;   
IT0=1;   
ET0=1;  
TR0=1;
P1=0;
P2=0;       
while(1)
{
P1=0;
P2=0;
display(ge,shi);
}
}
void display(ge,shi)
{
a=1;
P2=shuzi[ge];
time(1);
P2=0;
a=0;

b=1;
P2=shuzi[shi];
time(1 );
P2=0;
b=0;


}
void time(uchar k)
{
uchar x,y;
for(x=100;x>0;x--)
for(y=k;y>0;y--);
}
void dsq0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
ss++;
if(ss==60)
{
ss=0;
}
shi=ss/10;
ge=ss%10;
}
}




设计者:薛羽豪


回复

使用道具 举报

ID:76556 发表于 2015-4-10 03:11 | 显示全部楼层
花了12多个小时的写出来的程序.......... 但可惜只能单独执行个位或者十位....都申明完了但是就是不能一起执行  位选那里也出了错  高低电平的输出全部给我反着来  然后顺序也给我反着来
回复

使用道具 举报

ID:76556 发表于 2015-4-10 03:11 | 显示全部楼层
现在来解释一下错误的原因
1,位选/段选写错了并且其释放的电平高低写错了
2,没有考虑到电路的阳/阴极接法,线也接错了,程序必须与电路匹配
3,最好写上初始化函数
4,有些变量没取对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表