成绩:
单片机原理及应用
课程设计
课 程 名 <<单片机原理及应用>>
学 部机械与电子信息工程学部
专 业
学 号
姓 名
指导教师
日 期 2012年06月
一、设计任务与要求
1. 任务:制作并调试51单片机学习板
2. 要求:
(1) 了解并能识别学习板上的各种元器件,会读元器件标示;
(2) 会看电路原理图;
(3) 制作51单片机学习板;
(4) 学会使用Keil C软件下载调试程序;
用调试程序将51单片机学习板调试成功。
二、实验内容
(5) AT89S52芯片工作电路,利用晶振提供控制信号。
(6) 10引脚下载口与AT89S52芯片相关引脚相连完成下载电路。
(7) 8个10K电阻与AT89S52芯片P0口相连,利用上拉电阻组成上拉电路。
(8) 使用开关与5.1K电阻连成外部中断0、1电路和复位电路。
(9) 利用16个开关做成键盘,实现输入号对已编程的AT89S52芯片的控制并通过数码管显示0--F。
(10) 用2片74HC573N具有锁存功能芯片与8个数码管相连,通过编程的AT89S52位选和段选实现输出信号的显示功能。
(11) 使用74HC573N锁存功能结合ULN2003AG芯片8非门芯片和74HC04N6非门芯片与4个2N5551三极管实现对步进电机的控制,和控制步进电机的信号结合LED输出显示的功能。
(12) 6、利用1片74HC573N芯片与8个共阴极LED实现跑马灯功能。
三、总原理图
1.总原理图
四、硬件调试
1、是否短路
用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。
2、焊接顺序
焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。
3、器件功能
1)检查原理图连接是否正确
2)检查原理图与PCB图是否一致
3)检查原理图与器件的DATASHEET上引脚是否一致
4)用万用表检查是否有虚焊,引脚短路现象
5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确
6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的
7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。
五、心得体会
通过这次的课程设计,结合课堂所学的单片机的课程内容,也对单片机的原理、工作方法、编程技巧有了更深一层的了解。在实践的过程中遇到了很多问题,也都能通过自己的思考以及与同学之间的讨论最后得以解决。“理论与实践相结合”在本次课程设计中得到了很好的体现。不过在设计结果中所暴露出来的问题,还是需要在以后的设计以及操作中多加注意,这样才能够更好地体现课程设计的意义。
附录程序:
8只LED左右来回点灭
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/***延时函数***/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/***主函数***/
void main()
{
uchar i;
P1=0xfe;
while(1)
{
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);
delay(100);
}
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);
delay(100);
}
}
}
0~60的秒表
#include<reg52.h>
#define uint unsigned int//宏定义
uint temp,aa,shi,ge; //定义全局变量
sbit dula=P2^6; //定义段选
sbit wela=P2^7; //定义字选
uint code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void display(uint shi,uint ge);//申明显示函数
void delay(uint z); //申明延时函数
void init(); //申明初始化函数
void main()
{
init();//调用初始化函数
while(1)
{
if(aa==20)
{
aa=0;
temp++;
if(temp==60)
{
temp=0;
}
shi=temp/10;//分离出十位
ge=temp%10; //分离出个位
}
display(shi,ge);//调用显示函数
}
}
void display(uint shi,uint ge) //显示函数
{
dula=1; //打开段选
P0=table[shi];//送十位数
dula=0; //关闭段选
wela=1; //打开位选
P0=0xfe; //送那一位
wela=0; //关闭位选
delay(5); //调用延时函数
dula=1;
P0=table[ge];
dula=0;
//P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
}
void delay(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化函数
{
temp=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void timer0() interrupt 1 //中断函数
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
}
4*4键盘检测程序,按下键后相应的代码显示在数码管上
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^7;
sbit wela=P2^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0};
uchar num,temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uchar keyscan();
void display(uchar aa);
void main()
{
num=17;
dula=1;
P0=0;
dula=0;
wela=1;
P0=0xc0;
wela=0;
while(1)
{
display(keyscan());
}
}
void display(uchar aa)
{
dula=1;
P0=table[aa-1];
dula=0;
}
uchar keyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x7e:num=1;
break;
case 0xbe:num=2;
break;
case 0xde:num=3;
break;
case 0xee:num=4;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x7d:num=5;
break;
case 0xbd:num=6;
break;
case 0xdd:num=7;
break;
case 0xed:num=8;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x7b:num=9;
break;
case 0xbb:num=10;
break;
case 0xdb:num=11;
break;
case 0xeb:num=12;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(5);
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0x77:num=13;
break;
case 0xb7:num=14;
break;
case 0xd7:num=15;
break;
case 0xe7:num=16;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
}
return num;
}
本系统主要有单片机控制系统、按键模块、串口通信模块、LED显示模块、交通灯显示模块等组成,如图1所示。其中,单片机系统为系统的主控制器,用以控制其他模块协调工作;按键模块采用外部中断INTO的方式;串口通信模块采用RS-485接口;LED显示模块用以显示交通灯控制参数;交通灯显示模块用以显示各车道的通行情况。
本系统采用AT89C52芯片作为核心控制器件。他的P0、P2口用于数码管显示控制,P1口用于交通灯显示控制,按键处理主要用中断的方式进行,保证该系统的稳定性。单片机基本外围电路如图2所示
按键控制模块由AT89C52芯片的P3口控制,电路如图2所示。当某个键按下时产生的负脉冲通过编码器74LS148的GS致使INTO中断,单片机响应这个中断,并读入74LS148的编码信息,从而根据按下不同键进行相应处理。
按键中断程序:
按键采用中断的工作方式,当按下某个键时,单片机响应中断,进行相应的处理。其程序流程如下所示:
说明:按键程序调节数码管绿灯的显示时间,按下K1键申请中断,判断是否有K1或者K2键按下,按下K2键执行初始值减一工作,按下K3键执行初始值加一操作,如果K2和K3见都未按下,则判断是否按下K1键,是则中断返回,否则继续重复上面的工作。
LED显示模块包括控制参数调整显示模块和交叉口倒计时显示模块两部分,此两部分的8位LED均采用动态显示方式,即将所有数码管的段码线相应段并联在一起,接到P0口,用P2口的各位对各个LED进行控制从而实现对LED的定时选通。
整个系统设计如图所示,该系统主要由计数模块、控制模块、分频模块、分位模块以及显示电路构成。其中分频模块主要将系统输入的基准时钟信号转换为1 Hz的激励信号,驱动计数模块和控制模块工作。控制模块根据计数器的计数情况对交通灯的亮灭及持续时间进行控制,并通过分位电路将灯亮时间以倒计时的形式通过数码管显示出来。图中Reset是复位信号,高电平有效,可以实现对计数器的异步清零。Hold为保持信号,当Hold为“1”,计数器暂停计数,表示出现特殊情况,各方向车辆都处于禁行状态。
在该模块中,采用RS-485接口完成上位机或相连交通灯控制系统与单片机的通信,从而实现该系统的控制、调试与报警。RS485接口具有良好的抗噪声干扰性,较长的传输距离和多站能力,其串行口电路图如图3所示。
继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。
电磁继电器的工作原理和特性:电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。
a.显示模块的测试:显示模块包括红灯、绿灯、黄灯的显示和数码管计数器的显示。将显示模块的程序编译后烧进单片机电路板里,接通电源后,通过测试可以看到首先十字路口处于37秒的通行和停止状态,37秒过后,黄灯闪亮3秒,然后十字路口又处于60秒的通行和停止状态,60秒过后,黄灯闪亮3秒。照此循环下去没有问题就证明该显示模块的测试成功。
b.声音模块和按键模块的测试:声音模块和按键模块是通过声音来判断按键是否按下,将总体设计程序烧进单片机电路板里,接通电源后,在单片机运行时,不管任何时候,按下K1,按键都可以听到嘀的一声,按下K1按键后,数码管显示初始值37,通过按下K2按键或者K3按键改变绿灯的工作时间,按下K2按键绿灯的工作时间减少变成36,按一下减少1秒,如若按下K3键一下绿灯的工作时间增加变成38,按一下就增加1秒,通过按下按键K2或者K3改变了绿灯的工作时间,再按一下K1按键再从刚才中断的时间恢复倒数功能,实现完这一次后从下一次就可以看到改变的绿灯工作时间,照此循环下去几个轮回没有问题就证明该声音模块和按键模块的测试成功。
课程设计的整体测试是希望得到实现要求饿功能,将总体设计程序烧进单片机电路板里,接通电源后,单片机的运行不仅可以按显示模块的程序正常运行,也可以通过按键的中断调节绿灯的时间,声音模块和按键模块同样可行。通过几个循环并无发现错误,由此我们便可以得出,编出来的程序符合我们的设计要求。
通过为期两周的课程设计,我应用所学数字电子技术顺利完成了交通灯控制器的设计,期间,我查阅很多相关的书籍,学到了很多知识,并利用它们设计了符合老师要求的功能,不仅巩固了课堂知识,而且有效的和实际结合在一起,扩展了所学知识和见识。在课程设计过程中;遇到不少问题,如相关原件运用条件不熟,接口不对应等问题,感觉到书本知识与实际问题及需要结合的难处,但也激发可我这方面的兴趣,提高了理论结合时间能够的意识。
由于课本上的知识太多,平时课间的学习并不能很好的理解和运用个元件的功能,所以在这次课程设计过程中,我了解了很多元件的功能,并且对于其在电路中的使用有了更多的认识。有一点是在设计过程中,经常会遇到这样那样的情况,就是心里想这样的接法可以行的通,但实际接上电路,总是实现不了,而又一下子找不出问题所在,只有在查啦书上有关这方面的解释后才有所进展,因此耗费在这上面的时间很多。总体感觉是通过这次课程设计,加强我们动手、思考和解决问题的能力。
1、张毅坤. 单片微型计算机原理及应用,西安电子科技大学出版社 1998
2、余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出版社,2000.7
课题:基于51单片机的数字温度计设计专业:电气工程及其自动化班级:4学号:***设计日期:20XX/6/3成绩:重庆大学城市科技学…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…
JINGCHUUNIVERSITYOFTECHNOLOGY单片机原理及应用课程设计报告题目电子时钟专业电气工程及其自动化班级20x…
重庆科技学院学生实习实训总结报告学院电气与信息工程学院专业班级XXXXXX学生姓名XXX学号20xxXXXXXX实习实训地点逸夫科…
成绩单片机原理及应用课程设计课程名ltlt单片机原理及应用gtgt学部专业学号姓名指导教师日期20xx年06月一设计任务与要求1任…
51单片机课程设计报告学院:专业班级:姓名:指导教师:设计时间:51单片机课程设计一、设计任务与要求1.任务:制作并调试51单片机…
江南大学课程名称设计题目班级姓名指导教师物联网工程学院课程设计报告单片机原理及应用基于单片机的步进电机控制器设计号评分20xx年6…
重庆科技学院学生实习实训总结报告学院电气与信息工程学院专业班级XXXXXX学生姓名XXX学号20xxXXXXXX实习实训地点逸夫科…
一6该课程设计是利用MCS51单片机内部的定时计数器中断系统以及行列键盘和LED显示器等部件设计一个单片机电子时钟设计的电子时钟通…
内容提要单片微型计算机简称单片机是典型的嵌入式微控制器常用英文字母的缩写MCU表示单片机它最早是被用在工业控制领域单片机由芯片内仅…
单片机课程设计心得体会:这个学期的单片机课已经早早的上完了,但是理论纯属理论,没有与实践的结合总让我们学的不踏实,感觉没有达到学以…