《专业综合实践》实习报告基于单片机电子琴音乐播放器

上传人:仙*** 文档编号:32713478 上传时间:2021-10-15 格式:DOC 页数:32 大小:502KB
返回 下载 相关 举报
《专业综合实践》实习报告基于单片机电子琴音乐播放器_第1页
第1页 / 共32页
《专业综合实践》实习报告基于单片机电子琴音乐播放器_第2页
第2页 / 共32页
《专业综合实践》实习报告基于单片机电子琴音乐播放器_第3页
第3页 / 共32页
点击查看更多>>
资源描述
CHANGCHUN INSTITUTE OF TECHNOLOGY实 习 报 告实习名称: 专业综合实践 学生姓名: 学院名称: 电气与信息工程学院 专业班级: 电子0841 学 号: 指导教师: 成 绩 评 定考核内容实习表现实习报告实习成果或答辩综合评定成绩成绩2011年7月21日实习纪律要求和成绩考核办法(纪律要求和成绩考核办法在封皮背面打印)1实习必须听从教师指导,严格遵守安全操作规程。不准违规操作,未经指导教师允许不准启动任何非自用设备、仪器、工具等;操作项目和内容必须按实习要求进行,特别要注意防止电烙铁烧烫伤、不用时要及时切断电源。2实习教室内不准吸烟、吃零食,不准带无关人员到实习教室活动,否则扣平时表现分。3参加本次实习时间不足三分之二或旷课3天以上者,不得参加本次考核,按不及格处理。4病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。5实习过程考核和实习成绩在教师手册中要有记载。6实习成绩的考核由指导教师根据实习表现(出勤、遵守纪律情况等)、实习报告、实习成果、现场操作、口试或笔试等几个方面,给出各项成绩或权重,综合后给出实习总成绩。该实习经考核教研室主任审核,主管院长审批备案。7成绩评定采用五级分制,即优、良、中、及格、不及格。8实习结束一周内,指导教师提交实习成绩和实习总结。实习报告要求实习报告内容、格式各专业根据实习类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。注意: 1实习任务书和实习指导书在实习前发给学生,实习任务书放置在实习报告封面后和正文目录前。2为了节省纸张,保护环境,便于保管实习报告,统一采用A4纸,实习报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。专业综合实践实习报告1、 实习目的与意义 单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。它的应用必定导致传统的控制技术从根本上发生变革。因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。专业综合实训切实培养学生的动手能力,理论联系实际,将知识用到实处。 电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文的主要内容是用AT89C2051单片机为核心控制元件,设计一个电子琴。以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有10个按键和扬声器。 本文主要对使用单片机设计简易电子琴电子时钟进行了分析,并介绍了基于单片机电子琴统硬件组成。利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。本系统是简易电子琴的设计,按下键盘中的按键会使扬声器播放对应的音符。通过功能切换键,可以切换到播放音乐,所以具有电子琴音乐播放器两种功能。二、实习内容(一)八按键简易电子琴的设计制作1.功能分析和方案论证说明(1)功能分析 采用AT89C2051CPU,设计时钟电路和复位电路,上电复位和手动复位,3V供电(2节电池);PCB尺寸:长宽=12cm6cm,单面板。具有电子琴输入按键8个,包含17和高音1。具有手动复位键1个,播放音乐和弹奏切换功能按键1个,在PCB图上标注“复位”、“功能切换”字样。有发光二极管显示程序运行状态(用1个发光二极管指示对应的1个按键,实际是8个发光二极管,只用1个代表)。采用扬声器输出声音信号。实现电子琴功能并且至少有一首存储歌曲,存储歌曲不能雷同。(2) 方案论证说明 本方案采用AT89C2051作为中心控制器,通过定时器,给它赋不同的初值,当定时器记满时对一个I/O口取反,产生方波,由于所赋初值不同,所以可以产生不同频率的方波,音乐中,有7个基本音符:doremifasolasi,七个不同的音符对应着不同的频率。只要我们对照音符输出相对应的频率,就可以产生美妙的音乐了。用单片机产生的音频脉冲直接驱动扬声器并不能产生所要实现的音乐,因为它没有足够的驱动能力,这就需要音频功率放大电路,本例使用三极管S9012实现音频功放电路。根据功能要求只产生8个音符按键较少,所以采用独立式键盘,题目要求一个发光二极管显示上电,一个表示程序运行状态,本设计采用LED发光二极管表示。对于播放音乐和弹奏切换功能按键,采用外部中断来实现。系统的电路结构组成框图如图一:功能选择弹奏/播放上电复位 按键复位 51单片机 AT89C20518键独立键盘扬声器驱动音频LED状态灯 图一AT89C2051单片机是AT89C51系列中结构最紧凑,体积最小的单片机,它的片内有2k字节闪烁存储器,管脚封装为20引脚,与8751相比只去掉P0口、P2口,片内多一个模拟电压比较器。用它设计产品,外围元器件少,接口技术简单,缩小电路板面积,成本低,开发容易,可广泛应用于小型简单不需很多I/O口控制的各种智能产品设计,指令与MCS-51芯片兼容,内含2k字节的可反复电气烧录及擦除内存,工作电压2.7V至6V,工作频率最高至24 MHz,内含128字节RAM,15条可编程控制I/O线,一个模拟电压比较器,现已得到开发人员广泛认可。2.电路原理设计和PCB设计(1)电路原理设计电路设计使用Altium Designer summer 08软件进行设计复位电路采用一个电容与一个电阻串联,电容再与按键并联来实现上电复位,也能手动复位,具体见图二: 图二晶振电路采用外部晶振,两个电容并联,再将12MHZ晶振放在中间,见图三: 图三键盘电路采用独立式键盘,将P1口作为键盘扫描接口,按键一端接地一端接P1口,P3.4作为音频输出端口,P3.7作为程序运行发光二极管显示输出端口,见图四:图四 系统的完整原理图请见附录一(2) PCB设计 焊盘内径是0.81.0mm,外径是3.0mm3.5mm,普通线宽是1.3mm1.5mm ,电源线宽度比普通线要加宽(不小于2mm),线与线的安全间距为0.5mm左右,三极管管脚间距45mm,三个角做成三角形,尽量不做成一排;电阻焊盘间距1012mm,电容焊盘间距46mm,焊盘直径大小均在3.03.5mm(或140160mil),AT89C2051两排管脚间距为7.62mm,每排各管脚间距为2.54mm,其管脚焊盘做成运动场型(椭圆形),长:X=3.5mm(长34mm),宽:Y=2mm;按键66mm,焊盘直径不小于3.03.5mm (或140160mil),二极管管脚间距45mm,焊盘大小参考电阻,元件标称不要;采用底层布线(蓝色线),电源标出“+”,“-”极,靠边并排引出,采用方形焊盘,并增大面积,正负极之间距离为810mm,元件名称不能放在连线上,即不能名称与铜线相交,焊盘采用椭圆形或圆形,以增加焊盘的牢固性;焊盘最好不要采用方形,对于独立的焊点或焊点在直角处,应增大焊盘覆铜面积,几个焊点相连的也可以设计成岛型,线条尽可能不要相接成直角、丁字形或锐角,少拐弯,走线要尽可能水平或垂直,同一性能的线条粗细均匀。经过耐心的摆放器件,对个参数进行设置,底层自动布线,做出的板子小于126cm,所以满 足题意,PCB图如图五,打印预览见图六:图五 图六3.软件设计与调试(1)音调的产生 音乐的产生需要不同频率的音频脉冲,对于单片机而言,可以利用它的定时/计数器产生这样的方波频率信号。在本设计中,单片机工作在12MHz时钟频率下,其时钟周期为1us,因此可以利用AT89C2051的内部定时/计数器T0/T1,使其工作模式为1,根据对应音符的不同频率求出计数器的初值T(即是TH0和TL0的值),则TH0=T/256,TL0=T%256。C调各音符频率与计数值T的对照如下表3-1所示。表3-1 C调各音符频率与计数值T的对照表音符频率(Hz)简谱码(T)十六进制码音符频率(Hz)简谱码(T)低1D026263628#4FA#74064860#1D0#27763731中5SO74864898FD82低2RE29463835#5S0#83164934#2RE#31163928中6LA88064968FDC8低3M33064021#6LA#93264994低4FA34964103中7S198865030FE06#4FA#37064185高1DO104665058FE22低5SO39264260#DO#110965085#5S0#41564331高2RE117565110低6LA44064400#2RE#124565134#6LA#46664463高3M131865157低7S149464524高4FA139765178中1DO52364580FC44#4FA#148065198#1D0#55464633高5SO156865217中2RE57864684FCAC#5SO#166165235#2RE#62264723高6LA176065252中3M65964777FD09#6LA#186565268中4FA69864820FD34高7SI196765283 电子琴的弹奏程序采用查找表来实现,根据键盘扫描的不同键值,查找出产生不同频率的相应定时器的初值,由于是采用工作模式一,分高低位,按字节排放,TH放在前,TL放在后,程序如下:START: MOV R0, P1 MOV A,32H JNZ INT CJNE R0,#0FFH,KEY1 ;键盘扫描 SETB P3.7 CLR TR0 SJMP STARTKEY1: MOV R1,#0 MOV A,R0 CPL ALOOP: CJNE A,#01H,REL SJMP FUREL: RR A INC R1 SJMP LOOPFU: MOV A,R1 MOV B,#2 MUL AB MOV R2,A MOV DPTR,#TABLE MOVC A,A+DPTR MOV 30H,A MOV A,R2 INC A MOVC A,A+DPTR MOV 31H,A SETB TR0 CLR P3.7 LJMP STARTINT_T0: ;T0中断服务程序 MOV TH0,30H ;定时器赋初值高位 MOV TL0,31H;定时器赋初值低位 CPL P3.4 ;输出方波 RETITABLE:DB 0FCH,44H,0FCH,0ACH,0FDH,09H,0FDH,34H DB 0FDH,82H,0FDH,0C8H,0FEH,06H,0FEH,22H(2)音乐节拍的产生节拍是指音乐持续的长短,是除音符之外音乐的另一关键组成部分,在单片机系统中可以通过延时来实现。如果1/4拍的延时设为0.2s,则1拍的时间为0.8s,依次类推,可以求出其余节拍的值,节拍的延时时间与音乐的曲调值有相对应的关系,下面为不同曲调下的1/4和1/8节拍的时间设定,如下表3-2所示。表3-2 不同曲调下1/4和1/8节拍的延时表曲调值(1/8节拍)delay(ms)曲调值(1/4节拍)delay(ms)调4/462调4/4125调3/494调3/4187调2/4125调2/4250 本设计播放的歌曲曲调是4/4,所以延时程序是125msDELAY:MOV R7,#02H ;4/4曲调,演示125ms子程序 DELA1:MOV R6,#125 DELA2:MOV R5,#248 DJNZ R5,$ DJNZ R6,DELA2 DJNZ R7,DELA1 DJNZ R4,DELAY RET(3)程序结构开始初始化程序 开中断判断32H中值?=1Y8键盘扫描弹奏音乐是否有键按下外部中断切换32H中的值判断32H中值?=1NYN播放音乐二极管发光扬声器 首先是初始化程序,初始化堆栈段,清零存放定时器高低位的初始值,开中断,键盘扫描等待中断,等待键盘操作,外部中断零进行弹奏/播放音乐进行切换,播放音乐时也是采用查表法,TABLE1中存放的是不同音符对应的定时器初值,按照TABLE1列表,将歌谱翻译成两位十六进制代码,高位表示音符(就是指该音符在TABLE1中的位置),低位表示节拍(即延时的长度)。程序流程图见图3-1(4) 仿真结果 使用Keil编译软件用来编程,调试,生成.HEX文件。源程序代码见附录二 。使用Proteu软件画硬件电路原理图将生成.HEX文件加载到硬件电路上进行仿真。 4.硬件调试和存在的问题 由于电路比较简单,焊接的也比较顺利,将硬件做好后,将生成的.HEX文件通过串口下载到AT98C2051进行测试,效果比较满意。 (二)基于AT89C2051的智能数字电子钟设计1.功能分析和方案论证说明(1)功能分析全日历计时。12/24小时转换。大、小月,润年,周,自动追踪。具有时间校准功能开关K,按住开关2秒钟后进入校准时间状态及换档和退出,快速点触用于调整时间数值。PCB尺寸:长宽=10cm8cm,可以比要求小,双面板。(2) 方案论证说明本方案采用AT89C2051作为中心控制器,使用五位LED七段数码管显示时间,8路定时时间查询按下K1键依此显示8路定时时间。星期位显示:“H”表示:打开当前定时输出;“L” 表示:关闭当前定时输出。此时按K2键可进行“H”、“L”的切换。所有输出,均由蜂鸣器输出!显示状态的控制,按下K2键可进入以下工作状态:12小时/ 日月交替显示。12小时固定显示。24小时/ 日月交替显示。)24小时固定显示。校时,按下K2键3S后,进入校时菜单。按下K1键依次进入校时状态:分、时、天、月、年、微调系数。此时按K2键,完成+1。当显示“d”时,表示要调整微调系数(0-99),其值越小,时钟走时越慢。当使用的6MHz的晶振偏差大时,应仔细调整微调系数!当显示“out”时,按K2键,即可退出!退出后,按任意键即可启动时钟。设置定时时间按下K1键3S后,进入设置菜单。按下K1键依次进入8路定时调整状态:时、分。此时按K2键,完成+1。当显示“out”时,按K2键,即可退出2. 电路原理设计和PCB设计(1)电路原理设计电路设计使用Altium Designer summer 08软件进行设计.显示电路设计图2-1:图2-1闹钟电路图2-2:键盘电路图2-3: 图2-2 图2-3 电子钟的系统原理图见图2-4:(2) PCB设计PCB图如图2-5,打印预览见图2-6:图2-5图2-63. 软件设计与调试程序结构流程图见图2-7: 仿真结果: 使用Keil编译软件用来编程,调试,生成.HEX文件。源程序代码见附录三 。使用Proteu软件画硬件电路原理图将生成.HEX文件加载到硬件电路上进行仿真三、实习总结专业综合实训是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 电子琴设计,对于我们这些工科学生来说,这是一次考验。因为对于音乐的相关知识了解很少,而且怎么才能找到课堂所学与实际应用的最佳结合点?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,对于声音的产生有了彻底的了解,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法。通过这专业综合实训使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,切实培养自己的动手能力和独立思考的能力。实训中学会了制版的整个流程,也学会了其中要注意的很多问题,比如焊盘的大小,线宽的设置,怎么进行单层布线,怎么设置线间安全距离。在设计PCB中也遇到一些困难,比如电源线的加宽,设计要求中要求电源线要比一般的线宽,一开始用手动将自动布线后的电源线手动加宽,这样既麻烦又有可能出现线离太近或者相交,出现错误。经过查阅资料和同学们的相互讨论知道可以通过新建一个布线宽度规则,对地线电源线设置线宽,再自动布线,这样布线既方便有正确。而后又进行了基于AT89C2051的智能数字电子钟设计,这个设计电路很简单,但是软件编程很复杂,因为它涉及到8路不同的定时器。不过经过查阅资料这些问题都得到了解决。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成了。4、 主要参考文献1 谢嘉奎.电子线路.高等教育出版社,2002 2 胡汉才.单片机接口技术与运用.清华大学出版社,20014 何立民.单片机高级教程.北京航空航天大学出版社,2001 5 李广第.单片机基础.北京航空航天大学出版社,1999 6 黄明强.DS1302在单片机系统中的应用J.保定师范专科学校学报,2004,17(2)7 邓红,张越编著.单片机实验与应用设计教程M.冶金工业出版社2004.58 孙安青编著. AT89S51单片机实验及实践教程M附录一:附录二:电子琴源程序:ORG 0000H LJMP MAIN ORG 0003H LJMP INT0 ORG 000BH LJMP INT_T0 ORG 001BH LJMP TIME1 ORG 0100HMAIN: MOV SP,#60H ;初始化堆栈指针 MOV 30H,#00 ;定时器初值清零 MOV 31H,#00 MOV 32H,#00 MOV P1,#0FFH ;设置P1口为输入模式 MOV TMOD,#11H ;设置定时器0为工作模式1 SETB EX0 SETB IT0 SETB ET0 ;开定时器0中断 SETB ET1 SETB EA ;开总中断 CLR TR1 CLR TR0 ;关闭定时器0START: MOV R0, P1 MOV A,32H JNZ INT CJNE R0,#0FFH,KEY1 ;键盘扫描 SETB P3.7 CLR TR0 SJMP STARTINT0: PUSH ACC MOV A,32H JNZ CLR1 MOV 32H,#1 SJMP OVERCLR1: MOV 32H,#0OVER: POP ACC RETIKEY1: MOV R1,#0 MOV A,R0 CPL ALOOP: CJNE A,#01H,REL SJMP FUREL: RR A INC R1 SJMP LOOPFU: MOV A,R1 MOV B,#2 MUL AB MOV R2,A MOV DPTR,#TABLE MOVC A,A+DPTR MOV 30H,A MOV A,R2 INC A MOVC A,A+DPTR MOV 31H,A SETB TR0 CLR P3.7 LJMP STARTINT_T0: ;T0中断服务程序 MOV TH0,30H ;定时器赋初值 MOV TL0,31H CPL P3.4 ;输出方波 RETITABLE:DB 0FCH,44H,0FCH,0ACH,0FDH,09H,0FDH,34H DB 0FDH,82H,0FDH,0C8H,0FEH,06H,0FEH,22HINT: MOV 40H,#00H ;设简谱码指针初始值NEXT: MOV A,32H JZ STOP CLR P3.7 MOV A,40H ;简谱码指针暂存累加器A MOV DPTR,#TABLE2 ;设简谱码 MOVC A,A+DPTR CJNE A,#00H,PLAY ;取到的简谱码不是结束码,传PLAY取节拍码 LJMP STOP ;皇墙崾耄顺?PLAY: MOV R3,A ;R1暂存简谱码 ANL A,#0FH ;取节拍码 MOV R4,A ;节拍码暂存R2 MOV A,R3 ANL A,#0F0H ;取音符码 CJNE A,#00H,MUSIC ;音符码不为0,调发音子程序 CLR TR1 ;音符码为0,不发音 LJMP DELMUSIC:SWAP A DEC A MOV 22H,A ADD A,22H MOV R1,A MOV DPTR,#TABLE1 ;取相应计数值 MOVC A,A+DPTR MOV TH1,A ;暂存高位字节 MOV 21H,A MOV A,R1 INC A MOVC A,A+DPTR ;取相应计数值的低位字节 MOV TL1,A ;暂存低位字节 MOV 20H,A SETB TR1 ;启动定时器DEL: LCALL DELAY INC 40H ;指向下一个简谱码 LJMP NEXTSTOP: CLR TR1 ;停止计时器 LJMP STARTTIME1:PUSH ACC ;现场保护 PUSH PSW CPL P3.4 ;P1.7反相输出,演奏音乐 MOV TL1,20H ;重设计数值 MOV TH1,21H POP PSW POP ACC RETIDELAY:MOV R7,#02H ;4/4曲调,演示125ms子程序DELA1:MOV R6,#125DELA2:MOV R5,#248 DJNZ R5,$ DJNZ R6,DELA2 DJNZ R7,DELA1 DJNZ R4,DELAY RETTABLE1:DW 64524,64580,64684,64777 ;简码值 DW 64820,64898,64968,65030,65058 DW 64400,64260TABLE2:DB 14H,42H,62H,98H ;歌曲送别 DB 74H,92H,72H,68H DB 64H,22H,32H,44H,32H,22H DB 3CH DB 64H,42H,62H,94H,04H,82H DB 74H,94H,68H DB 64H,32H,42H,54H,04H,12H DB 2CH DB 74H,94H,98H DB 84H,72H,82H,98H DB 72H,82H,92H,72H,72H,62H,42H,22H DB 3CH DB 64H,42H,62H,94H,04H,82H DB 74H,94H,68H DB 64H,32H,42H,54H,04H,12H DB 2CH DB 42H,62H,72H,41H,61H,41H,31H,22H,0B2H;歌曲三个和尚 DB 62H,61H,61H,71H,61H,41H,64H DB 0B2H,0B2H,62H,61H,61H,71H,61H,41H,64H DB 0B2H,0B2H,62H,61H,61H,71H,61H,41H,64H DB 42H,62H,72H,41H,61H,41H,31H,22H,0B2H DB 22H,31H,41H,31H,21H,0A2H,0B4H DB 22H,31H,41H,31H,21H,0A2H,0B4H DB 22H,31H,41H,31H,21H,0A2H,0B4H DB 0A2H,21H,32H,42H,62H,61H,41H,62H,71H DB 42H,41H,61H,42H,32H,22H,31H,21H,0A2H DB 42H,41H,61H,42H,32H,22H,31H,21H,0A2H DB 42H,41H,61H,42H,32H,22H,31H,21H,0A2H DB 62H,61H,42H,62H,71H,61H,72H,62H,71H DB 62H,61H,71H,32H,42H,64H DB 00H END附录三:电子时钟源程序代码:fl_250ms bit 00hfl_500ms bit fl_250ms+1set_clk_f bit fl_500ms+1set_al4_f bit set_clk_f+1am_f bit set_al4_f+1fl_3s bit am_f+1al1_f bit fl_3s+1al2_f bit fl_3s+2al3_f bit fl_3s+3al4_f bit fl_3s+4set_over bit al4_f+1 ha_f bit set_over+1ha_over bit ha_f+1fl_ms_f bit ha_over+1fl_s_f bit fl_ms_f+1 key_over bit fl_s_f+1key_data equ 08htimers equ key_data+1t_30ms equ timers+1t_20ms equ t_30ms+1t_1s equ t_20ms+1k1_data equ t_1s+1k2_data equ k1_data+1stat_work equ k2_data+1stat_led equ stat_work+1t_1ms equ stat_led+1t_20m equ t_1ms+1 beep equ t_20mal1 equ beep+1al2 equ beep+2al3 equ beep+3al4 equ beep+4al5 equ beep+5al6 equ beep+6al7 equ beep+7al8 equ beep+8ret_timer equ al8+1sec equ 23hmin equ sec+1hhour equ min+1hday equ hour+1hmon equ day+1hyear equ mon+1hw_adj equ year+1h week equ w_adj+1hal1_h equ week+1hal1_m equ al1_h+1hal2_h equ al1_m+1hal2_m equ al2_h+1hal3_h equ al2_m+1hal3_m equ al3_h+1hal4_h equ al3_m+1hal4_m equ al4_h+1hal5_h equ al4_m+1hal5_m equ al5_h+1hal6_h equ al5_m+1hal6_m equ al6_h+1hal7_h equ al6_m+1hal7_m equ al7_h+1hal8_h equ al7_m+1hal8_m equ al8_h+1hbeep_t equ al8_m+1frist equ beep_t+1led1 equ frist+1led2 equ led1+1led3 equ led2+1led4 equ led3+1led5 equ led4+1sp_data equ led5+1led_1 bit p3.5led_2 bit p3.4led_3 bit p3.3led_4 bit p3.2led_5 bit p3.1beep_f BIT P3.7key_f bit p3.0t_h_100ms equ 05dh ;100 ms for 12MHzt_l_100ms equ 07fh ;c6 for 100ms timer_no equ 8d ;3c90+30d=3cb0hw_adj_dat equ 50dkey_da equ 00000110bblk_led equ 20d dot_led equ 21d f_led equ 22d n_led equ 23d u_led equ 24d t_led equ 25d b_led equ 26d d_led equ 27d ORG 0000H; ;SJMP start ORG 0003H; ;reti;ORG 000BH ;ajmp t0reti ;ORG 0013H reti ;ORG 001BH ;aJMP T1 ;ORG 0023H ;RETI; AJMP RS_485 ;start: call clr_ramMOV SP,#sp_data ;call int_t0call timer_intcall timer_20msSTAR_BI:call clock call week_autocall al_outCALL KEY_bordcall key_del call set_clk_alcall key_jmp call rebackcall led_jmpsjmp star_bi reback:mov a,stat_workjz reback_endjb al1_f ,ka1mov ret_timer,secsetb al1_f sjmp reback_endka1: mov a,ret_timeradd a,#05dmov b,#60ddiv abmov a,seccjne a,b,reback_endclr al1_fmov stat_work,#00dreback_end:retkey_jmp:mov a,key_datajz key_jmp_end mov ret_timer,seccjne a,#01d,kk1mov a,stat_workinc a ;k1_keycjne a,#9d,kka1mov a,#00dkka1: mov stat_work ,asjmp key_jmp_end kk1:mov a,stat_work ;k2_keyjnz kk2mov a,stat_ledinc acjne a,#05d,kka2mov a,#00dkka2:mov stat_led,asjmp key_jmp_endkk2:acall all1cpl amov r0,akey_jmp_end:retall1:mov r0,#al1mov a,stat_workdec aadd a,r0mov r0,amov a,r0retled_jmp:mov stat_work,#01dmov stat_tw,#01d mov a,stat_workjnz led_al1mov a,stat_ledacall led_t_d mov led1,weeksjmp led_jmp_endled_al1:acall all1mov led1,#f_ledjnz le_t2mov led1,#n_ledle_t2:jb fl_250ms ,le_t4mov led1,#blk_ledle_t4:acall al_led led_jmp_end:acall ledrettime_24:mov a,houracall bcd_8mov led2,ajnz tim4mov led2,#blk_ledtim4:mov led3,bjb fl_500ms,tim1mov a,badd a,#10dmov led3,a tim1: acall led_mintime_12_end:retled_min:mov a,minacall bcd_8jb fl_500ms ,tim2add a,#10dtim2: mov led4,amov led5,bretdate_led:mov a,monacall bcd_8mov led2,ajnz da1mov led2,#blk_ledda1: mov a,badd a,#10dmov led3,amov a,dayacall bcd_8mov led4,ajnz da2mov led4,#blk_ledda2: mov led5,bdate_led_end:retBCD_8: MOV B,#10DDIV ABRETLED: mov p1,#0mov dptr,#led_ascmov a,led1movc a,a+dptrmov p1,aclr led_1acall timer_1msacall timer_1ms;acall timer_1ms;acall timer_1ms;acall timer_1mssetb led_1led_led2:mov a,led2movc a,a+dptrmov p1,aclr led_2acall timer_1mssetb led_2;*led3 led_led3:mov a,led3movc a,a+dptrmov p1,aclr led_3acall timer_1mssetb led_3;*led4 led_led4:mov a,led4movc a,a+dptrmov p1,aclr led_4acall timer_1mssetb led_4;*led5 led_led5:mov a,led5movc a,a+dptrmov p1,aclr led_5acall timer_1mssetb led_5;* led_end:mov p1,#0ret;*; bafhcdeg led_asc:db 11101110B;0db 10001000B;1db 11000111B;2db 11001101B;3db 10101001B;4db 01101101B;5db 01101111B;6db 11001000B;7db 11101111B;8db 11101101B;9db 11111110B;0. =10ddb 10011000B;1.db 11010111B;2.db 11011101B;3.db 10111001B;4.db 01111101B;5.db 01111111B;6.db 11011000B;7.db 11111111B;8.db 11111101B;9.DB 00000000B;BLACK=20dDB 00010000B;dot=21dDB 00100110b;l=22ddB 10101011B;h=23dDB 10101110B;u=24dDB 00100111B;t=25ddB 00101111B;b=26ddB 10001111B;d=27d; bafhcdeg ;*;delay;*timer_1ms:mov t_1ms,#030hr2_1: djnz t_1ms , r2_1 rettimer_20ms:mov t_20m,#050dr2_2: call clockcall leddjnz t_20m , r2_2 call week_autocall al_outret;if monweek=mod(5/4*year+mon_asc(mon)+day-1)/7;else; gs2=week=mod(5/4*year+mon_asc(mon)+day)/7week_auto: mov a,YEARmov b,#05mul abmov r4,bmov r5,amov r7,#04call mul_2MOV DPTR,#MON_ASCMOV A,MONdec aMOVC A,A+DPTRADD A,r3;*MOV B,DAYADD A,Bmov r3,a;r3=gs2;*jb mon=2 *MOV A,MONCJNE A,#02D,WEEK_1SJMP WEEK_2WEEK_1:JC WEEK_2week_3: mov a,r3mov b,#07div abmov a,bsjmp week_4WEEK_2:;*jb year=4N *mov a,yearmov b,#04div abmov a,bjnz week_3mov a,r3dec amov b,#07div abmov a,b week_4:MOV WEEK,ajnz week_endmov week,#07hweek_end: RETMON_ASC:DB 6d, 2d, 2d, 5d, 0d, 3d, 5d, 1d, 4d, 6d, 2d, 4d ;2002.5.5;r4r5/r7=r3mul_2:D457: CLR CMOV A,R4SUBB A,R7JC DV50SETB OV RETDV50: MOV R6,#8 ;;求平均值(R4R5R7R3)DV51: MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV F0,CCLR CSUBB A,R7ANL C,/F0JC DV52MOV R4,ADV52: CPL CMOV A,R3RLC AMOV R3,ADJNZ R6,DV51MOV A,R4 ;;四舍五入ADD A,#0;R4JC DV53SUBB A,R7JC DV54DV53: INC R3DV54: CLR OVRET;*clr_ram:MOV R7,#78h ;MOV R0,#0bH ;CLR A ;CR: INC R0 ;MOV R0,A ;djnz r7,cr ;CLR RAMret;* INT_CTRLint_t0:setb et1MOV TMOD,#00010001b ;mov w_adj,#w_adj_datsetb ea
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!