89C52单片机课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. 设计任务及要求
1.1 设计任务
(1)完成基本焊接任务
(2)单片机开发板功能正确
(3)完成指定的实验
(4)完成课程设计报告
1.2 要求
(1)元件面:元器件位置正确、排列整齐有序,元件整形恰当。
焊接面:整洁、清爽,焊点圆润、无虚焊,引脚修整合适。
(2)能够下载程序、运行演示程序。
(3)完成3个程序的编写、下载及演示功能。
(4)报告格式规范、文字流畅、思路清晰。
2.方案设计与论证
2.1 方案设计
方案一:仿照周立功实验箱自行设计电路,然后完成焊接,实现各功能。
单片机仿真器、编程器、实验仪三合一综合开发平台方案二:采用JB-MCS 51-V8.0电路板,直接焊接相关元器件并实现各功能。
2.2论证
经验证实验平台所需元器件无法找齐,且体积过大不便于携带等原因,最终决定采用方案二。
3.单元电路原理
各单元电路原理图4.总原理图及元器件清单
4.1 总原理图
4.2 元器件清单
5 硬件安装与调试
在安装硬件的过程中要注意硬件的排列有序,焊点圆润、无虚焊,引脚修剪整齐。在硬件安装完毕后,对作品进行调试。通过STC软件对作品进行调试以及程序的下载,具体步骤如下:
(1)选择单片机型号
(2)选择程序
(3)选择串口,安装USB驱动程序后,可在设备管理器中看到多出的串口(每台电脑不一样)。
然后在软件中选择相应的串口
(4)选择波特率,一般情况下这都是默认的,最高波特率选择115200,最低波特率选择1200。
(5)以上步骤完成后,就点击Download/下载,按左下角的提示进行操作。
6.各实验具体操作和相关解释
6.1跑马灯试验
6.1.1系统概述
通过模式键来改变单片机的工作模式,进行程序控制,一共有八个模式。LED 等工作在不同的模式下,有不同的现象。加速减速开关来控制灯泡的闪亮快慢。复位电路用来初始化芯片的工作状态。
控制电路是整个电路的核心,主要由单片机
来完成。89C52 RC的管脚如图所示。单片机执行
指令是在时钟脉冲控制下进行的。因此单片机必
须外接振荡器构成时钟电路才能正常工作。另外,
还应在单片机的RES端外接电阻电容构成复位电
路,当单片机运行错误时可以给一个复位信号使
其复位。
单片机对接口电路的控制是由软件向单片机的I/O口来实现的。89C52 RC单片机内部有两个定时/计数器,可以用其中一个定时/计数器来对时间进行计数,而另一个可以对显示器的显示延时进行定时并通过中断把相应的数据通过I/O口送给显示器显示。同时通过对外部按键的状态判断来进行时间的调整。
6.1.2 单元电路设计与分析
1、时钟电路
单片机执行指令是在脉冲控制下进行的,因此时钟信号是单片机的基本工作条件。时钟可以由内部和外部两种方式产生,本设计采用内部方式。如图所示,在XTAL1和XTAL2引脚上外接定时元件。定时元件通常采用振荡器和电容组成的并联谐振电路。X1为振荡器,C1、C2为电容。振荡的主要频率决定于晶振,电容对振荡频率起微调作用。其中,晶振选择
12MHz
2、复位电路
一个时钟周期为振荡周期的2倍,12个时钟周期构成一个机器周期。在RES 引脚上输入一个超过两个机器周期的高电平信号,单片机就可以复位。时钟频率为12MHz ,则有效的复位信号至少应保持2us 以上。下图为单片机的复位电路
3.C 语言编程如下:
#include
#define uchar unsiged char
char k=0;unsigned int i,t=45000,j;sbit p3_0=P3^0;
code char tab[9]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; int0()interrupt 0
{ while(1){
k++;
if(k<9) P1=tab[k];
else { k=0;P1=0x3f;}
if(k==0) {P0=0xff;P2=0xff;}
if(k==1){P0=0xfc;P2=0xff;}
if(k==2){P0=0xf3;P2=0xff;}
if(k==3){P0=0xcf;P2=0xff;}
if(k==4){P0=0x3f;P2=0xff;}
if(k==5){P0=0xff;P2=0xfc;}
if(k==6){P0=0xff;P2=0xf3;}
if(k==7){P0=0xff;P2=0xcf;}
if(k==8){P0=0xff;P2=0x3f;}
}}
int1()interrupt 2
{while(1)
{
for(j=0;j<16;j++)
{
if(j<=7)
{
P2=0xff;
P0<<=1;
if(j!=0){P0=P0|0x01;}
for(t=0;t<=20000-1000*j;t++);
}
if(j>7) {P0=0xff;
P2<<=1;
if(j!=8){P2=P2|0x01;}
for(t=0;t<=20000-1000*j;t++);}
}
}
}
main()
{
EA=1;
EX1=1;
IT1=1;
EX0=1;
IT0=1;
p3_0=0;
if(p3_0==1)
{ while(1){
{ for(j=0;j<16;j++)
{
if(j<=7)
{
P2=0xff;
P0<<=1;
if(j!=0){P0=P0|0x01;}
for(t=0;t<=3000+1000*j;t++);
}
if(j>7) {P0=0xff;
P2<<=1;
if(j!=8){P2=P2|0x01;}