光电转速仪设计
图4.15 动态显示仿真图 动态显示程序: #include
#define uchar unsigned char #define uint unsigned int
uint mm=1234; //显示1234//
uchar jj;
uchar code table[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,}; delay(uint m) { uint i,j; for(i=m;i>0;i--) for(j=110;j>0;j--); }
xian_shi()
{ uchar qian,bei,shi,ge; qian=mm/1000; bei=mm00/100; shi=mm0/10;
- 20 -
白城职业技术学院毕业设计说明书
ge=mm; P2=0x80; P0=table[qian]; delay(50); P2=0; P2=0x40; P0=table[bei]; delay(50); P2=0; P2=0x20; P0=table[shi]; delay(50); P2=0; P2=0x10; P0=table[ge]; delay(50); P2=0; }
- 21 -
光电转速仪设计
第五章 系统软件设计
硬件电路完成以后,进行系统软件设计。首先要分析系统对软件的要求,然后进行软件的总体的设计,包括程序的总体设计和对程序的模块化设计。按整体功能分为多个不同的模块,单独设计、编程、调试,然后将各个模块装配联调,组成完整的软件。
根据设计的要求,单片机的任务是:内部进行计数,在计算出速度后显示。软件编程用C语言完成的,需要能掌握C语言,还要熟练AT89C51单片机。从程序流程图、编写程序、编译,到最后的调试,是很复杂的。下面作简单介绍:系统软件主程序的功能是完成系统的初始化、显示程序。
5.1 主程序初始化
(1).定时器的初始化
AT89C51有两个定时器/计数器T0和T1,每个定时器/计数器均可设置成为16位,也可以设置成为13位进行定时或计数。计数器的功能是对T0或T1外来脉冲的进行计数,外部输入脉冲负跳变时,计数器进行加1。
定时功能是通过计数器的计数来实现的,每个机器周期产生1个计数脉冲,即每个机器周期计数器加1,因此定时时间等于计数个数乘以机器周期。定时器工作时,每接收到1个计数脉冲(或机器周期)则在设定的初值基础上自动加1,当所有位都位1时,再加1就会产生溢出,将向CPU提出定时器溢出中断身请。当定时器采用不同的工作方式和设置不同的初值时,产生溢出中断的定时值和计数值将不同,从而可以适应不同的定时或计数控制。
定时器有4种工作方式:方式0、方式2、方式2和方式3,在此对工作方式不做具体介绍。
工作方式寄存器TMOD的设定: GATE C/T M1- M0 GATE C/T M1 M0 TMOD各位的含义如下: ◆GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。 ◆C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。
M1、M0为工作方式选择位 ,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下表5-1:M1M0=00为方式0;M1M0=01为方式1;
- 22 -
白城职业技术学院毕业设计说明书
表4-1 M1、M0为工作方式选择位
MO 0 0 1 1 M1 式 0 1 0 1 0 1 2 3 13位定时/计数器 16位定时/计数器 8位自动重置定时/计数器 两个8位定时/计数器(只有T0有) 工作方方式说明 (2)中断允许控制 MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。中断允许寄存器IE的字节地址为A8H,可以进行位寻址.
表4-2 中断位寻址表
IE (A8H) D7 EA D6 D5 ET2 D4 ES D3 ET1 D2 EX1 D1 ET0 D0 EX0 ◆EA:中断允许总控位。EA=0,屏蔽所有的中断请求;EA=1,开放中断。 ◆ET2:定时器/计数器T2的溢出中断允许位 ◆ES:串行口中断允许位。
◆ET1:定时器/计数器T1的溢出中断允许位。 ◆EX1:外部中断 INT1的中断允许位。 ◆ET0:定时器/计数器T0的溢出中断允许位。 ◆EX0:外部中断 INT0的中断允许位。
- 23 -
光电转速仪设计
5.2主程序流程图程序流程图
①主程序流程图4.1
延时2ms
图5.1流程图
②显示子程序流程图5.2 开始 显示 刷新数码管 初始化定时器计时器 开始 显示缓存初始化 LED显示初始数码显示
图5.2 显示子程序流程图 ③定时计数子程序流程图5.3
- 24 -