/*********************************************************************/
//
// 采用8位LED动态扫描时钟演示程序
// LRM 2004.03.31
/*********************************************************************/
//使用12MHZ晶振,P0口输出段码,P2口作列扫描,用共阳LED数码管
//
#include "reg51.h"
code char dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" */
code char scan_con[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 列扫描控制字
//data char disdata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//计时单元数据初值,共6个
data char dis[6]={0x00,0x01,0x02,0x03,0x04,0x05};//显示单元数据,共6个数据
data char con1s=0x00; //1秒定时用?
//
/****************/
//1毫秒延时程序//
/***************/
delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
/****************/
// 键扫描子程序 //
/****************/
//
/***********/
//扫描程序//
/**********/
scan()
{
char k;
for(k=0;k<6;k++)
{
P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0xff;
}
}
/*************/
//初始化程序//
/*************/
clearmen()
{
//int i;
TH0=0x3C;TL0=0xB0;// ;50MS定时初值(T0计时用)
//TH1=0x3C;TL1=0xB0;// ;50MS定时初值(T1计时用)
TMOD=0X11;ET0=1;TR0=1;EA=1;//
}
//主程序//
/*********/
main()
{
clearmen();
while(1)
{
scan();
// keyscan();
}
}
/********************/
//1秒中断处理程序 //
/*******************/
void time_intt0(void) interrupt 1
{
int m,temp;
ET0=0;TR0=0;TH0=0x3C;TL0=0xB0;TR0=1;
con1s++;
if(con1s==20)
{
con1s=0;
temp=dis[5];
dis[5]=dis[4];dis[4]=dis[3];dis[3]=dis[2];dis[2]=dis[1];dis[1]=dis[0];
dis[0]=temp;
//for (m=5; m>=1;m--)
// { dis[m]=dis[m-1];}
//dis[0]=temp;
}
ET0=1;
}