文档详情

微机原理课程设计(频率计).doc

发布:2019-05-03约3.69千字共8页下载文档
文本预览下载声明
课程设计的目的 微机原理及接口技术课程设计是电子信息工程专业、计算机科学与技术专业、自动化专业二年级学生在完成《微机原理及接口技术》课程学习后进行一次集中实践训练。通过训练,使学生对微机控制系统有一定的了解,能够将理论与实践相衔接,为后续课程的学习打下实践基础。 课程设计的题目 通过实验箱完成频率计: 采集外部方波信号源信号,统计一秒钟内信号的周期数,即频率 将频率通过数码管显示出来 课程设计需要的设备 PC机,伟福仿真实验箱,SP1642B型函数型号发生器,导线若干。 课程设计的实现方案 原理 分别应用8051单片机中的两个定时器/计数器,将定时器/计数器T0用作计数器,用来测定输入端得到的脉冲数;定时器/计数器T1用作定时器,定时时间为1秒,1秒后清零重测,实现所测脉冲数即为信号频率,并通过六个七段数码管将所测信号数显示出来,从而实现测量频率并显示的课程设计要求。 硬件线路图 实际电路 80C 80C51 4个LED显示印张计数器运作状态 键盘输入端口 6个七段数码管显示数据 复位监控输入 印张计数中断信号输入 晶振时钟输入 电源LED指示灯 连线 连线 连接孔1 连接孔2 1 P3.5 信号发生器红夹头 2 KEY/LED_CS CS0 3 GND 信号发生器黑夹头 性能,指标 1.???被测信号的频率范围0Hz~999999Hz 2.???输入信号为正弦信号或方波信号 3.???六位数码管显示所测频率 软件框图和源程序 软件框图 定时器T0中断入口C100us--计数器停止工作 定时器T0中断入口 C100us-- 计数器停止工作 C100us是否为零? 输出频率数值 计数器清零 开启计数器T1 中断返回 N Y 定时器T0中断子程序框图 计数器T1中断入口 n=n+1 中断返回 计数器T1中断子程序框图 开始 程序初始化 设置计数器定时器的工作方式 开启计数器、定时器 通过数码管显示频率数值 主程序框图 源程序 #include reg51.h #define LEDLen 6 #define Tick 10000 // 10000 x 100us = 1s #define T100us (256-50) // 100us时间常数(6M) xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口 xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口 xdata unsigned char IN _at_ 0x8001; // 键盘读入口 unsigned int C100us; // 100us记数单元 unsigned int n=0; unsigned long T=0; unsigned char LEDBuf[LEDLen]; // 显示缓冲 code unsigned char LEDMAP[] = { // 八段管显示码 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c//, 0x39, 0x5e, 0x79, 0x71 }; void Delay(unsigned char CNT) { unsigned char i; while (CNT-- !=0) for (i=45; i !=0; i--); } void DisplayLED() { unsigned char i; unsigned char Pos; unsigned char LED; Pos = 0x20; // 从左边开始显示 for (i = 0; i LEDLen; i++) { OUTBIT = 0; // 关所有八段管 OUTSEG = LED Buf[i]; OUTBIT = Pos; // 显示一位八段管 Delay(1); Pos = 1; // 显示下一位 } OUTBIT = 0; // 关所有八段管 } void T0Int() interrupt 1 using 1 { C100us--; if (C100us == 0) { TR1=0; T=65536*n+TL1+256*TH1; C100us = Tick; TL1=0; TH1=0; TR1=1; n=0; } } void T1Int() interrupt 3 using 1 { n++; } void main() { unsigned int a; unsigned
显示全部
相似文档