1、 单单 片片 机机 课课 程程 设设 计计 设计题目:简易频率计数器 姓名: 学号: 一、一、实验目的实验目的 1.要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单 片机内部资源的使用。 2.熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境 Keil C51 编程调试, 并使用 STC ISP 调试工具采用串口下载方式联调制作 的单片机最小系统。 二、实验要求二、实验要求 自制一个单片机最小系统,包括串口下载、复位电路,采用外部 计数器 T0 或 T1 作为外部频率输入,外部频率由信号源提供,计算 出来的频率显示在四位一体的数码管上。 三、三、实验器材实验器材 单片机STC89
2、C54RD+一个,晶振一个,电容3个,电阻3个,排阻一 个(由于实验室不提供排阻, 实验过程中用了10个10千欧姆的电阻代 替) ,4位一体数码显示管一个,按钮1个。 四、四、实验原理图实验原理图 五、五、硬件连线硬件连线 1.将P0口与4位一体数码管的ABCDEFG和DP相连; 2.将P2口的2.0,2.1,2.2分别与数码管的S1,S2,S3相连; 3.引出14做激励输入口。 六、程序设计内容六、程序设计内容 1定时/计数器T0 和T1 的工作方式设置,由图可知,T0 是工作在 计数状态下,对输入的频率信号进行计数, 但对工作在计数状态下的 T0,最大计数值为fOSC/24,由于fOSC1
3、2MHz,因此:T0 的最大 计数频率为250KHz。对于频率的概念就是在一秒只数脉冲的个 数,即为频率值。所以T1 工作在定时状态下,每定时1秒钟到,就停 止T0 的计数,而从T0 的计数单元中读取计数的数值,然后进行数据 处理。送到数码管显示出来。 2T1工作在定时状态下,最大定时时间为65ms,达不到1秒的定时, 所以采用定时50ms,共定时20 次,即可完成1 秒的定时功能。 七、七、C C语言源程序语言源程序 #include /头文件端口声明 #define uchar unsigned char /变量宏定义 #define uint unsigned int unsigned
4、char code table2= /共阳极0f数码管编码 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; uint number14=0,0,0,0; uint count=0; /定义脉冲计数变量 sbit K1=P10; sbit K2=P17; void delay(uchar y) / 延时子程序 uchar x; while(y-)for(x=110;x0;x-); display(x) / 显示子程序 uint c,g=0x01; number10=x/1000;
5、number11=x%1000/100; number12=x%1000%100/10; number13=x%1000%100%10; for(c=0;c4;c+) P2=g; /位选 P0=table2number1c; /段选 delay(15); /简短的延时 g=g1; /左移为了扫描位选 void main() IE=0x8a; / 开总中断和T0,T1 TMOD=0x51; / 设置中断工作方式 TH0=(65536-50000)/256; TL0=(65536-50000)%256; while(1) if(K1=0) delay(10); if(K1=0) count=0;
6、TR0=TR1=1; /当按键按下时启动T0和T1 void t0() interrupt 1 /定时计数器T0子程序 uchar K; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(+K=20) TR1=TR0=K=0; /关两个中断 count=TH1*256+TL1; /当到一秒后,计下T1收到的脉冲个数 display(count); TH1=TL1=0; /T1清零 八、八、实验心得实验心得 通过这次课程设计,我熟悉了Keil C51编程与PROTUSE的使用, 对单片机的使用有了更深刻的了解, 在焊接与测试过程中也懂得了对 任何的细节必须分外注意,不能粗心大意。实验由两部分组成,仿真 和焊板子,仿真过程用运用了keil c51软件和