淘宝店
Google
      
 16 12
发新话题
打印

出个题目,希望能参与。BCD数码管递减显示(适应初学者)

本主题由 瑞新 于 2008-3-23 22:08 设置高亮

出个题目,希望能参与。BCD数码管递减显示(适应初学者)

为活跃论坛气氛,出个小题目。

要求:用两位BCD数码管显示,99到00递减,必须十进制显示。最好是汇编语言和c语言两种。

附件: 您所在的用户组无法下载或查看附件

TOP

还没弄到数码管这一块,请问 bcd 数码管是啥? 输入4根线就能显示?

TOP

谢谢山东人的出题和老弹弓的关心.
凡前两个写出的(汇编和C各一)将赠送一个USBASP下载线(共两个).

TOP

另请楼上两位PM我你的地址,各送给一个USBASP下载线.

TOP

引用:
原帖由 老弹弓 于 2008-3-20 20:00 发表
还没弄到数码管这一块,请问 bcd 数码管是啥? 输入4根线就能显示?
可用PROTEUS仿真软件啊。

TOP

这是我编辑好的,有proteus仿真软件的可先试试。只有hex文件。
附件: 您所在的用户组无法下载或查看附件

TOP

谢谢瑞新! 不过usbasp 已经有了,可以留给更需要的朋友

TOP

谢谢2位对论坛的支持。
淘宝店:http://shop33170822.taobao.com/

TOP

// 4位倒计时程序,用AT89S51,晶振为11.0592MHz
// P2作为数码管的数据输入,P1作为数码管的控制位

#include <reg51.h>

unsigned int time;
unsigned char second10, second1,minute10,minute1;
unsigned char count1=99,count2=99; //定义分倒计99分 钟,秒倒计99秒



//数码管字型码(加点的)
unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};

//数码管字型码(不加点的)
unsigned char code tab1[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //共阴字型码

void delay(unsigned char i) //数码管动态显示的延时子程序
{
unsigned char j;
while((i--)!=0)
{
for(j=123;j>0;j--);
}
}

void display(second10, second1,minute10,minute1) //显示子程序
{
P1=0x04;
P2=tab1[minute10];
delay(1);
P1=0x08;
P2=tab[minute1];
delay(1);
P1=0x10;
P2=tab1[second10];
delay(1);
P1=0x20;
P2=tab1[second1];
delay(1);
}

main()
{
TMOD=(TMOD & 0xf0) | 0x02; //T0工作模式是方式2
TH0=0x06; //定义初始值为0.06ms,计时0.256ms-0.06ms=0.25ms
TL0=0x06;
TR0=1; //开启T0计时
EA=1;
ET0=1;
while(1)
{
display(count1/10,count1%10,count2/10,count2%10);
}
}



void timer0() interrupt 1 using 0 //T0中断
{
TH0=0x06;
TL0=0x06;
time++;
if(time==4000) //4000*0.25ms=1000ms=1s
{
time=0;
count1--;
if(count1==0)
{
count1=99;
count2--;
if(count2==0)
{
count2=99;
}
}
}
}

这是4位的倒计时程序,99.99到00.00,参考这个程序 修改以后,
我加了一个光电开关,判断硬币的滑过, 开始倒计时,做了个游戏机的投币计时控制器,倒记时到00.00时,游戏结束,(原来的投币计时功能损坏,模仿其功能用实验板做了一个换上后,ok了,太高兴了,呵呵
感觉数码管的用处真不少,可以做时钟啊,秒表啊,定时炸弹啊....................等等,加油,加油










[ 本帖最后由 电火花 于 2008-3-30 23:10 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

谢谢瑞新,还是留给更需要的朋友吧。

TOP

 16 12
发新话题