单片机课程设计报告班级:13应电2班学号:**********13052201071305220111姓名:***组员:***雷肖锋指导老师:***时间:2015年06月10日目录一、设计目的、设计题目 (3)1 设计目的 (3)2 课程设计题目:旋转LED (3)1 设计的任务 (3)2 功能描述 (4)三、总体设计 (4)1 方案论证 (4)1)系统总体方案设计 (4)2)电路结构图的设计 (6)3)电路原理图的设计 (6)四、硬件原理分析 (7)1硬件设计 (7)2 端口应用与分配 (8)3 硬件模块的分析说明及原理介绍 (8)4 原理图及PCB (10)5 实物图 (12)五、软件设计 (14)1 地址空间分配: (14)2 软件整体架构分析: (14)六、设计心得 (16)七、器件清单 (17)附录1 源程序 (20)一、设计目的、设计题目1 设计目的课程设计是继“模拟电子技术基础”及“数字电子技术基础”理论学习和实验教学之后又一重要的实践性教学环节。
它的任务是在学生掌握和具备电子技术基础知识与单元电路的设计能力之后,综合所学知识进一步学习电子电路系统的设计方法和实验方法,为今后从事电子技术领域的工程设计打好基础基本要求。
通过课程设计,培养综合运用本门课程及有关课程的基本知识去解决某一实际问题的实际本领,加深对该课程知识的理解;巩固、深化和扩展学生的理论知识与初步的专业技能。
2 课程设计题目:旋转LED二、设计的任务及功能描述1 设计的任务主要培养以下能力:查阅资料:搜集与本设计有关部门的资料(包括从已发表的文献中和从生产现场中搜集)的能力。
方案的选择:树立既考虑技术上的先进性与可行性,又考虑经济上的合理性。
提高分析和解决实际问题的能力:迅速准确的进行工程计算的能力。
计算机应用能力:熟练使用protel2014软件、Keil uVision4、stc-isp-15xx-v6.84、Altium Designer等软件为以后的毕业设计奠定了坚实的基础。
2 功能描述1)基本要求:(1)利用单片机控制显示文字;(2)用5V电压直接给电机供电;(3)利用无线供电技术,设计并制作无线供电模块为旋转电路板供电;2)发挥部分:(1)设计立体回转旋转LED显示汉字和任意图形;(2)自制为系统供电的电源。
三、总体设计1 方案论证人眼在观察景物时,光信号传人大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”,其原因是由视神经的反应速度造成的,其时值是二十四分之一秒,通常情况下,视觉残留会保持0.1~0.4秒,也就是说以0.1~0.4秒间隔闪烁的图像,被人眼观察,会被认为是连续的图像。
视觉残留是动画、电影等视觉媒体形成和传播的根据。
本次旋转LED可以归纳为动态扫描和机械旋转两部分,其实质就是与机械转动配合起来的动态扫描显示技术。
1)系统总体方案设计旋转LED显示屏是通过一个旋转的电路板,电路板上排列的16个LED灯受单片机控制在特定的位置(红外感应位置)亮或灭,从而显示出特定的字符或图形。
本作品主要是根据人的视觉暂留原理设计的。
采用高速旋转的电机带动电路板高速旋转,从视觉效果上就会产生一种圆盘状的LED显示屏的状态。
旋转显示屏是利用机械转动动态扫描代替传统逐行扫描方式,是一种新型的显示屏,具有成本低,可视范围大的特点,是LED显示屏的一个新的发展方向。
其实质就是与机械转动配合起来的动态扫描显示技术。
本次“旋转LED显示屏”的制作用于提高我们的实践能力和创新能力,激发学生学习兴趣,引导自主学习及培养创新能力、协作精神、工程实践素质。
本设计利用高速旋转中控制LED的亮灭,进行字符的显示,控制器采用单片机,完成显示内容的传输、字库的转换、显示等功能。
旋转扫描采用了不同的形式,其显示器件只有一列,由机械旋转运行到某一位置时就显示该位置的状态,到下一位置后又显示下一位置的状态,即一列图像要完成全部图像的显示,扫描过程由机械转动更换位置来实现的。
旋转LED显示的旋转显示,可采用机械旋转的扫描方式。
2)电路结构图的设计图3.2.1 电路结构图的设计3)电路原理图的设计图3.3.1 总电路图红外接受管感红外发射管接通电机带动电路板电机通电 单片机接通 显示图像LED 灯显示 开始 无线供电 手机充电器供电四、硬件原理分析1 硬件设计电路板使用单面板,自己设计PCB,单面板上有一排高亮的贴片LED,是旋转时钟的关键部分,负责显示功能。
它们就是显示部件了,亮点所在,为了看起来美观,使电路板更精巧,我把单片机、发光二极管、一体化红外接收头灯器件以及无线供电模块焊接在设计好单面板的电路板上,这样可以使旋转的电路成为一个独立的系统,只需要外部送电进来就可以正常运作。
电路板中心钻一个电机轴的插孔,插孔为半圈并且半径与电机轴相等,电机轴插入其中带动指针板旋转。
该电路板越轻越好,元件全部采用贴片式。
LED灯数目平面为16个、柱面16个。
总共32支LED 灯,也足够用来显示汉字和英文。
也就是说每一列上可以分辨的显示点有16个点。
当然,这只是视觉上的显示效果。
通过之前的设计方案,利用编程可实现平面时钟显示和柱面显示文字效果。
除了以上几点外,需要考虑的还有显示稳定问题:比如主面板旋转扫描一圈完成了数字的显示,如果电机速度因为各种原因而不稳定,转下一圈所用的时间多于(或少于)上一圈的,那么数字“12”将会移到上一次显示位置的左侧(或右侧)。
为了解决这个问题,在板上加装一个红外接收管,如图3.3.1所示。
当接收到与之配对的红外发光二极管(红外发光二极管安装在电机外壳上,并与接收管对齐)发出的红外线后,就会反向导通,接到单片机P4口,将会触发单片机并写入编程表示转过了一圈。
有了这个信号,单片机就可以在指针板旋转过程中实时检测计算指针版的角度位置,并根据显示内容保持稳定。
2 端口应用与分配旋转时钟的核心部件单片机,对程序存储量和控制能力要求并不高,选择STC89C52RC单片机绰绰有余。
本设计充分运用89C52的各个接口:首先是32支LED灯,主面板的贴片LED取P3口和P2口,主要是为了方便布板;柱面的LED则分配在P1口和P0口。
红外接收接在P4.2口,用来判断位置;使用一个8550三极管用来控制LED光亮;其次X1、X2引脚接12MHz晶振。
3 硬件模块的分析说明及原理介绍1)旋转主面板采用无线电磁感应供电:利用公式计算出初次级线圈匝数、铜线直径、线圈直径,次级线圈匝数越多,互感后得到的电压也就越大,故在这儿去到5V左右。
因为线圈过来是交流电,所以采用整流桥电路,外加5V稳压管和钽电容。
得到稳定的5V输出电压为旋转面板供电。
2)红外对管:红外对管是一种常用的光电器件所谓对管就是由一支红外线发射管和红外线接收管组成。
当发射管与接收管的发射与接收靠近对齐时,即红外线照射到接收管上,则接收管导通,其中导通特性与普通二极管相似,当然我用在旋转LED上就不用考虑距离问题,两管的距离完全可以在几厘米之内。
3)电源基座:考虑到成本,采用NE555和MOS管组成多谐振荡电路,只要外加几个电阻和电容就可以实现,外部再初级线圈。
4)电源基座供电部分:直接使用5V手机充电器为电源基座、电机供电。
5)电机的选择:采用12V直流电机,5V供电时,2300转/分,故满足电路视觉暂留现象。
6)外部框架固定部分:除了电机外还需要一个支架将电机固定起来,由于电机在带动指针板转动过程中速度比较快,旋转面板又有一定重量,而且配重也不一定做得很好,转起来更是会是电机晃动,所以必须要稳重的支架来牢牢固定住电机。
这里采用两片亚历克黑玻璃和铜柱制作骨架。
4 原理图及PCB旋转面板原理图旋转主面板PCB图电源基座原理图电源基座PCB图5 实物图文字效果图主面板实物图电源供电及频率振荡部分实物图整体框图五、软件设计1 地址空间分配:1)平面16个LED地址分配:P1.0-P1.7、P0.0-P0.72)侧面16个LED地址分配:P2.0-P2.7、P3.0-P3.73)4脚接RST复位4)14脚、15脚接12M晶振5)16脚GND6)P4.2接红外接收7)P4.0接三极管控制平面LED电平2 软件整体架构分析:总体架构说明:设计思路程序以纵列向上扫描,利用延时函数增加文字的宽度(视觉暂留),同时使用取模软件,计算16进制的扫描码。
首先判断红外的对接,以红外的端口为起点,逆时针旋转以及扫描并且显示出文字。
●主程序功能描述及分析、主程序流程图●各子程序功能描述及子程序入口出口、各程序流程图六、设计心得经历了星期的奋战,紧张而又充实的创新性试验终于落下了帷幕。
回想这段日子的经历和感受,感慨万千,这次创新性设计过程中,我们组拥有了无数难忘的回忆和收获。
在制作过程中遇到困难我们组通过在寝室上网查资料,自己调试,找同学帮忙,问老师,在大家的努力下,困难一个接一个解决了,作品也慢慢成型了。
脚踏实地,认真严谨,实事求是的学习态度不怕困难,坚持不懈,吃苦耐劳的精神是我们组在这次设计中最大的收益,这是一次意志的磨练,是对我们实际能力的一次提升。
在制作旋转过程时钟过程中,我们组面临着许多问题的挑战。
第一,参考资料后加装了红外对管来同步转速,时间画面能否重复稳定地显示取决于LED旋转的速度,要求电机转速一定要很稳定。
第二,在制板的过程中,PCB的测量与实物有稍许的误差,元件的参数也不够稳定,最终调试成功。
第三,也是最重要的一点,就是上位机的问题,最终无法解决,采用取模软件,以纵列扫描的方式逐个取模,通过时达两天的时间,最终调试成功程序,虽然有点抖动。
总结一句,最难的不是硬件,而是程序的设计,文字效果的展示,需要很清晰的逻辑思维能力。
但是我们相信,在老师的指导下,我们一定会越来越好,做出更好的作品。
七、器件清单附录1 源程序/*时间:2015年6月18日 19:22:35项目:旋转点阵LED的侧面显示总结:第一次写这样的程序,所以很复杂,以后多努力*/#include <reg52.h>#define uint unsigned int#define uchar unsigned char/* P0上侧面LED //侧面P.0点从下到上P1下侧面LEDP2.P3为平面LED*/uchar code zimo[] = {0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x08,0x00,0x10,0x00,0 x44,0x7F,0x48,0x49,0x50,0x49,0x60,0x7F,0xFF,0x49,0x60,0x49,0x50,0x7F,0x48,0x00,0 x44,0x00,0x04,0x00,0x00,/*"课",0*//* (16 X 16 , 宋体 ) */0x24,0x10,0x24,0x60,0x25,0x80,0x7F,0xFF,0xC4,0x80,0x44,0 x60,0x00,0x02,0x7C,0x92,0x44,0x92,0x44,0x92,0x44,0xFE,0x44,0x92,0x44,0x92,0x7C,0 x92,0x00,0x82,0x00,0x00,/*"程",1*//* (16 X 16 , 宋体 ) */0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFC,0x00,0x09,0x02,0 x11,0x05,0x02,0x79,0xC2,0x41,0x34,0x41,0x08,0x41,0x14,0x79,0x62,0x05,0x82,0x04,0 x01,0x04,0x01,0x00,0x00,/*"设",2*//* (16 X 16 , 宋体 ) */0x02,0x00,0x02,0x00,0x42,0x00,0x33,0xFE,0x00,0x04,0x02,0 x08,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xFF,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0 x00,0x02,0x00,0x00,0x00,/*"计",3*//* (16 X 16 , 宋体 ) */};/*端口定义*/sfr P4 = 0xe8;sbit KEY = P4^2;/*定义变量及赋值*/uint jishu = 0;uchar shuzi = 0;uchar flag = 0;/*调用函数定义*/void Delayus(uint n);void Display_0();void Display(uchar g, uchar d); void init();bit KEY_jieshou();void KEY_display();void main(){init();while( KEY_jieshou() ){KEY_display();}}bit KEY_jieshou(){if(KEY == 0){while(KEY == 0);return 1;}}void KEY_display(){uint n = 0, a = 0;{if(jishu >= 5) //计数{if(shuzi >= 336){shuzi = 0;}else{shuzi = shuzi + 2;}jishu = 0;}else{jishu++;}for(a = 0; a < 64; a++){Display( zimo[a * 2 + shuzi], zimo[a * 2 + shuzi + 1]);}}}/*自定义调整字形宽度*/void Delayus(uint n){uchar a,b;for(b = 0; b < 1; b++)for(a = 0; a < n; a++); }/*显示停留*/void Display_0(){Delayus(10);P0 = 0xff;P1 = 0xff;}/*第1列横向显示程序*/void Display(uchar g, uchar d)P0 =~ g;P1 =~ d;Display_0();}/*初始IO接口状态*/ void init (void) {P1 = 0xff;P0 = 0xff;}。