第四章
4.1 硬件设计
实验步骤
通过AT89C51型号单片机,由P1和P2两组I/O引脚分别控制两个7SEG–COM –ANODE型号数码管,分十位控制和个位控制,达到显示60秒倒计时的目的。通过复位电路,在仿真过程中点击开关实现60复位。
4.2 软件设计
? 定时/计数器初值计算
(1)本电路应用TIMER0 MODE 16位计数器的计时中断法。 (2)1秒等于1000000微秒,而每一计时脉冲是1微秒,因此需输入100000个计时脉冲,方可达到1秒的时间。本设计中,设定中断每次溢出时间50ms。
(3)由上式得知,循环20次即可达到1秒定时,即: N=t/Tcy=0.05s/0.000001=5000
11
X=65536-5000=15536=3CB0H
(4)由上式得知5000个脉冲,首先需设定TL0=3CH,TH0=0B0H,此时第1次只要输入5000个脉冲输入,就会溢出;第2次至第20次,则需每1000000个计时脉冲,定时1秒。
(5)上电时,显示60,开始倒数计时按下开关实现复位。 ? 软件程序
#include
void disp (unsigned char n); unsigned char m=0; unsigned char n=10; unsigned char code
D[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int a) { unsigned char b; while(--a)
{for(b=0;b<125;b++);}
12
}
void main() {EA=1; ET0=1; TMOD=0x01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6; TR0=0; while(1) {disp(n);
if(K1==0){while(K1==0);disp(++n);} if(K2==0){while(K2==0);disp(--n);} if(K3==0){while(K3==0);TR0=0;disp(n);} if(K4==0){while(K4==0);TR0=1;disp(n);} if(n==0){F=~F;}} }
void disp (unsigned char n) {unsigned char i,j; i=n/10;
j=n; P1=D[i]; S0=0;
13
delay(20); P3=0xff; P1=D[j]; S1=0; delay(20); P3=0xff; }
void ds() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; if(++m>19) {n--;
if(n==0){LED=0;F=0;while(1) disp(0);m=0;} m=0;} }
第五章 实验结果5.1 调试与仿真
? 系统调试工具keil c51 调试的主要方法 : 1. 启动Keil c51
14
2. 新建一个工程。Project菜单——〉New project ,选择好我们要保存的文件夹后,键入Frist 保存。接着弹出CPU类型选择框,我们选择最常用的AT89C51,按确定。
3. 在工程中加入文件。新建一个文件,文件菜单File——〉New,我们再选择:文件菜单File——〉Save As? (另存为)弹出 对话框后,我们文件名框中键入First.c(注意文件后缀名是 .c)保存。C文件建好啦。现在我们把文件加入到工程中去。 点击Target 1前面的+号,右键单击Source Group 1——〉选择Add Files to Group ,Source Group 1,选择添加 Add。编译运行,检查程序是否有错误。
? PROTEUS软件
调试方法:首先用Keil软件将C编译成HEX文件,打开Keil软件,新建一个文档,输入C程序,保存成C格式文件,然后新建工程,连接单片机为AT89C51,选择Options for target,选择OUTPUT子菜单,在Create HEX Fi前打钩,DeBug子菜单中,Settings选择ProteusVSM Simulator,USE前打钩,再次运行文件,成功后在目录下会生成HEX文件,打开Proteus软件,或直接点击DSN文件,双击单片机模板,点击文件夹式样的图标选择对应的HEX驱动文件,然后点击开始,进行调试。
? 仿真图:
15