#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; //数选 sbit wela=P2^7; //位选 sbit led1=P1^0; //led灯 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71 }; uchar num,num1,num2,shi,ge; /*==========================延时函数=================================*/ void delayms(uint k) { uint i,j; for(i=k;i>=0;i--) for(j=110;j>=0;j--); } /*===========================数码管动态显示函数======================*/ void display(uchar shi,uchar ge) { dula=1; P0=table[shi]; dula=0; P0=0xff; // 消影 wela=1; P0=0xfe; wela=0;/////// delayms(5);
dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delayms(5); }
/*=================T0中断函数================*/ /*=========二极管200毫秒闪烁==========*/ void T0_time()interrupt 1 { TH0=(65536-45872)/256; //(65536-50/(12*(1/11.0592))) TL0=(65536-45872)%256; //重装初值(uint)(65536-50/(12*(1/11.0592))) num1++; if(num1==4) { num1=0; led1=~led1; } }
/*=============T1中断函数===================*/ /*===============数码管59秒循环计时==========*/ void T1_time()interrupt 3 { TH1=(65536-45872)/256; TL1=(65536-45872)%256; //重装初值 num2++; if(num2==20) { num2=0; num++; if(num==60) num=0; ge=num%10; shi=num/10; } ; ////////////////////////// }
/*============main============*/ void main() { TMOD=0x11; TH0=(65536-45872)/256; TL0=(65536-45872)%256; TH1=(65536-45872)/256; TL1=(65536-45872)%256; EA=1; ET0=1; ET1=1; TR0=1; TR1=1; while(1) { display(shi,ge); } } /*显示程序花费的时间是多少,中断程序执行的时间是多少,有可能冲突了!!!*/ /*不知道是什么原因使得中断一直在执行,跳不出去了!!!!!!!!!!!!!!!*/
[此贴子已经被作者于2012-4-28 11:31:40编辑过]
|