收藏 分销(赏)

点阵实验报告.doc

上传人:人****来 文档编号:4375160 上传时间:2024-09-14 格式:DOC 页数:31 大小:5.22MB 下载积分:12 金币
下载 相关 举报
点阵实验报告.doc_第1页
第1页 / 共31页
点阵实验报告.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
2016年电子工程专业2014级卓越工程师班 《单片机与微机原理及应用》 课程设计报告 设计题目: 8*8LED点阵设计 专业班级: 电子卓越1401班 学生姓名: 林晓强 学生学号: 5120141478 指导教师: 聂诗良、许超(助教) 答辩日期: 第13周周六上午9点 答辩地点: 综合楼4-311实验室 西南科技大学信息工程学院制 2016年5月 目 录 1、摘要  1 1、1课程设计制作题目及要求 2 2、系统方案设计 2 2、1设计思路 2 2、2总体设计框图 3 3、硬件设计 4 3、1 硬件选型 4 3、2 系统硬件电路原理详图 5 3、2、1复位电路原理图以及时钟电路原理图 5 3、3 实际连线详图 6 3、3、1 8*8LED点阵AD原理图 7 3、3、2 8*8LED点阵AD PCB图 7 3、3、3 8*8LED点阵原理仿真 8 3、3、4 51单片机主控实物图以及原理图 9 4、软件设计 9 4、1 软件功能设计 9 4、2 软件流程设计 10 4、2、1主流程图 10 5、软件调试 11 5、1 单元调试 11 5、1、1 LED点阵模块测试 11 5、2 总体测试 11 6、心得体会 11 7、参考文献 12 附录1 13 附录2 28 8*8LED点阵设计 1摘要 (1) 近年来随着科技得飞速发展,单片机得应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测与自动控制得单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识就是不够得,还应根据具体硬件结构软硬件结合,加以完善。 (2) LED点阵就是由发光二极管排列组成得显示器件, 在我们日常生活得电器中随处可见,极为普通也广为人知。特别就是它得发光类型属于冷光源,效率及发热量就是普通发光器件难以比拟得,它采用低电压扫描驱动,具有: 耗电少、使用寿命长、成本低、亮度高、故障少、视角大、可视距离远、规格品、可靠耐用、应用灵活、安全、响应时间短、绿色环保、控制灵活种等特点。目前LED显示屏作为新一代得信息传播媒体,已经成为城市信息现代化建设得标志。随着社会经济得不断进步,以及LED显示技术得不断完善,人们对LED显示屏得认识将越来越深入,其应用领域将会越来越广。 (3) 经过琢磨,觉得4*4点阵过于简单化,后续显示过程中显示效果有限,只能显示出有限得简单字符效果,表现不够良好。而8*8点阵虽结构较4*4点阵复杂些许,但就是其显示效果叫4*4点阵有了很大提升空间。可以显示比方案一更加复杂良好得字符。动态显示方式就是LED点阵常用得显示方式,动态显示方式动态显示采用扫描得方式工作,由峰值较大得窄脉冲电压驱动,从上到下逐次不断地对显示屏得各行进行选通,同时又向各列送出表示图形或文字信息得列数据信号,反复循环以上操作,就可显示各种图形或文字信息, 1、1课程设计制作题目及要求  用AT89S52单片机控制8*8LED点阵构成任意图形。要求:用8*8LED组合成数字3/2/1加上定时器这样倒计时,然后组合成相应得简单图形。 要求: (1)组成3/2/1字符:用8*8LED点阵64个LED不同得LED亮来组成相应得字符。 (2) 3/2/1字符切换时间为1S:字符切换时间用定时器精确控制。 (3)8*8流水灯:控制LED组合挨个亮灭,流水状。 2、系统方案设计 2、1设计思路 利用AT89S52单片机作为整个控制搭电路得核心,并编制软件程序,在8X8LED点阵上实现 字符得显示很LED灯得随机闪烁显示。 选用如下主要元器件:AT89S52单片机、电阻3K欧、三极管8550、按钮开关、共阳8*8LED点阵显示块。 此设计得时间控制用AT89s52得定时器进行,设定定时器初值为46080,(由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断),记录20次中断标志为1s,用这个控制LED切换时间。 2、2总体设计框图 3、硬件设计 3、1 硬件选型 单片机特点: (1)高集成度,体积小,高可靠性 单片机将各功能部件集成在一块晶体芯片上,集成度很高,体积自然也就是最小得。芯片本身就是按工业测控环境要求设计得,内部布线很短,其抗工业噪音性能优于一般通用得CPU。单片机程序指令,常数及表格等固化在ROM中不易破坏,许多信号通道均在一个芯片内,故可靠性高。 (2)控制功能强 为了满足对对象得控制要求,单片机得指令系统均有极丰富得条件:分支转移能力,I/O口得逻辑操作及位处理能力,非常适用于专门得控制功能。 (3)低电压,低功耗,便于生产便携式产品 为了满足广泛使用于便携式系统,许多单片机内得工作电压仅为1、8V~3、6V,而工作电流仅为数百微安。 (4)易扩展 片内具有计算机正常运行所必需得部件。芯片外部有许多供扩展用得三总线及并行、串行输入/输出管脚,很容易构成各种规模得计算机应用系统。 (5)优异得性能价格比 单片机得性能极高。为了提高速度与运行效率,单片机已开始使用RISC流水线与DSP等技术。单片机得寻址能力也已突破64KB得限制,有得已可达到1MB与16MB,片内得ROM容量可达62MB,RAM容量则可达2MB。由于单片机得广泛使用,因而销量极大,各大公司得商业竞争更使其价格十分低廉,其性能价格比极高。 数字逻辑电路特点: 用数字电路逻辑器件组成控制电路,这样原理简单清楚,但就是调节起来很复杂,需要更改电路结构。 根据设计要求及设计得需要我采用单片机来作为控制手段,选用AT89S52单片机作为该课程设计得核心来对数字信息进行处理及储存。它就是一个低电压,高性能得CMOS 8位单片机,片内含8k bytes得可反复擦写得Flash只读程序存储器与256 bytes得随机存取数据存储器(RAM),器件采用ATMEL公司得高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口,AT89S52可以按照常规方法进行编程,也可以在线编程。 3、2 系统硬件电路原理详图 3、2、1复位电路原理图以及时钟电路原理图 3、3 实际连线详图 3、3、1 8*8LED AD原理图 3、3、2 8*8LED AD PCB图 3、3、3 8*8LED点阵原理仿真电路 3、3、4 51单片机主控实物图以及原理图 4、软件设计 4、1 软件功能设计 利用单片机得定时器产生准确得时钟信号,从而进行时间控制,控制十字路口得红、黄、绿灯交替亮灭。并且使用共阴极四位LED数码管,时刻显示当前路口得红灯或者绿灯还将持续得时间。两个方向得通行时间可用按键进行设置,可以控制路口得红绿灯得持续时间,这样模拟现实中得不同时间段,车流量不同而智能控制时间,这样更加合理得控制路口得通行,提高道路得通行效率,系统得启停与复位也由按键控制。 4、2 软件流程设计 4、2、1主流程图 5、软件调试 5、1 单元调试 5、1、1 显示模块测试 首先在硬件电路上按照要求连接数码管,然后由单片机控制,瞧能否控制LED显示任何组合,测试通过则开始调试LED灯单个控制程序代码,不通过则检查问题,硬件问题或者软件问题。 最后将LED灯组合起来控制,瞧能否达到理论状态,不能则分析原因,就是否程序代码有误还就是硬件焊接,测试完成后,确认无误则进行下一步测试。 5、1、2 LED点阵模块测试 在8*8LED点阵接入电路之后,用万用表得测试通断档检测每个LED就是否能正常工作,点阵电路硬件无误,在软件程序里面测试,每个LED得控制程序都单独检测,如果控制没有问题则检查完成。 5、2 总体测试 在程序搭建完成之后,结合硬件进行最后得测试,用按键控制时间加减,然后观察程序得BUG,做多种尝试,尽量消除完程序存在得BUG,比如时间如果减为0,或者时间加到数码管显示得最大值之后怎么处理,都就是我们程序里面要考虑到得问题,然后检测中断程序控制得 时间与实际时间得差距,尽量调整时间没有差距,这也就是程序控制与实际得结合,达到误差标准之后,然后运行程序,要求时间持续时间长,如果出现问题,那么就要分析问题原因,就是硬件问题还就是软件BUG,将问题处理完之后,作品完成。 6、心得体会 虽然本设计只使用了一块8*8LED点阵,电路简单,但就是已经包涵了LED显示屏得电路基本原理与基本程序,在设计得过程中应该使显示图形与文字稳定、清晰无串扰。图形或文字显示有静止、移入移出等显示方式。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。  在此次设计中通过查阅大量得相关资料,详细了解了LED得发光原理与LED显示屏得原理,了解了LED得现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。  通过这次课程设计,重新复习并进一步学习了AT89S52;熟练掌握了WORD软件得使用。进一步提高了自己在实际设计过程中研究问题、发现问题、解决问题得能力。但就是从中也存在不足之处:对知识得积累还不够,有些问题自己不能够独立解决,对实验操作还要进一步熟练,只有这样才能让自己在不断得学习中提高自己。  在这次课程设计中,我们运用到了以前所学得专业课知识,如:AD制图、汇编语言、模拟与数字电路知识等。虽然过去从未独立应用过它们,但在学习得过程中带着问题去学我发现效率很高,这就是我做这次课程设计得又一收获。  短短两周得课程设计已经结束了,通过这次得课程设计锻炼了我们得实践能力,也就是对我们以后得实际工作能力得具体训练与考察过程。现在就是一个高科技得时代,单片机已经成为当今计算机应用中空前活跃得领域,在生活中可以说就是无处不在得。因此对于我们这一专业得同学来说,学好单片机,并正确应用单片机就是非常重要得。 7、参考文献 [1] 周伟,淮阴师范学院,数学科学学院,《c语言程序设计》课程教学研究,维普期刊资源整合服务平台。 [2] 谭浩强,《c语言程序设计》(第四版),清华大学出版社,北京,2010年。 [3]郭天祥、 十天学会单片机。 [4] 张友德等 单片微型机原理、应用与实验 第五版 上海:复旦大学出版社 2003 附录1 《C语言源程序代码》 #include<reg52、h> #include<stdlib、h> unsigned char table0[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //顺列 unsigned char table00[8]={0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe}; //倒列 unsigned char table1[8]={0xFF, 0xE7, 0xF7, 0xF7, 0xF7, 0xC3, 0xFF, 0xFF}; //显示数字1 unsigned char table2[8]={0xFF, 0xC3, 0xFB, 0xC3, 0xDF, 0xC3, 0xFF, 0xFF}; //显示数字2 unsigned char table3[8]={0xFF, 0xC3, 0xFB, 0xC3, 0xFB, 0xC3, 0xFF, 0xFF}; //显示数字3 unsigned char table4[]={0xFF, 0xFE, 0xDF, 0xFF, 0xFF, 0xF7, 0xFF, 0xBD, //显示各个点 0xFF, 0xFF, 0xF3, 0x4D, 0xFD, 0xD7, 0xFD, 0xBD, //行加点 0xFB, 0xEB, 0xFF}; unsigned char table5[8]={0xFe, 0xFd,0xFb, 0xF7, 0xeF, 0xdF,0xbF, 0x7F} ; //行减点 unsigned char table6[8]={0x80, 0xc0,0xe0, 0xf0, 0xf8, 0xFc,0xFe, 0xFf} ; unsigned char table7[8]={0x01, 0x03,0x07, 0x0f, 0x1f, 0x3f,0x7f, 0xFf} ; //循环矩阵 char a,b,c,d,x; char t2,t3,m; int t1; //定义变量 bit flash_flag; //显示可控数据标志 void delay(unsigned int t)//短时间延时 { char k; while(t--) { for(k=0;k<100;k++); } } void delayus(unsigned int i) //US延时 { while(i--); } void timer_init(void) //定时器初始化 { EA=1; ET0=1; ET1=1; TMOD=0X11; TH0=(65536-46080)/256;// 由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断 TL0=(65536-46080)/256;// 由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断 TH1=(65536-46080)/256;// 由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断 TL1=(65536-46080)/256;// 由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断 TR0=1; TR1=1; PT0=0; PT1=1; } void image1() //显示数字1子函数 { char i; for(i=7;i>=0;i--) { P0=~(table1[i]); P2=table0[i]; delayus(180); } } void image2() //显示数字2子函数 { char i; for(i=7;i>=0;i--) { P0=~(table2[i]); P2=table0[i]; delayus(180); } } void image3() //显示数字3子函数 { char i; for(i=7;i>=0;i--) { P0=~(table3[i]); P2=table0[i]; delayus(180); } } void image4() //显示点与行子函数 { char i,j; int T=5000; // for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[7]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[6]; delayus(T); } for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[5]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[4]; delayus(T); } for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[3]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[2]; delayus(T); } for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[1]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[0]; delayus(T); } // ///////////////////////////////////// for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[0]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[1]; delayus(T); } for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[2]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[3]; delayus(T); } for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[4]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[5]; delayus(T); } for(j=7;j>=0;j--) { P0=~(table5[j]); P2=table0[6]; delayus(T); } for(j=0;j<=7;j++) { P0=~(table5[j]); P2=table0[7]; delayus(T); } // /////////////////////////////////////////// for(j=0;j<=7;j++) { P0=table6[j]; P2=table00[7]; delayus(T); } for(j=0;j<=7;j++) { P0=table7[j]; P2=table00[6]; delayus(T); } for(j=0;j<=7;j++) { P0=table6[j]; P2=table00[5]; delayus(T); } for(j=0;j<=7;j++) { P0=table7[j]; P2=table00[4]; delayus(T); } for(j=0;j<=7;j++) { P0=table6[j]; P2=table00[3]; delayus(T); } for(j=0;j<=7;j++) { P0=table7[j]; P2=table00[2]; delayus(T); } for(j=0;j<=7;j++) { P0=table6[j]; P2=table00[1]; delayus(T); } for(j=0;j<=7;j++) { P0=table7[j]; P2=table00[0]; delayus(T); } // } void flash1() //显示函数调用函数 { if(t1<30) { image3(); } else if(t1>=30&&t1<60) { image2(); } else if(t1>=60&&t1<90) { image1(); } else if(t1>=90&&t1<300) { image4(); } else { t1=0; } } void main() //主函数 { int n,s; timer_init(); while(n<440) { flash1(); n++; } while(1) { x=a+b+c; for(s=0;s<8;s++) { P0=(table0[s]); P2=(table4[x]); delay(50); } } } void trmer0() interrupt 1 //随机数调用函数 { a=(char)(rand()%10); b=(char)(rand()%10); c=(char)(rand()%10); a=(char)(rand()%10); d=(char)(rand()%10); a=(char)(rand()%10); c=(char)(rand()%10); TH0=(65535-10000)/256; TL0=(65536-10000)%256; } void timer1() interrupt 3 //时间变量中断 { m++; if(m=20); { m=0; t1++; } TH1=(65536-46080)/256;// 由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断 TL1=(65536-46080)/256;// 由于晶振为11、0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断 } 附录2 程序模块原理图以及部分实物图
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服