89c518位LED动态扫描时钟程序

来源:本站
导读:目前正在解读《89c518位LED动态扫描时钟程序》的相关信息,《89c518位LED动态扫描时钟程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《89c518位LED动态扫描时钟程序》的详细说明。

89c51 8位LED动态扫描时钟程序

//使用12MHZ晶振,P0口输出段码,P2口作列扫描,用共阳LED数码管
//
#include"reg51.h"
codechardis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/*共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮"*/
codecharscan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//列扫描控制字
datachardisdata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共6个
datachardis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据,共6个数据
datacharcon1s=0x00,con04s=0x00,con=0X00;//1秒定时用
sbitkey0=0x90;
sbitkey1=0x91;
sbitkey2=0x92;
//
/****************/
//1毫秒延时程序//
/***************/
delay1ms(intt)
{
inti,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
/****************/
//键扫描子程序//
/****************/
keyscan()
{
EA=0;
if(key0==0)
{
delay1ms(10);
while(key0==0);
if(dis[con]==10)
{dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];}
con++;TR0=0;ET0=0;TR1=1;ET1=1;
if(con>=6)
{con=0;TR1=0;ET1=0;TR0=1;ET0=1;}
}
//
if(con!=0)
{
if(key1==0)
{
delay1ms(10);
while(key1==0);
disdata[con]++;
if(disdata[con]>=10)
{disdata[con]=0;}
dis[con]=disdata[con];dis[6]=0x0a;
}
}
//
if(con!=0)
{
if(key2==0)
{
delay1ms(10);
while(key2==0);
if(disdata[con]==0)
{disdata[con]=0x09;}
else{disdata[con]--;}
dis[con]=disdata[con];dis[6]=0x0a;
}
}
EA=1;
}
//
/***********/
//扫描程序//
/**********/
scan()
{
chark;
for(k=0;k<6;k++)
{
P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0xff;
}
}
/*************/
//初始化程序//
/*************/
clearmen()
{
inti;
for(i=0;i<6;i++)
{
dis[i]=disdata[i];}
TH0=0x3C;TL0=0xB0;//;50MS定时初值(T0计时用)
TH1=0x3C;TL1=0xB0;//;50MS定时初值(T1计时用)
TMOD=0X11;ET0=1;ET1=1;TR1=0;TR0=1;EA=1;//
}
/**********/
//主程序//
/*********/
main()
{
clearmen();
while(1)
{
scan();
keyscan();
}
}
/********************/
//1秒中断处理程序//
/*******************/
voidtime_intt0(void)interrupt1
{
ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;
con1s++;
if(con1s==20)
{
con1s=0x00;
disdata[0]++;
if(disdata[0]>=10)
{
disdata[0]=0;disdata[1]++;
if(disdata[1]>=6)
{
disdata[1]=0;disdata[2]++;
if(disdata[2]>=10)
{
disdata[2]=0;disdata[3]++;
if(disdata[3]>=6)
{
disdata[3]=0;disdata[4]++;
if(disdata[4]>=10)
{
disdata[4]=0;disdata[5]++;
}
if(disdata[5]==2)
{
if(disdata[4]==4)
{
disdata[4]=0;disdata[5]=0;
}
}
}
}
}
}
dis[0]=disdata[0];dis[1]=disdata[1];dis[2]=disdata[2];
dis[3]=disdata[3];dis[4]=disdata[4];dis[5]=disdata[5];
}
ET0=1;
}
/********************/
//0.4秒闪烁中断程序//
/*******************/
voidtime_intt1(void)interrupt3
{
EA=0;TR1=0;TH1=0x3C;TL1=0xB0;TR1=1;
con04s++;
if(con04s==8)
{
con04s=0x00;
dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7];
}
EA=1;
}

//***************************************************************

提醒:《89c518位LED动态扫描时钟程序》最后刷新时间 2024-03-14 01:23:22,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《89c518位LED动态扫描时钟程序》该内容的真实性请自行鉴别。