《课程设计LED点阵电子钟.doc》由会员分享,可在线阅读,更多相关《课程设计LED点阵电子钟.doc(18页珍藏版)》请在三一办公上搜索。
1、题目 LED点阵电子钟 任务与要求要求:利用LED点阵制作LED点阵电子钟,滚动显示实时日期(例如:11.04.03)、时间(am 12:42)。设计硬件电路,编写单片机的控制程序,写出设计报告及详细使用说明。 开始日期 2011 年6 月 20 日 完成日期 2011 年6 月23 日 LED点阵电子钟一、设计目的利用LED点阵制作LED点阵电子钟,滚动显示实时日期(例如:11.04.03)、时间(am 12:42)。二、组内分工初定A.何庚裕:负责设计方案的制定,程序设计,在初期书写“设计方案报告书”,在后期协助B同学进行电路的焊接、调试。B.姚劲: 负责元件的采购,电路的焊接和调试。C.
2、李安宏:完善“课程设计报告书”,制作PPT。三、使用电子元件及个数AT89c51单片机1个8*8led点阵2个12M晶振1个导线、电阻、电容若干四、设计方案Led点阵是一种使用广泛的显示工具,利用51单片机控制可以显示出各种文字及图案,这里我们使用点阵屏来显示时钟。根据习惯,时钟一般只显示时和分,因此我们选用两块8*8led点阵来作为显示;而时钟部分,有两个方案:方案一,使用实时时钟芯片DS1302作为时钟,跟单片机通信,获得实时时钟数据,再通过LED点阵显示;优点是时钟精度高,DS1302可以用外部电池供电,使得时间可以连续下去。方案二,使用单片机内部的定时器作为时钟,每次中断秒加一,够60
3、后就置零,分加一,如次类推,实现时钟。为了方便,我们选用51单片机自带的定时功能来作为时钟,但精度不高;优点就是简单。开始采用了方案一,但由于DS1302容易烧坏,所以最后采用的是方案二。4.1 AT89s52单片机图4.1 AT89s52单片机引脚图89s52是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出
4、管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89s5251是一种高效微控制器,89C2051是它的一种精简版本。89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。4.2 8*8LED点阵屏 图4.2 LED点阵内部图一个8*8共阴极LED点阵模块的内部由64个发光二极管组成,每个发光二极管处于行线和列线的交叉点处,如需某一点亮,则对应的列线置低电平,而行线置高电平,亮点组合成显示内容。点阵LED采用扫描显示,可以分为点扫描、行扫描和列扫描3种形式。这次实验我们采用的是列扫描,由P10口控制列,P2和P3口控制行。五、设计方案电路图图5 系统电路图利
5、用Protel制作电路图,由网上资料及亲自测试画出8*8电路原理图,因为手焊,所以制作成反面图,容易连线。六、程序主要内容与流程图开始初始化等待中断处理时间显示时间秒数为50?YesNO显示日期结束入口保护现场够一秒?Yes够60秒?Yes如此类推,分别判断处理时,日,月,年恢复现场,返回图6.1 单片机主程序流程图图6.2 中断程序流程图秒加一分加一NoNo图6.4 显示日期子程序流程图开始读取时的值左屏显示读取分的值右屏显示Flag=second?YesNo显示秒点不显示秒点返回图6.3 显示时间子程序流程图开始保存要当前到38H开始的数据暂存区继续,查表保存Today is 20字符数据
6、到暂存区读取当前年,月,日数据,并查表保存显示数据滚动显示暂存区中数据返回七、课程设计开展情况及总结 图7.1 仿真工作图图7.2 工作前电路图图7.3 工作时电路实验仿真可以,实际电路工作正常,所有功能都能实现,可以显示时钟,可以滚动显示日期,效果很好。八、课程设计总结这次课程设计最大的收获就是培养了我们解决问题的能力,在整个过程中,我们结合了所学的单片机和电路知识,设计出满足课程设计要求的LED点阵电子钟。在进行课程设计的过程中,我们组员分工合作,开始时大家一起合作讨论出设计方案,接着一个负责电路的仿真,一个负责电路的焊接,一个负责设计报告的撰写,不仅加深了对专业知识的理解,也锻炼了我们的
7、团体合作精神。通过本次的课程设计,加深了我们对单片机的理解,使得我们更加熟悉单片机的程序编写。九、单片机系统源程序;= ; Program Name: Led Matrix Clock; Writer: Gun; Function: Display the time and the day ; Last edit time: 2011/6/21 SCAU;=;=定义引脚和数据存储区=SECOND EQU 30HMIN EQU 31HHOUR EQU 32HDAY EQU 33HMON EQU 34H;YEAR EQU 35HFLAG EQU 37H;=ORG 0000H;LJMP MAIN;O
8、RG 001BHAJMP SHIJIAN;ORG 0090H;=主程序=MAIN:;=初始化时间=MOV SECOND,#40H;MOV MIN,#15H;MOV HOUR,#09H;MOV DAY,#22H;MOV MON,#6H;MOV YEAR,#11H;=MOV FLAG,SECOND;Flag用于控制秒点闪烁INC FLAG;MOV P1,#0FFH;关显示MOV P2,#00H;MOV P3,#00H;MOV IE,#88H;设置中断,定时100msMOV TMOD,#10H;设T1工作于模式1MOV 20H,#0AH;重置中断次数,10次即一秒 SETB ET1;允许T1中断SE
9、TB EA;允许CPU中断MOV TH1,#3CH;赋初值MOV TL1,#0B0H;SETB TR1;开中断XS:LCALL DISPLAY;调用显示子程序MOV A,SECOND;CJNE A,#50H,XS;若为50秒即滚动显示日期LCALL DIS_DAY;调用显示日期子程序AJMP XS;循环,等待中断;=中断程序=SHIJIAN:PUSH PSW;保护现场 PUSH ACC;CLR TR1;关中断MOV TH1,#3CH;重新赋初值MOV TL1,#0B0H;DJNZ 20H,RETURN;1s未到,返回MOV 20H,#0AH;够了就重置MOV A,#01H;ADD A,SECO
10、ND;秒加一DA A;MOV SECOND,A;转化为BCD码CJNE A,#60H,RETURN;秒不为60就返回MOV SECOND,#00H;够60就秒置零MOV A,#01;ADD A,MIN;分加一DA A;MOV MIN,A;转化为BCD码CJNE A,#60H,RETURN;分不为60就返回MOV MIN,#00H;够60就置零MOV A,#01H;ADD A,HOUR;时加一DA A;MOV HOUR,A;CJNE A,#24H,RETURN;同上,日处理MOV HOUR,#00H;MOV A,#01H;ADD A,DAY;DA A;MOV DAY,A;CJNE A,#30H,
11、RETURN;同上,月处理MOV DAY,#01H;MOV A,#01H;ADD A,MON;DA A;MOV MON,A;CJNE A,#12H,RETURN;同上,年处理MOV MON,#01H;MOV A,#01H;ADD A,YEAR;DA A;MOV YEAR,A;RETURN:SETB TR1;开中断POP ACC;恢复现场POP PSW;RETI;=显示时间子程序=DISPLAY:MOV R1,#32H;显示时MOV DPTR,#TAB;读表 MOV R3,#0FEH;列控制LCALL DIS1;左屏显示子程序MOV P2,#00H;关显示MOV R1,#31H;显示分MOV D
12、PTR,#TAB; MOV R3,#0FBH;列控制LCALL DIS2;右屏显示子程序MOV P3,#00H;关显示MOV A,SECOND;CJNE A,FLAG,DIS_KONG;若flag与当前的秒相同就显示秒点LCALL DIS_MIAO;显示秒点RET;=左屏显示子程序=DIS1: MOV R2,#6;要显示两位数字共6列MOV B,#3;一位数字3列MOV A,R1;取入口地址R1对应的值MOV R0,#00H;XCHD A,R0;低位存在R0,高位存在ASWAP A;MUL AB;获得对应值表的首地址MOV R4,A;R4暂存D_0:MOV A,R4;MOVC A,A+DPTR
13、;取表数据MOV P2,A;显示INC R4;下一个数据MOV P1,R3;开显示MOV A,R3;RL A;指向下一列MOV R3,A;CJNE R2,#4,D_1;第一位数是否显示完,否就继续MOV A,R0;是就把低位值赋给A查表MOV B,#3;MUL AB;MOV R4,A;D_1:LCALL DELAY;延时MOV P2,#00H;DJNZ R2,D_0; MOV P1,#0FFH;RET;=右屏显示子程序=DIS2: MOV R2,#6;跟左屏功能一样,P2显示换为P3MOV B,#3;MOV A,R1;MOV R0,#00H;XCHD A,R0;SWAP A;MUL AB;MO
14、V R4,A;D_2:MOV A,R4;MOVC A,A+DPTR;MOV P3,A;INC R4;MOV P1,R3;MOV A,R3;RL A;MOV R3,A;CJNE R2,#4,D_3;MOV A,R0;MOV B,#3;MUL AB;MOV R4,A;D_3:LCALL DELAY;MOV P3,#00H;DJNZ R2,D_2; MOV P1,#0FFH;RET;=秒点为空=DIS_KONG:MOV FLAG,A;INC FLAG;RET;=显示秒点子程序=DIS_MIAO:MOV P1,#7FH;显示秒点数据MOV P2,#66H;LCALL DELAY;MOV P2,#00H
15、;MOV P1,#0FEH;MOV P3,#66H;LCALL DELAY;MOV P3,#00H;RET;=显示日期子程序=DIS_DAY:MOV R1,#38H;要滚动的数据存储首地址MOV R0,#32H;保存当前的时LCALL SAVE_DAY;调用保存子程序MOV R1,#00H;保存分割用的字符数据INC R1;MOV R1,#66H;INC R1;MOV R1,#66H; INC R1;MOV R1,#00H;INC R1;MOV R0,#31H;保存当前的分LCALL SAVE_DAY;调用保存子程序;=TODAY IS 20=MOV R2,#28H;保存要显示的字符“Toda
16、y is 20”MOV DPTR,#ZIFU;查表CLR A;DD:MOVC A,A+DPTR;MOV R1,A ;INC R1;CLR A;INC DPTR;DJNZ R2,DD;=年=MOV R0,#35H;保存当前年数据LCALL SAVE_DAY;=分割符=LCALL FG;=月=MOV R0,#34H;保存当前月数据LCALL SAVE_DAY;=分割符=LCALL FG;=日=MOV R0,#33H;保存当前日数据LCALL SAVE_DAY;=滚动显示=MOV P2,#00H;MOV P3,#00H;MOV R2,#01H;MOV R0,#38H;MOV B,#38H;MOV R
17、1,#0FEH; 列控制码MOV R4,#80; 一共n个字,即n*3GD:MOV R5,#20;每次显示次数,控制滚动速度!待添加的隐藏文字内容1MOV R3,#8;扫描一次8列L8:MOV P0,#00H;关显示MOV P2,#00H;MOV A,R0;读取暂存区里的数据MOV P2,A;显示INC R0;指向下一个数据MOV P1,R1;开显示MOV A,R1;RL A;MOV R1,A;指向下一列LCALL DELAY;DJNZ R3,L8;左屏显示完吗?没有就继续MOV P2,#00H;显示完就关左屏显示MOV R3,#8;重置参数MOV R1,#0FEH;L8_1:MOV A,R0
18、;右屏显示INC R0;MOV P3,A;MOV P1,R1;MOV A,R1;RL A;MOV R1,A;LCALL DELAY;FP:DJNZ R3,L8_1;右屏显示完吗?没有就继续MOV R3,#8;显示完就重复MOV P3,#00H;重置参数MOV R1,#0FEH;MOV P0,#00H;MOV R0,B;DJNZ R5,L8;重复完?没有就继续MOV R1,#0FEH;完了就让初值首地址加一MOV A,#38H;即实现了滚动功能ADD A,R2;MOV R0,A;MOV B,R0;INC R2;DJNZ R4,GD;滚动显示MOV R1,#0FEH;RET;=保存日期显示所需数据
19、子程序=SAVE_DAY:MOV DPTR,#TAB;根据入口地址R0查表保存相应的数据MOV R2,#6;按序把个位数的显示数据保存下来MOV B,#3;MOV A,R0;MOV R0,#00H;XCHD A,R0;SWAP A;MUL AB;MOV R4,A;DAY0:MOV A,R4;MOVC A,A+DPTR;MOV R1,A;INC R4;INC R1;CJNE R2,#4,DAY1;MOV A,R0;MOV B,#3;MUL AB;MOV R4,A;DAY1:DJNZ R2,DAY0; RET;=保存分隔符子程序=FG:MOV R2,#3;分隔符共3个数据MOV DPTR,#FEN
20、GE;查表,保存CLR A;DD2:MOVC A,A+DPTR;MOV R1,A;INC R1;CLR A;INC DPTR;DJNZ R2,DD2;RET;=延时子程序=DELAY:; MOV R6,#15;DELY1: MOV R7,#15 DJNZ R7,$ ; DJNZ R6,DELY1 ; RET;=TAB:;数字字符表DB 7EH,81H,7EH;0DB 82H,0FFH,80H;1DB 72H,89H,86H;2DB 4AH,89H,76H;3DB 1CH,12H,0FFH;4DB 4EH,89H,71H;5DB 7EH,89H,72H;6DB 01H,0F9H,07H;7DB 76H,89H,76H;8DB 8EH,51H,3EH;9ZIFU:;要显示的字符表DB 1H,1H,0FFH,1H,1H;TDB 70H,88H,88H,70H;0DB 60H,90H,90H,7EH;DDB 70H,88H,88H,70H,80H;ADB 18H,20H,20H,0F8H;YDB 00H,00H;DB 10H,0FAH,40H;IDB 58H,94H,68H;SDB 00H,66H,66H,00H;:DB 72H,89H,86H;2DB 7EH,81H,7EH;0FENGE:;分隔符数据表DB 10H,10H,10H;END