发布时间 : 星期四 文章基于单片机的通用电子计数器的设计更新完毕开始阅读
功能仿真图
4 总结与体会
本次设计利用AT89C52单片机来设计通用电子计数器,再辅之于部分外围电路实现对通用电子计数器进行频率和周期的测量,性能稳定,精度高,而且扩展
13
性能强大。但也存在一定的误差。本实验设计还存在很多不足之处。但在这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单片机更是如此,程序只有在经常写与读的过程中才能提高,这就是这次课程设计的最大收获。
5 致谢
本次论文离不开指导老师的指导和关心。在此,谨向指导老师致以衷心的感谢。
附录1 程序源代码
// ********基于单片机的通用电子计数器主要程序******** // ******** 功能概要: LED显示频率,周期 ******** //******** MCU: ATC89C52 晶振:11.0592Mhz **********
//========================================================= //**********头文件区************ #include
//*********宏定义方便使用******* #define uchar unsigned char #define uint unsigned int
//*********定义变量区*********** sbit dula=P2^6; //数码管段选 sbit wela=P2^7; //数码管位选 sbit k5=P3^7; //测频启动按键 uchar k,count,key=0;
uchar code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80, 0X90,0X88,0X83,0XC6,0XA1,0X8E,0X86,0xbf,0xff}; //0~F,-,全不亮,共阳
14
uchar code table_yin[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x00}; //共阴
uchar tab_freq[]={0,0,0,0,0,0};unsigned long int z;
//==========================================================================
//*********函数声明区*********** void delay(uint); //延时函数 void disp(); //显示函数 void int_count0(); //T0计数中断函数 void int_time1(); //T1定时中断函数 void trans_count(); //数据转换函数
void freq_key(); //测试启动及频率周期切换
//=========================================================
//*********主函数开始************ void main() { dula=0; wela=0;
TMOD=0x15; EA=1; ET0=1; ET1=1; while(1) {
freq_key(); trans_count();
15
disp(); } }
//==========================================================
//*********T0计数中断函数开始***** void int_count0() interrupt 1 { k++; if(key==2) { TR1=0; TR0=0; } }
//*********T1计时中断函数开始***** void int_time1() interrupt 3 { count++; if(key==1) {
TH1=0x4c;
TL1=0x00; //50ms初值 if(count>=20) { TR0=0; TR1=0; count=0; }
16