/**************程序说明********************* 硬件说明只需要将15 脚接口接入外部的脉冲信号,15 脚为定时器T1 的外部信号输入引脚 通过定时器T0 定时指定的时间来测取脉冲的个数并在1602液晶上显示出来 假设定时1s 则数据变成为信号的频率 ********************************************************/ #inclu de #inclu de //定时器0 负责定时30s 定时器1 负责计数功能 #define u int u nsigned int #define u char u nsigned char sbit RS=P2^6; //液晶的电路定义 sbit E=P2^5; u nsigned char table[3]; u nsigned int t0; void delay_ms(uint z) //毫秒级延时 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /******液晶部分子程序*************************/ void write_com(unsigned char com) { //操作时序 RS=0; P0=com; delay_ms(5); E=1; delay_ms(5); E=0; } void write_data(unsigned char shuju) { //操作时序 RS=1; P0=shuju; delay_ms(5); E=1; delay_ms(5); E=0; } void LCDintial() { delay_ms(5); E=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x80); } /**********定时器初始化程序***************/ void T0T1_init() { EA=1; ET0=1; TMOD=0x51;//定时器1 负责计数0 负责定时功能 重点中的重点工作方式的设定 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TL1=0; TH1=0; TR0=1; TR1=1; } /*********在用液晶显示时候将任意三位数变为字符串的形式**************/ void Fromdata_to_char(unsigned char zs,unsigned char *ta) { ta[0]=zs/100+'0'; ta[1]=zs/10%10+'0'; ta[2]=zs%10+'0'; } main() { unsigned char zhuansu,i; LCDintial(); T0T1_init(); while(1) { if(t0>=200) { TR0=0 ; t0=0; zhuansu=TH1<<8; zhuansu=zhuansu+TL1; TL1=0; Fromdata_to_char(zhuansu,table); for(i=0;i<3;i++) write_data(table[i]) ; TR0=1; } } } //定时器中断 void zhongduan(void) interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; }