#include #define uchar unsigned char #define uint unsigned int uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//0~9的数码管显示 sbit dula=P2^6;//声明段选 sbit wela=P2^7;//声明位选 uchar h,m,s,num1;//定义变量 void delay(uint xms)//延时函数 { uint i,j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void init()//初始化 { TMOD=0x10;// 0001 0001 定时器0的工作方式1,定时器1的工作方式1 TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1;//开总中断 ET1=1;//开定时器1中断 TR1=1;//启动定时器1 } void main()//主函数 { init(); //初始化 while(1) //while循环 { wela=1; //打开位选 P0=0xfe; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[h/10];//送入数据 dula=0; // 关闭段选 delay(1); //延时5ms wela=1; //打开位选 P0=0xfd; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[h%10];//送入数据 dula=0; // 关闭段选 delay(1); //延时5ms wela=1; //打开位选 P0=0xfb; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[m/10];//送入数据 dula=0; // 关闭段选 delay(1); //延时5ms wela=1; //打开位选 P0=0xf7; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[m%10];//送入数据 dula=0; // 关闭段选 delay(1); //延时5ms wela=1; //打开位选 P0=0xef; //点亮数码管 wela=0; //关闭位选 dula=1; //打开段选 P0=table[s/10];//送入数据 dula=0; // 关闭段选 delay(1); //延时5ms wela=1; P0=0xdf; wela=0; dula=1; P0=table[s%10]; dula=0; delay(1); } } void T1_time()interrupt 3 //中断3 { TH1=(65536-45872)/256; //重装初值 TL1=(65536-45872)%256; // num1++; //num2每加一次判断一次是否到20次了 if(num1==20) //如果到了20次,说明1秒钟到了 { num1=0; //把num1清零,重新再计20次 s++; //s每加一次判断一次,是否到60次了 if(s==60) //如果到了60次,说明1分钟到了 { s=0; //把s清零,重新再计60次 m++; //m每加一次判断一次是否到60次了 if(m==60) //如果到了60次,说明1小时到了 { m=0; //把m清零,重新再计60次 h++; //h每加一次判断一次是否到24次了 if(h==24)//如果h到了24次,说明24小时到了 { h=0; //把m清零,重新再计60次 } } } } }下载本文