主要是配置定时器0为外部脉冲计数模式
main.c
#include "mycode.h"
unsigned char key_value=0,len=0;
unsigned short int t=0,m=0,w,i=0;
bit flag=0;
void main()
{
SystemInit();
Timer0Init();
Timer1Init();
// uart1();
EA = 1;
// Init_time();
while(1)
{
w=m;
while(w)
{
len++;
w/=10;
}
while(len)
{
display(8-len,m%((int)pow(10,len))/((int)pow(10,len-1)));
len--;
}
}
}
void timer0() interrupt 1
{
t++;
}
void timer1() interrupt 3
{
i++;
if(i>=500)
{
m=t*2;
i=0;
t=0;
}
}
mycode.c
#include "mycode.h"
unsigned char code numb[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xbf
};
unsigned char getkey(void)
{
if(!s7)//
{
delay_ms(10);
if(!s7)
{
while(!s7);
return s7_press;
}
}
if(!s6)//
{
delay_ms(10);
if(!s6)
{
while(!s6);
return s6_press;
}
}
if(!s5)//
{
delay_ms(10);
if(!s5)
{
while(!s5);
return s5_press;
}
}
if(!s4)//
{
delay_ms(10);
if(!s4)
{
while(!s4);
return s4_press;
}
}
return 0;
}
void display(unsigned char x,unsigned char dat)
{
HC138(7,0xff);
HC138(6,1<<x);
HC138(7,numb[dat]);
delay_us(500);
}
char putchar(char c)
{
SBUF=c;
while(!TI);
TI = 0;
return c;
}
void Timer0Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x04; // 配置为P34脉冲引脚计数
TL0 = 0xff; //设置定时初始值
TH0 = 0xff; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;
}
void Timer1Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0x20; //设置定时初始值
TH1 = 0xD1; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
ET1 = 1;
}
//系统初始化配置
void SystemInit(void)
{
HC138(4,0xff);
HC138(5,0x00);
HC138(0,0x00);
}
void uart1(void)
{
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xC7; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器%d中断
TR1 = 1; //定时器1开始计时
ES = 1;
}
void delay_us(unsigned int t) //@12.000MHz
{
while(t--)
{
_nop_();
_nop_();
_nop_();
_nop_();}
}
void delay_ms(unsigned int t) //@12.000MHz
{
unsigned char i, j;
while(t--){
i = 12;
j = 169;
do
{
while (--j);
} while (--i);}
}
mycode.h
#ifndef __MYCODE_H__
#define __MYCODE_H__
#include <reg52.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
#include <absacc.h>
#include <intrins.h>
#include "iic.h"
#include "onewire.h"
#include "ds1302.h"
#define HC138(x,y) {P2&=0x1f;P2|=(x<<5);P0=y;}
sfr AUXR = 0x8e;
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
#define s7_press 1
#define s6_press 2
#define s5_press 3
#define s4_press 4
void Timer0Init(void); //1毫秒@12.000MHz
void Timer1Init(void); //1毫秒@12.000MHz
unsigned char getkey(void);
void uart1(void);
void display(unsigned char x,unsigned char dat);
void SystemInit(void);
void delay_us(unsigned int t); //@12.000MHz
void delay_ms(unsigned int t); //@12.000MHz
#endif