资源简介

里面有两个程序,一种为简单的数字钟+万年历,一种为按键较多的数字钟+万年历,都是用数码管显示,另外两个程序都附带protues仿真图,且已调通,程序也不需改,另外还有静态显示

资源截图

代码片段和文件信息

#include
#define uchar unsigned char
#define uint unsigned int
uint T0_countercount;
uchar code Tab[]={
0xc00xf90xa40xb0
0x990x920x820xf8
0x800x900xbf};    //数字编码
uchar hour=00min=59sec=50b=0i;//初始化显示
uint mon=10day=22year=2013a;


/*****控制按钮********/
sbit fuwei=P1^3;
sbit moshi=P1^4;
sbit miao=P1^0;
sbit fen=P1^1;
sbit shi=P1^2;

/********定时器********/
void dinshiqi()
{
TMOD=0x01; //定时器0的工作方式设置为2(0000 0010)
TH0=(65536-50000)/256;   //装初值0.1s
TL0=(65536-50000)%256;
ET0=1;  //开定时器0中断
TR0=1;  //启动定时器0
EA=1;
}


/*****************延时*****************/
void delay()
{uchar i;
for(i=0;i<200;i++);}

void yanshi(void) //延时
{
   unsigned char xy;
   for(x=0;x<200;x++)
     for(y=0;y<200;y++);}


/***********键盘扫描************/
void kbscan1()
{
if(miao==0) //判断是否有按键按下miao
{
yanshi();
if(miao==0)
sec++;
if(sec==60)
sec=0;
while(miao==0);}

if(fen==0) //判断是否有按键按下.fen
{
yanshi();
if(fen==0)
min++;
if(min==60)
min=0;
while(fen==0);}

if(shi==0) //判断是否有按键按下shi
{
yanshi();
if(shi==0)
hour++;;
if(hour==24)
hour=0;
while(shi==0);}

if(moshi==0)  //切换万年历  
 {
  yanshi();
      if(moshi==0)
      b++;
      if(b==2)
      b=0;
  while(moshi==0);}

if (fuwei==0) //复位按键
  {sec=0;min=0;hour=0;}  
}

//************************************************
void kbscan2()
{
if(shi==0)    //年加1
{                 
      yanshi();
      if(shi==0)
      year++;
  while(shi==0);
}
    if(fen==0) //月加1
{            
      yanshi();
      if(fen==0)
      mon++;
      if(mon==13)
      mon=1;
  while(fen==0);
 }
 if(moshi==0)  //切换数字钟   
 {
  yanshi();
      if(moshi==0)
      b++;
      if(b==2)
      b=0;
  while(moshi==0);
 }
    if(miao==0) //日加1
{        
      yanshi();
      if(miao==0)
  day++;
  if(day==a+1)
  day=1;
     }
 while(miao==0);
 
 if (fuwei==0) //复位按键
  {day=22;mon=10;year=2013;}
  } 



/****************数字钟和万年历子程序********************/
void hms(void) //数字钟子函数
{
    P3=0x01;      //位选
P2=Tab[hour/10];  //显示时的十位
delay();

P3=0x02; //位选
P2=Tab[hour%10]; //显示时的个位
delay();

P3=0x24; //位选
P2=0xbf; //显示横杠
delay();

P3=0x08; //位选
P2=Tab[min/10]; //显示分的十位
delay();

P3=0x10; //位选
P2=Tab[min%10]; //显示分的个位
delay();

P3=0x24; //位选
P2=0xbf; //显示横杠
    delay();

P3=0x40; //位选
P2=Tab[sec/10]; //显示秒的十位
delay();

P3=0x80; //位选
P2=Tab[sec%10]; //显示秒的个位
delay();
}

//******************************************************
void wannianli(void)  //万年历子函数
{ P2=0xff; //消影(清零)
    P3=0x00;
    P3=0x01;   //位选
P2=Tab[year/1000]; //年的千位
delay();

P2=0xff;  //消影(清零)
    P3=0x00;
P3=0x02; //位选
P2=Tab[year/100%10]; //年的百位
delay();

P2=0xff;  //消影(清零)
    P3=0x00;
    P3=0x04;    //位选
P2=Tab[year%100/10]; //年的十位
delay();

P2=0xff;  /

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     285696  2012-04-25 15:49  电子时钟课程设计报告.doc

----------- ---------  ---------- -----  ----

               285696                    1


评论

共有 条评论