当前位置:文档之家› 单片机跑马灯实验报告-叶坤

单片机跑马灯实验报告-叶坤

单片机实验报告—Delay函数和中断系统实现跑马灯14级通信2班叶坤学号:201400800679
一、硬件组成介绍
1、最小系统
STC12C5A16S2单片机、开发板、12兆的晶振、电源。

2、其他
共有40个引脚,两个外部中断,两个定时器,一个串行口中断。

四个独立按键,四个数码管,一个蜂鸣器,还有一块拓展区域,可作为日后拓展功能使用,开发单片机的更多功能。

二、软件开发流程
1、新建工程
打开Keil软件,点击“Project | New Project…”,弹出一个名为“Create New Project”的对话框。

然后选择一个合适的文件夹准备来存放工程文件。

2、选择CPU
Keil提示选择CPU 器件。

选中ATMEL中的89c52即可。

接下来弹出一个对话框。

该对话框提示是否要把标准8051 的启动代码添加到工程中去,一般选择“否”。

3、新建一个.c文件
点击新建文件,将文件名改为“text.c”,然后保存在合适的文
件夹里。

扩展名“.c”不可省略。

4、添加源程序文件到工程中
一个空的源程序文件“text.c”已经建立,但是这个文件与刚才新建的工程之间并没有什么内在联系,因此我们需要把它添加到工程中去。

单击Keil软件左边项目工作窗口“Target 1 ”上的“+”,将其展开。

然后右击“Source Group 1”文件夹,会弹出选择菜单。

单击其中的“Add Files to Group 'Source Group 1' ”项。

这时,对话框内将出现刚才保存过的“text.c”。

双击文件“text.c”,这时,源程序文件“text.c ”已经出现在项目工作窗口的“Source Group 1 ”文件夹内。

5、设计和编辑C语言程序
单根据实验要求编辑C语言程序,并且通过反复的编译和调试以确保程序的正确性。

编辑“text.c ”文件,然后点击“Project”中的“compile”,根据运行结果调试程序,以达到目的。

6、勾选产生.hex文件
单击Keil C51 工具栏的“”图标,弹出名为“Options for Target ‘Target 1’ ”的对话框。

单击“Output”标签页,选中“Create HEX File”项,然后“确定”。

7、仿真调试
用鼠标左键单击菜单命令“Debug”→ “Start/Stop Debug
Session”,单击菜单命令“Peripheral”→
“I/O-Ports”→“Port1”→“View”→“Periodic Window Update”,切换到源程序窗口,将光标移到开头的一条可执行语句上,用鼠标左键单击菜单“Debug”→“Run to Cursor line”→ “Step”,或用鼠标左键单击菜单“Insert/Remove break
point”→“Go”,重复“Step”或“Insert/Remove break point”→ “Go”步骤。

停止调试:用鼠标左键单击菜单“Debug”→“Start/Stop Debug Session”。

8、烧录程序
编译成功后的结果会生成hex格式的程序文件。

打开烧录程序的软件STC_ISP,选择之前已安装好的驱动的COM口,并选择单片机的型号。

点击“打开程序文件”,找到刚才生成的hex文件,双击。

最后点击“下载”,并给单片机上电,程序便被烧录到单片机中(烧录前单片机要处于关闭状态)。

三、C语言程序展示及讲解
①运用Delay函数实现跑马灯:
#include"reg52.h"
sbit D1=P0^0;
sbit D2=P0^1;
sbit D3=P0^2;
sbit P4=P0^3;
sbit P5=P0^4;
sbit P6=P0^5;
sbit P7=P0^6;
sbit P8=P0^7;
sbit S=P2^0; //定义端口
void Delay(unsigned int xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=100;j>0;j--);
} //Delay函数
void main(void) //主函数
{
int i;
S=0; //打开电源
{
D1=0;
Delay(800);
D1=1;
D2=0;
Delay(800);
D2=1;
D3=0;
Delay(800);
D3=1;
P4=0;
Delay(800);
P4=1;
P5=0;
Delay(800);
P5=1;
P6=0;
Delay(800);
P6=1;
P7=0;
Delay(800);
P7=1;
P8=0;
Delay(800);
P8=1;
P7=0;
Delay(800);
P7=1;
P6=0;
Delay(800);
P6=1;
P5=0;
Delay(800);
P5=1;
P4=0;
Delay(800);
P4=1;
D3=0;
Delay(800);
D3=1;
D2=0;
Delay(800);
D2=1;
D1=0;
Delay(800);
D1=1;
}
for(i=1;i<3;i++)
{
D1=0;
D2=0;
D3=0;
P4=0;
P5=0;
P6=0;
P7=0;
P8=0;
Delay(5000);
D1=1;
D2=1;
D3=1;
P4=1;
P5=1;
P6=1;
P7=1;
P8=1;
Delay(5000); //跑马灯过后所有灯闪烁两次}
}
②中断系统实现跑马灯:
#include"reg52.h"
unsigned char count;
sbit D1=P0^0;
sbit D2=P0^1;
sbit D3=P0^2;
sbit D4=P0^3;
sbit D5=P0^4;
sbit D6=P0^5;
sbit D7=P0^6;
sbit D8=P0^7;
sbit S=P2^0; //定义端口
void ding() interrupt 1
{
P0=0xff; //灯全灭
TH0=0x3c;
TL0=0XB0;
if(count==1)
D1=0;
if(count==2)
D2=0;
if(count==3)
D3=0;
if(count==4)
D4=0;
if(count==5)
D5=0;
if(count==6)
D6=0;
if(count==7)
D7=0;
if(count==8)
D8=0;
if(count==9)
;
if(count==10)
P0=0x00; //灯全亮 if(count==11)
;
if(count==12)
D8=0;
if(count==13)
D7=0;
if(count==14)
D6=0;
if(count==15)
D5=0;
if(count==16)
D4=0;
if(count==17)
D3=0;
if(count==18)
D2=0;
if(count==19)
D1=0;
if(count==20)
;
if(count==21)
P0=0X00; //灯全亮
if(count==22)
;
count++;
if(count==22)
count=1;
}
void main(void)
{
S=0;
count=1;
TMOD=0x01; //模式1定时
TH0=0X3C;
TL0=0XB0;
ET0=1; //开T0中断
EA=1; //开CPU中断
TR0=1; //启动T0
TF0=0; //T0溢出标志位清零
while(1)
{
}
}
四、实验结果与分析
通过两种方式都实现了跑马灯,但实现的方式个有好处。

在运用Delay函数实现跑马灯的时候C语言程序很冗杂,不易阅读而且内容很多,但是很容易懂,简单。

而使用中断系统实现跑马灯的时候程序简洁,一目了然,但是程序中中断系统的使用会有一些困难,充分发挥了单片机的作用。

五、实验心得
实验过程中,需要对中断系统进行系统的学习,掌握各种中断方式的使用。

实验过程要有耐心,需要对程序进行反复调试。

写程序的过程中,需要对实验程序做一定的注释,以便于理解和后期调试。

对于开发板电路图的阅读也极其重要,这是完成实验的第一步。

相关主题