一、实验目的
1、掌握数码管显示原理
2、理解中断系统的工作原理
3、学会数码管显示和中断系统结合使用
二、实验步骤
1、连接线路:
USB转串口与电脑连接
电源模块与电脑连接
将单片机的IO(P0)口与开发板的P7连接
P1口与流水灯(开发板插针p1)用一根导线连接
2、使用keil uvison4软件编写、编译程序
①新建工程:
点击“Project”菜单选择“New uVision Project”选项后填写新建立的工程名(流水灯)后保存到某个文件夹下,在弹出的对话框里选择MCU型号(此处我们选STC公司的STC89C52),右边Description列表框中显示MCU的基本说明,单击“OK”按钮。
②设置工程:
右击窗口左侧“Target 1”,在弹出的快捷菜单中点击“Options for ‘Target 1’”命令,在弹出的对话框中点击“Output”选项卡,在“Create HEX File”选项前的方框内打勾 (输出HEX文件),单击“Ok”结束。选中‘Target’选项,修改Xtal(MHZ) 为11.0592。
③新建源程序文件:
选“File”下拉菜单中的“New”命令,打开程序编辑窗口输入编辑源程序(流水灯.c),然后单击工具栏的“保存”按钮保存文件(汇编源程序:文件名.asm; C源程序:文件名.c)。
④为工程添加源文件:
单击“Target 1”前面的+号,展开里面的内容“Source Group 1”;右击“Source Group 1”,在弹出的快捷菜单中选择“Add Files to Group ‘Source Group 1’”命令;选择刚才的文件,文件类型选择“C Source file(*.c)”,单击“Add”按钮后点击“Close”按钮。
⑤下载、调试:
编译成功后,用串口助手将.HEX文件下载到单片机内部ROM中运行,在运行过程中若发现错误要重新修改程序,并编译后再下载运行。
3、程序下载
①打开串口下载软件,“MCU Type”下拉菜单下选择MCU的类型,此处选择“STC89C5X、RD+”系列的“STC89C52RC”;
②点击“打开程序文件”按钮,找到MCU运行的“HEX”文件所在的文件夹,打开该“HEX”文件;
③在COM下拉菜单中找到安装的串口标号,各个USB口的串口标号不同,具体标号需要查询;其它选项选择默认(但是第一次下载失败,因为波特率太高了,把最高波特率改为4800后就操作成功了);
④点击“Down/下载”按钮,关掉开发板电源,然后稍等片刻打开电源(冷启动),等待下载完成即可。
三、拓展任务
·拓展功能:左边第一个数码管进行九秒倒计时,结束后数码管灭,一个LED灯亮。
程序代码实现:
#include<reg51.h>
#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^6;//定义锁存使能端口 段锁存
sbit LATCH2=P2^7;// 位锁存
unsigned char code dofly_DuanMa[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};
// 显示段码值01234567
unsigned char code dofly_WeiMa[]={0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe};
//分别对应相应的数码管点亮,即位码
char i=20;
unsigned char j=0;
void main ()
{
TMOD=0x01; //定时器T0为方式1
TH0=0x4c; //设置定时器初值
TL0=0x00;
DataPort=dofly_WeiMa[j]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=dofly_DuanMa[j]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
EA=1; //总中断开
ET0=1; //开T0中断
TR0=1; //启动T0
while(1); //循环等待
{
;
}
}
void timer0() interrupt 1 //T0中断程序
{
TH0=0x4c; //重新赋初值
TL0=0x00;
i--; //循环次数减1
if(i<=0)
{
DataPort=dofly_WeiMa[j+1]; //取位码
LATCH2=1; //位锁存
LATCH2=0;
DataPort=dofly_DuanMa[j+1]; //取显示数据,段码
LATCH1=1; //段锁存
LATCH1=0;
j++;
if(10==j){
P1=0xfe;
}
i=20; //重置循环次数
}
}
|