急求AT89C51单片机9灯4位数码管的循环流水灯的控制程序,要求用中断,不

急求AT89C51单片机9灯4位数码管的循环流水灯的控制程序,要求用中断,不能用延时... 急求AT89C51单片机9灯4位数码管的循环流水灯的控制程序,要求用中断,不能用延时 展开
 我来答
帐号已注销
2016-12-31 · TA获得超过2062个赞
知道小有建树答主
回答量:342
采纳率:0%
帮助的人:342万
展开全部
看这个问题贴出来好久了也没人回答,还是俺来吧,无私奉献了

程序中所使用的端口未必完全一致,所以还需自行修改

本程序的功能是,八位LED以0.1秒的间隔做流水式移动,每完成一次则数码管的显示数值就加一

此程序仅供参考,若满意请记得采纳下!

/***************************************************************************/
#include<reg52.h>

int n,t,h;
void YS(int hs); void XS(int xs);
char led[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//LED流水灯编码
sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
/***************************************************************************/
void main()
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256;
TMOD=0x02; EA=1; ET0=1; TR0=1;//定时器初始化

while(1)
{
P2=led[t];//端口输出
XS(h);//调用数码管显示函数
}
}
/***************************************************************************/
void XS(int xs) //显示子函数
{
char d1,d2,d3,d4;
d4=(xs/1)%10; d3=(xs/10)%10; d2=(xs/100)%10; d1=(xs/1000)%10;
P0=table[d4];Axs=0;YS(10);Axs=1; P0=table[d3];Bxs=0;YS(10);Bxs=1;
P0=table[d2];Cxs=0;YS(10);Cxs=1; P0=table[d1];Dxs=0;YS(10);Dxs=1;
}
/***************************************************************************/
void YS(int hs)//延时函数
{int hk;for(;hs>0;hs--){for(hk=10;hk>0;hk--);}}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;

if(n>1000)//如果达到一秒,且状态一
{
n=0;t++;
if(t>8){t=0;h++;}
if(h>9999){h=0;}
}
}
宿兴电子
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡... 点击进入详情页
本回答由宿兴电子提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式