首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
8位LED动态扫描时钟演示程序
来源:本站整理  作者:佚名  2011-08-04 10:14:32



//使用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[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//显示单元数据,共6个数据
data char con1s=0x00,con04s=0x00,con=0X00; //1秒定时用
sbit key0=0x90;
sbit key1=0x91;
sbit key2=0x92;
//
/****************/
//1毫秒延时程序//
/***************/
delay1ms(int t)
{
int i,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()
{
char k;
for(k=0;k<6;k++)
 {
  P0=dis_7[dis[k]];P2=scan_con[k];delay1ms(1);P2=0xff;
  }
}
/*************/
//初始化程序//
/*************/
clearmen()
{
int i;
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秒中断处理程序  //
/*******************/
void time_intt0(void) interrupt 1 
{
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秒闪烁中断程序  //
/*******************/
void time_intt1(void) interrupt 3 
{
 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;
}

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

关键词:

·上一文章:AT89C52闹钟程序
·下一文章:继电器定时器程序

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:43,375.00000 毫秒