微机原理课程设计(频率计).doc
文本预览下载声明
课程设计的目的
微机原理及接口技术课程设计是电子信息工程专业、计算机科学与技术专业、自动化专业二年级学生在完成《微机原理及接口技术》课程学习后进行一次集中实践训练。通过训练,使学生对微机控制系统有一定的了解,能够将理论与实践相衔接,为后续课程的学习打下实践基础。
课程设计的题目
通过实验箱完成频率计:
采集外部方波信号源信号,统计一秒钟内信号的周期数,即频率
将频率通过数码管显示出来
课程设计需要的设备
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
显示全部