#include<stc15f2k60s2.h>#define uchar unsigned char#define uint unsigned intchar tab[]={ 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0xFF};uchar one,two,three,four,five,six,seven,eight;int fre,di,gao,di_now,gao_now;int time,i;bit flag;void Timer0Init(void) ;void Timer1Init(void);void Allinit();void Delayms(uint ms);void Display1(uchar one,two);void Display2(uchar three,four);void Display3(uchar five,six);void Display4(uchar seven,eight);void Key_Scan();void Key_Scan16();void main(){
Allinit(); Timer0Init(); Timer1Init(); while(1) {
one=fre/10000;two=fre/1000%10;three=fre/100%10;four=fre/10%10;five=fre%10; Display1(one,two); Display2(three,four); Display3(five,six); Display4(seven,eight); } }void Allinit(){
P2=0XA0;//蜂鸣器继电器锁存器 P0=0X00;//关闭 P2=0XC0;//数码管位选锁存器 P0=0XFF;//选中所有数码管 P2=0XFF;//数码管段选锁存器 可以操作数码管 P0=0XFF;//关闭 P2=0X80;//LED锁存器 P0=0XFF;//关闭}void Delayms(uint ms){
uint i,j; for(i=0;i<ms;i++) for(j=845;j>0;j--);}void Display1(uchar one,two){
P2=0XC0; P0=0X01;//0000 0001选中左边第一个数码管 P2=0XFF; P0=tab[one]; Delayms(1); P2=0XC0; P0=0X02;//0000 0010 P2=0XFF; P0=tab[two]; Delayms(1);}void Display2(uchar three,four){
P2=0XC0; P0=0X04;//0000 0100 P2=0XFF; P0=tab[three]; Delayms(1); P2=0XC0; P0=0X08;//0000 1000 P2=0XFF; P0=tab[four]; Delayms(1);}void Display3(uchar five,six){
P2=0XC0; P0=0X10;//0001 0000 P2=0XFF; P0=tab[five]; Delayms(1); P2=0XC0; P0=0X20;//0010 0000 P2=0XFF; P0=tab[six]; Delayms(1);}void Display4(uchar seven,eight){
P2=0XC0; P0=0X40;//0100 0000 P2=0XFF; P0=tab[seven]; Delayms(1); P2=0XC0; P0=0X80;//1000 0000 P2=0XFF; P0=tab[eight]; Delayms(1);}void Timer0Init(void) //5微秒@12.000MHz{
AUXR |= 0x80; //定时器时钟1T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0xC4; //设置定时初值 TH0 = 0xFF; //设置定时初值 TF0 = 0; //清除TF0标志 //TR0 = 1; //定时器0开始计时}void Timer1Init(void) //1毫秒@12.000MHz{
AUXR |= 0x40; //定时器时钟1T模式 TMOD &= 0x0F; //设置定时器模式 TL1 = 0x20; //设置定时初值 TH1 = 0xD1; //设置定时初值 TF1 = 0; //清除TF1标志 TR1 = 1; //定时器1开始计时 EA=1;ET1=1;}void Time0() interrupt 1{
if(P34==0) {
di++; if(flag==0) {
flag=1; gao_now=gao; gao=0; } } else if(P34==1) {
gao++; if(flag==1) {
di_now=di; flag=0; di=0; } }} void Time1() interrupt 3{
i++; if(i==960) {
TR0=1;ET0=1; } else if(i==990) {
TR0=0;ET0=0; i=0; time=(di_now+gao_now)*5; fre=1000000/time; } }