当前位置:文档之家› 51单片机计数程序

51单片机计数程序

/**************程序说明*********************
硬件说明只需要将15脚接口接入外部的脉冲信号,15脚为定时器T1的外部信号输入引脚
通过定时器T0定时指定的时间来测取脉冲的个数并在1602液晶上显示出来
假设定时1s则数据变成为信号的频率
*************************************************** *****/
#include<reg52.h>
#include <intrins.h>//定时器0负责定时30s 定时器1负责计数功能
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^6; //液晶的电路定义
sbit E=P2^5;
unsigned char table[3];
unsigned 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++;
}。

相关主题