天津城建大学单片机课设.docx
《天津城建大学单片机课设.docx》由会员分享,可在线阅读,更多相关《天津城建大学单片机课设.docx(13页珍藏版)》请在冰豆网上搜索。
![天津城建大学单片机课设.docx](https://file1.bdocx.com/fileroot1/2022-11/20/a1570f3e-10eb-43fe-bb94-c870ac5da501/a1570f3e-10eb-43fe-bb94-c870ac5da5011.gif)
天津城建大学单片机课设
学号1222020222
天津城建大学
单片机原理及应用A课程设计
设计说明书
摇摇棒的设计
起止日期:
2015年1月19日至2015年1月23日
学生姓名
李天福
班级
智能化2班
成绩
指导教师(签字)
控制与机械工程学院
2015年01月23日
目录
一.设计内容3
1.设计目的3
2.设计要求3
3.设计思路3
二.硬件系统设计3
1.基本原理图3
2.元件清单4
3.主要元件说明5
4.仿真电路图6
三.软件设计6
1.主程序流程图6
2.程序清单7
四.总结9
五.参考文献10
一.设计内容
1.1设计目的
本次设计制作的是一个显示棒,基本要求就是要小巧、轻便,所以要将单片机的系统板简化设计。
通过本次设计,加强学生对MCS-51单片机的深刻理解,提高学生的设计能力和动手能力。
1.2设计要求
设计一个16只高亮度LED发光二极管构成的摇摇棒,通过单片机编程配合手的左右摇晃就可呈现一幅完整的画面,可以显示字符、图片。
1.3设计思路
本系统要求设计一个LED显示棒且需要有按键进行内容切换,它主要是由中央控制部分,LED驱动部分,LED显示部分以及电源部分组成,如图图1.1所示
图1.1系统的组成
单片机将提取的字模进行存储,当接收到按键输入的指令时单片机就将相应的字模代码通过I/O口输出,使LED灯点亮,利用视觉暂留原理最终使图案完整的显示在摆动的显示屏中。
1.LED灯的选择:
传统LED发光二极管。
颜色多样,在可以同样显示图案的前提下使用它更为经济。
2.外部中断信号产生方式:
通过外部中断可以控制数据开始传输的时刻。
选择好外部中断来源是本次制作的难点及重点。
使用惯性开关。
通过摇晃使得惯性开关的摆杆与焊接的左右两个触点接触,利用这种接触产生的电平变化来触发中断,结合软件控制显示,制作简单,使用方便。
3.抗重影方案的选择:
使用外部中断控制数据传输时刻。
外部中断信号由惯性开关产生,触发方式为下降沿触发。
惯性开关左右两边的触点分别与单片机两个外部中断接口相连,默认为高电平,摇动的摆杆接地。
惯性开关处于不同位置进入不同的中断,从而决定何时送数据。
该方案简单易行,可以保证数据是单程传输的,避免了重影。
不摇动时把惯性开关处在左边就可以使LED棒熄灭,可以达到省电的效果。
二.硬件系统设计
2.1基本原理图
摇摇棒的电路如图2.1所示,就是在单片机最小系统的I/O端口连接有16只LED。
供电的稳压电路是一个典型的三端稳压电路
图2.1基本原理图
2.2元件清单
详细备料单如表2-1所示.
元器件
规格或型号
图中编号
数量
说明
单片机
AT89S52
U1
1
三端稳压器
7805
U2
1
二极管
1N4148
D2
1
发光二极管
Φ5
DX
16
选用高亮度或自己喜欢的颜色
Φ5
D1
1
低颜色颜色与其他LED相区别
电解电容
47μF
C1C4
2
10μF
C7
1
电容
0.1μF
C2C3
2
用贴片式封装
22pF
C6C5
2
容量值大小在30pF左右均可
排阻
330Ω
Rx
2
电阻
10kΩ
R1
1
560Ω
R2
1
指示用LED的限流电阻可自定阻值
晶振
12MHz
1
水银开关
S2
1
表2-1元件清单
2.3主要元件说明
1.LED(发光二极管)
在实际制作中,除了关心LED的外型尺寸及发光颜色外,还有以下几点值得关注:
(1)LED的引脚极性:
LED只能在正向电流流过时才能发光,因而在安装在电路板上时需要注意识别引脚正负。
对直插式封装的LED,一般可根据其引脚长短和LED内部电极大小等外观来识别引脚的正负.但有时也会出现例外情况,其实,最简单可靠的方法还是直接用数字万用表的LED挡来进行测试,当LED发光时,接在红笔的引脚为正,接在黑笔的引脚为负。
(2)LED正常发光的工作电压及电流值:
即使在封装在一起的LED,因发光的颜色不同,它们正常发光的工作电压值是不同的。
在业余情况下,大多不知道手上的LED的性能参数,只能凭经验粗略估计,作为参考,一般来说:
①红色电压1.8~2.2V,绿色电压2.0~3.9V,蓝色及白色电压2.8~4.2V;
②3mmLED的额定电流1~10mA;
③5mmLED的额定电流5~25mA;
④10mmLED的额定电流25~100mA。
(3)LED限流电阻的计算:
为保证LED工作在安全状态,简单而常见的方法是给LED串接一只限流电阻。
限流电阻值的计算公式为
限流电阻阻值(R)=(电源电压(VCC)-LED正向电压(VF))/LED正向电流(IF)
限流电阻功率=限流电阻阻值×LED正向电流
根据计算的结果取数值最接近的电阻值。
2.排阻
我们看到,在LEDPOV的制作电路中都会有许多LED,这样,在电路中也自然就有相对应的限流电阻,它们功率和阻值大多相同,且一般都有一个接电源或地的公共端。
为节省元件数量,简化电路,可采取用一只排阻替代若干只电阻的办法。
排阻的阻值一般用3位数字表示,前2位为有效数字,后面的一位表示的是10的次方。
比如:
104表示100000Ω即100kΩ,331表示330Ω。
3.水银开关
在有两个电极的小容器里注入一小滴水银,因为重力的关系,水银珠会向容器中较低的地方流去,当同时接触到小容器中的两个电极时,两电极将被接通。
在摇摇棒的制作中,水银开关按如图2.2所示的姿态安装在摇摇棒上的,只有当摇摇棒从向右运动快速转为向左运动时,水银开关内的水银由于惯性将会向上移动,接通电极。
注意:
在使用水银开关时,须特别小心,不要弄破外壳,以免水银中毒或破坏环境
图2.2水银开关
2.4仿真电路图
仿真原理图如图2.3所示
图2.3仿真电路
三.软件设计
3.1主程序流程图
通过软件设计思路分析,得到该系统的主程序流程图3.1所示:
图3.1主流程图
3.2程序清单
程序清单如下:
//程序名:
16位LED摇摇棒程序———祝你成功
//说明:
单片机89S52,晶振12M
//------------------------------------------------
//------------------------------------------------
//**嵌入文件**
//------------------------------------------------
#include//51单片机硬件资源参数说明
//------------------------------------------------
//**变量说明**
//------------------------------------------------
unsignedcharBZ;
unsignedcharcodeGB_16[]=//汉字字模
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//(空)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//(空)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x08,0x06,0x89,0x01,0xEF,0xFF,//祝
0x7A,0xFF,0x9C,0x01,0x88,0x83,0x00,0x41,
0x7F,0x30,0xFE,0x1F,0xA2,0x0F,0x22,0x00,
0xA2,0x7F,0x3E,0xFF,0x7F,0xC0,0x02,0x70,
0x00,0x00,0x80,0x00,0x60,0x00,0xF8,0xFF,//你
0xEF,0x7F,0x06,0x10,0x40,0x08,0x20,0x0E,
0xB8,0x47,0x1E,0x43,0xF7,0xFF,0xD2,0x7F,
0x10,0x01,0x70,0x06,0x38,0x1C,0x10,0x08,
0x00,0x00,0x00,0x80,0x00,0x70,0xFC,0x3F,//成
0xF8,0x0F,0x88,0x10,0x88,0x30,0x88,0x1F,
0xC8,0x8F,0xBF,0x40,0xFE,0x67,0xC9,0x3F,
0x0A,0x3C,0x8E,0x77,0xEA,0xC1,0x48,0xF0,
0x00,0x00,0x08,0x20,0x08,0x60,0xF8,0x3F,//功
0xF8,0x3F,0x0C,0x10,0x08,0x90,0x10,0x68,
0x10,0x38,0xFF,0x1F,0xFE,0x07,0x10,0x20,
0x10,0x40,0xF0,0xFF,0xF8,0x7F,0x10,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//(空)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//(空)
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
//**延时子程序**
//------------------------------------------------
voidDelayUs(unsignedintN)
{
unsignedintx;
for(x=0;x<=N;x++);
}
//------------------------------------------------
//**外部中断0服务程序**
//------------------------------------------------
voidintersvr0(void)interrupt0using1
{
BZ=1;//标志置1,主程序将进入显示
}//程序状态
//**主程序**
//------------------------------------------------
voidmain(void)
{
inti;/