急求AT89C51单片机9灯4位数码管的循环流水灯的控制程序,要求用中断,不
1个回答
展开全部
看这个问题贴出来好久了也没人回答,还是俺来吧,无私奉献了
程序中所使用的端口未必完全一致,所以还需自行修改
本程序的功能是,八位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;}
}
}
程序中所使用的端口未必完全一致,所以还需自行修改
本程序的功能是,八位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 广告
2024-11-28 广告
联系我们一、有无震荡源 无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 二、价格不同 有源蜂鸣器往比无源蜂鸣器贵,就是因为里面多个震荡...
点击进入详情页
本回答由宿兴电子提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询