内容正文:
项目3 设计制作啤酒生产计数器
项目3 设计制作频率计
1
本项目学习目标
1)巩固C51指数组应用;
2)熟悉MCS-51系列单片机定时/计时器工作 方式;
3)掌握MCS-51系列单片机计数器的应用;
4)进一步熟练C51程序设计;
5)巩固数码管显示技术
项目3 设计制作频率计
项目描述
1.项目名称
设计制作啤酒生产计数器
2.项目要求
1)用KeilC51、Proteus作开发工具;
2)用AT89C51单片机作控制;
3)数码管作显示,用4位数码管显示箱数,2位数码管显示当前箱瓶数;
4)能测试某啤酒装箱装置每检测到一瓶啤酒输出一个脉冲,以12瓶为1箱计算,统计啤酒的箱数与散装瓶数;
5)发挥扩充功能:如高位消隐等。
项目3 设计制作频率计
3.设计制作任务
项目描述
1)拟定总体设计制作方案;
2)设计硬件电路;
3)编制软件流程图及设计相应源程序;
4)仿真调试啤酒生产计数器;
5)安装元件,制作啤酒生产计数器,调试功能指标;
6)完成项目报告。
项目3 设计制作频率计
相关知识
定时/计数器
1. MCS-51单片机的定时器/计数器
8051单片机内部有两个16位的可编程定时器/计数器:
定时器0(T0)和 定时器1(T1)。由定时器T0、定时器T1、定时器方式寄存器TMOD和定时器控制寄存器TCON组成。
T0、T1是16位加法计数器,T0由TH0和TL0构成,T1由TH1和TL1构成。TL0、TL1、TH0、TH1的访问地址依次为8AH8DH,每个寄存器均可单独访问。
T0或T1用作计数器时,对芯片引脚T0(P3.4)或T1(P3.5)上输入的脉冲计数,每输入一个脉冲,加法计数器加1。用作定时器时,对内部机器周期脉冲计数。
项目3 设计制作频率计
相关知识
2. 定时与计数
当定时/计数器设置为计数工作方式时,计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外部信号计数,外部脉冲的下降沿将触发计数,计数器加1。新计数值于下一个机器周期的装入计数器中,检测一个由1到0的负跳变需要两个机器周期,最高检测频率为振荡频率的1/24。外部输入信号的高电平与低电平的持续时间须在一个机器周期以上。
项目3 设计制作频率计
当定时/计数器设置为定时工作方式时,计数器对内部机器周期计数,每过一个机器周期,计数器增1,直至计满溢出,计数值N=溢出值(最大计数值)-初始值,定时器的定时时间t= T(机器周期)×N。
相关知识
项目3 设计制作频率计
相关知识
MCS-51单片机的一个机器周期由12个振荡脉冲组成,计数频率为:
fc=fosc/12。
如果单片机系统采用12M晶振,则计数周期(即机器周期)为:
T=1/(12×106×(1/12))=1us。
若计数值为N,则定时N微秒。
项目3 设计制作频率计
相关知识
3. 定时器/计数器的工作方式
方式0
项目3 设计制作频率计
相关知识
当C/(/T)= 0时,多路开关连接12分频器输出,T0对机器周期计数,此时,T0为定时器。其定时时间为:
当C/(/T)= 1时,多路开关与T0(P3.4)相连,外部计数脉冲由T0脚输入,当外部信号电平发生由0到1的跳变时,计数器加1,此时,T0为计数器。
项目3 设计制作频率计
当GATE = 0时,TR0 = 1,定时器0从初值开始计数直至溢出。TR0 = 0,被关断,停止计数。
当GATE = 1时,若TR0 = 1,外部信号电平通过/INTO引脚直接开启或关断定时器T0;若TR0 = 0,停止计数。
项目3 设计制作频率计
相关知识
2)方式1
定时器工作在方式1时,是16位的定时计数器,最大计数值M=216=65536,其逻辑结构图如图。
项目3 设计制作频率计
相关知识
方式1构成一个16位定时器/计数器,其结构与操作几乎完全与方式0相同,差别是二者计数位数不同。作定时器用时,其定时时间为:
3)方式2
定时器/计数器工作在方式2时,是8为定时计数器,最大计数值M=28=256。其逻辑结构图如图。
(M-T0初值)×时钟周期×12=(65536-T0初值)×时钟周期×12
项目3 设计制作频率计
相关知识
方式2中 16位加法计数器的TH0和TL0具有不同功能,其中,TL0是8位计数器,方式2具有初值自动装入功能,TH0是重置初值的8位缓冲器。适合用作较精确的定时脉冲信号发生器,其定时时间为:
(M-T0初值)×时钟周期×12=(256-T0初值)×时钟周期×12
项目3 设计制作频率计
相关知识
4)方式3
定时器/计数器工作在方式3时,定时器T0被分解成两个独立的8位计数器TL0和TH0,2个定时器的最大计数值M值均为256。其逻辑结构图。
项目3 设计制作频率计
相关知识
方式3时,定时器1仍可设置为方式0、方式1或方式2。但由于TR1、TF1及T1的中断源已被定时器T0占用,定时器1一般用作串行口波特率发生器或不需要中断的场合。
定时/计数器的控制
(1)定时/计数器方式寄存器TMOD
TMOD为T1、T2的工作方式寄存器
TMOD: D7 D6 D5 D4 D3 D2 D1 D0
(89H) GATE C/(/T) M1 M0 GATE C/(/T) M1 M0
定时器1 定时器0
项目3 设计制作频率计
相关知识
M1和M0:方式选择位
M1 M0 工 作 方 式 功 能 说 明 最大计数值
0 0 方 式 0 13位计数器 213=8192
0 1 方 式 1 16位计数器 216=65536
1 0 方 式 2 自动再装入8位计数器 28=256
1 1 方 式 3 定时器0:分成两个8位计数器定时器1:停止计数 28=256
C/(/T):功能选择位
C/(/T)=0时,设置为定时器工作方式; C/(/T)=1时,设置为计数器工作方式。
GATE:门控位
当GATE=0时,控制位TR0或TR1置1即可启动定时器;
项目3 设计制作频率计
相关知识
当GATE=1时,控制位TR0或TR1须置1,中断/INT0、/INT1启动定时器。
TMOD不能位寻址,只能用字节指令设置定时器工作方式,高4位定义T1,低4位定义T0。复位时,TMOD所有位均置0。
如设置定时器1工作于方式1,定时工作方式与外部中断无关,则M1=0、M0=1,C/(/T)=0、GATE=0,则高4位应为0001;定时器0未用,低4位可随意置数,但低两位不可为11(因方式3时,定时器1停止计数),一般将其设为0000。语句为:
TMOD=0x10
项目3 设计制作频率计
相关知识
(2)定时器/计数器控制寄存器TCON
TCON的作用是控制定时器/计数器的启动、停止,标志定时器的溢出和中断情况
TCON
(88H): 8FH 8EH 8DH 8CH 8BH 8AH 89H 88H
TF1 TR1 TF0 TR0
项目3 设计制作频率计
TR0:定时器0运行控制位。由软件置1或清0来启动或关闭定时器0。
当GATE=1,且/INT0为高电平时,TR0置1启动定时器0;
当GATE=0时,TR0置1即可启动定时器0。
TF0:定时器0溢出标志位。当定时器0计数满产生溢出时,由硬件自动置TF0=1。
在中断允许时,向CPU发出定时器1的中断请求,进入中断服务程序后,由硬件自动清0。
相关知识
项目3 设计制作频率计
相关知识
在中断屏蔽时,TF0可作查询测试用,此时只能由软件清0。
TR1:定时器1运行控制位。其功能及操作同TR0。
TF1:定时器0溢出标志位。其功能及操作况同TF0。
TCON中的低4位用于控制外部中断,与定时器/计数器无关。当系统复位时,TCON的所有位均清0。
TCON的字节地址为88H,可位寻址,清溢出标志位或启动定时器都可位操作。
例如: TR1 =1 ;TR1置1,启动计数
项目3 设计制作频率计
相关知识
(3)定时器/计数器的初始化
在使用定时器/计数器前必须对其进行初始化。初始化步骤如下:
①确定工作方式——对TMOD赋值。
TMOD=0x10 ;设定T1工作在方式1,且工作在定时器方式。
②预置定时或计数的初值——将初值写入TH0、TL0或TH1、TL1。初值X可计算如下:
X = M 计数值
例如:要求每50ms溢出一次,定时器1采用方式1定时,M=65536,如采用12M晶振,则计数周期T=1s,计数值(50×1000)/2=50000,则计数初值为:
项目3 设计制作频率计
相关知识
将3C、B0分别预置给TH1、TL1。语句如下:
TL1=0x0B0;或
TH1=0x 3C;
③根据需要开启定时器/计数器中断——对IE寄存器赋值。
例如: IE =0x88 ; 开T1中断
④启动定时器/计数器工作——将TR0或TR1置“1”。
GATE = 0时,直接由软件置位启动或停止,其指令为:
TR1=1; ;启动计数
TR1=0; ;停止计数
GATE = 1时,除软件置位外,还必须在外中断引脚处加上相应的电平值才能启动。
项目3 设计制作频率计
项目实施
1.总体设计思路
用51单片机作控制,12M时钟,定时/计数器在计数状态下,最大计数值为fOSC/24,最大计数频率可达250KHz。用AT89C51内一个定时/计数器作计数器,定时读出计数值。把计数值用软件进行处理用数码管显示。
总体结构框图如图。
项目3 设计制作频率计
项目实施
项目3 设计制作频率计
项目实施
2.设计硬件原理图
项目3 设计制作频率计
项目实施
3.设计啤酒生产计数器计程序
1)程序设计思路
用一个定时计数器工作在计数功能,工作于方式1对啤酒装箱装置输出的计数脉冲计数,然后再计数出箱数与散装瓶数,主程序流程如图所示.
项目3 设计制作频率计
项目实施
程序:
#include<reg51.h>
unsigned char seg_dm[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code bit_array[]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char dat_display[6];
unsigned char dat_pj;
unsigned char dat_ps;
unsigned int dat_xs;
项目3 设计制作频率计
/***********延迟函数**************/
delay(unsigned char time)
{
unsigned char i,j;
for(i=0;i<time;i++)
for(j=0;j<120;j++)
;
}
项目实施
项目3 设计制作频率计
/***********读出计数值函数*********/
void read_dat(void)
{
dat_pj=TH0*256+TL0;
}
项目实施
项目3 设计制作频率计
项目实施
/***********计算瓶数与箱数函数*********/
void dat_xs_ps(void)
{
dat_ps=dat_pj%12;
dat_xs=dat_pj/12;
}
项目3 设计制作频率计
项目实施
void dat_change(void )
{
dat_display[0]=dat_ps%10; //瓶数处理
dat_display[1]=dat_ps/10;
dat_display[2]=dat_xs%10; //箱数处理
dat_display[3]=dat_xs%1000%100/10;
dat_display[4]=dat_xs%1000/100;
dat_display[5]=dat_xs/1000;
}
项目3 设计制作频率计
项目实施
/***********显示一位数据函数*********/
void display(unsigned char *dat,unsigned char *bit_code )
{
P2=0x00;
P1=seg_dm[*dat];
P2=*bit_code;
delay(10);
}
项目3 设计制作频率计
项目实施
/***********T0初始化************/
void T0_init(void)
{
TMOD=0x05; //T0方式1、计数
TH0=0;
TL0=0;
TR0=1;
}
项目3 设计制作频率计
项目实施
/**********主函数************/
main()
{
unsigned char i;
T0_init();
while(1)
{
read_dat();
dat_xs_ps();
dat_change( );
for(i=0;i<6;i++)
display(dat_display+i,bit_array+i);
}
}
项目3 设计制作频率计
项目实施
4.调试仿真啤酒生产计数器
项目3 设计制作频率计
项目三 结束
谢 谢!
项目3 设计制作频率计
相关知识
案例二:用定时计数器设计倒计时秒表程序 。
编写程序,使秒表上电复位后,具有开始显示“9.9”,开始倒计时,当9.9秒到,数码管显示“0.0”并闪烁,倒计时误差小于0.2S。
项目3 设计制作频率计
相关知识
开 始
中断初始化
停止定时计数
定时器初始化
秒数减0.1秒
中断10次吗?
秒数为0吗?
关显示
数据处理
显 示
N
N
Y
Y
流程图:
项目3 设计制作频率计
相关知识
开 始
中断次数加1
重装初值
返回
项目3 设计制作频率计
相关知识
程序
#include<reg52.h>
unsigned char code led_seg_code[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dat_display[2];
unsigned char bit_array[2]={0xfe,0xd};
unsigned char seconds=99,count;
项目3 设计制作频率计
相关知识
/**********延时函数***********/
void delay(unsigned int z)
{
while(z--);
}
项目3 设计制作频率计
相关知识
/************定时器初始化函数****************/
void T0_init(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
}
项目3 设计制作频率计
相关知识
/************中断初始化函数****************/
void int_init(void)
{
EA=1;
ET0=1;
}
项目3 设计制作频率计
相关知识
/************数据处理函数****************/
void dat_change(void)
{
dat_display[1]=seconds/10;
dat_display[0]=seconds%10;
}
项目3 设计制作频率计
相关知识
/**************显示函数****************/
void display(unsigned char *seg_code,unsigned char *bit_code)
{
P1 = 0xff;
P1 = *bit_code;
P2 = *seg_code;
delay(100);
}
项目3 设计制作频率计
相关知识
/********0.1秒判断函数***********/
void seconds_01(void)
{
if(count==10)
{
count=0;
seconds--;
}
}
项目3 设计制作频率计
相关知识
/********9.9秒判断函数***********/
void seconds_99(void)
{
if(seconds==0)
{
TR0=0;
}
}
项目3 设计制作频率计
相关知识
/*********************主程序***************************/
void main()
{
T0_init();
int_init();
while(1)
{
seconds_01();
seconds_99();
dat_change();
项目3 设计制作频率计
相关知识
if(seconds==0)
{
P1 = 0xff;
delay(4000);
}
display(led_seg_code+dat_display[0],bit_array);
display(led_seg_code+dat_display[1],bit_array+1);
P2=0x80;
}
}
项目3 设计制作频率计
相关知识
/*************定时器中断服务函数**************/
void time_t0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
count--;
}
项目3 设计制作频率计
项目实施
1.总体设计思路
用51单片机作控制,12M时钟,定时/计数器在计数状态下,最大计数值为fOSC/24,最大计数频率可达250KHz。用AT89C51内的一个定时/计数器作定时器,另一个定时/计数器作计数器,定时读出计数值。单位时间内的计数值即为频率。把计数值用软件进行数制转换、去压缩、高位消隐等处理用数码管显示(五位数码管)。
总体结构框图如图。
项目3 设计制作频率计
项目实施
测试
端子
复位电路
AT89C51
LED
显示
时钟电路
电源电路
总体结构框图
项目3 设计制作频率计
项目实施
2.设计硬件原理图
项目3 设计制作频率计
项目实施
3.设计频率计程序
1)程序设计思路
用AT89C51单片机内部定时/计数器T0和T1,一个(如T0)工作在计数状态,对输入的频率信号进行计数。另一个(如T1)工作在定时状态,因为信号频率最大为65K<65535,定时1秒,计数器(如T0)停止计数,从计数器(如T0)的计数单元中读取计数值,然后十六进制转换成十进制、去压缩、高位消隐,译码显示。
项目3 设计制作频率计
项目实施
4.调试仿真频率计
(1)利用keil uVisison2的调试功能,根据错误提示,双击提示找到错误代码,排除各种语法错误。
(2)通过对端口、寄存器、存储空间赋值,存储空间或、端口、寄存器观察,单步运行调试子程序和主程序。
(3)编译成hex文件。
(4)用Proteus按设计原理图,添加电阻(RES)、电容(CAP)、晶振(CRYSTAL、按键(BUTTON)、AT89C51、3位数码(7SEG-MPX3-CA)管等元件、仿真信号源。设计仿真模型,如图2-20所示。设置好元件属性,以仿真信号源提供测试信号,进行仿真调试。
项目3 设计制作频率计
项目实施
项目3 设计制作频率计
项目实施
5.安装元器件,烧录、调试样机
(1) 仿真调试成功后,按原理图把元件安装焊接在实验板上,并进行动态和静态检测。
(2)烧录hex文件,运行程序,如不能运行,先排除各种故障(供电、复位、时钟,内外存储空间选择、软硬件端口运用一致等)。
项目3 设计制作频率计
项目实施
(3)测试频率,读出数据与与信号源提供的信号频率及其它仪器测试的频率进行对比,分析是否达到性能指标。
(4)如没有达到性能指标,根据性能指标,调整电路或元件参数、优化程序,重新调试、编译、下载、运行程序,测试性能指标。
项目3 设计制作频率计
项目检测与评价
项目名称 项目3:设计制作频率计
项目要求
总体设计思路
硬件电路图
程序设计思路 1、程序设计思路(含流程图)
2. 程序清单及说明
仿真调试 1.仿真调试环境
2. 仿真调试功能指标
性能指标测试 1. 基本功能能指标测试环境
2. 基本功能指标测试结果及分析
3.发挥部分
报告编制人
编制时间
表 项目2 设计制作频率计项目报告
项目3 设计制作频率计
项目检测与评价
项目3考核标准
项目名称 项目三:设计制作频率计
序号 考 核 点 分值 评 分
1 总体设计 思路 5 正确5 不正确0-5
2 框图 5 正确5 不正确0-5
硬件电路 规范(素养2) 5 标识清晰规范5分
3 电源电路 1 正确1 不正确0
4 复位电路 2 正确2 不正确0-2
5 时钟电路 2 正确2 不正确0-2
6 I/O口分配 3 正确3 不正确0-3
7 显示电路 2 正确2 不正确0-4
8 程序设计 程序设计思路 5 可行3-5 可行0-3
9 程序流程图 5 正确3-5 正确0-3
9 源程序 10 可编译正确10 可编译不正确0-6
规范(素养1) 5 说明与注释、及可读性
10 调试
发挥 调试、仿真 10 实现功能指标10 可仿真,没实现功能指标5
11 发挥 5 有发挥0-5 无0
12 制作
调试 安装 10 样机电路正常5 样机电路不正常0-3
13 调试 10 达到功能指标5 没达到功能指标0-3
项目报告
10 符合要求9-15 基本符合要求0-9
素养 6s与违纪 10
项目3 设计制作频率计
项目检测与评价
项目3 设计制作频率计
拓展
拓展练习题
1.设计制作十字路口交通控制灯。
项目3 设计制作频率计
项目三 结束
谢 谢!
项目3 设计制作频率计
$$