基单片机音乐盒设计
摘设计基AT89C51系列单片机音乐盒单片机技术原理通硬件电路制作软件编译设计制作出功功音乐盒该音乐盒键电路复位电路时钟电路蜂鸣器组成两键控制音乐盒切换歌曲切换8路LED变化花样音乐盒两首歌曲花样灯花样计3种播放歌曲时蜂鸣器发出某音调应LED亮起设计利KEIL编程软件音乐盒源程序进行编程调试配合PROTEUS仿真软件硬件进行仿真调试节约设计时间
关键字音乐盒AT89C51单片机 KEIL PROTEUS 音调
目 录
引言 1
1概述 2
11 课题意义 2
12设计方案 2
13研究容 2
2 系统总体方案介绍 3
21 系统组成框图 3
22 音乐盒功结构图 3
23 设计软件介绍 3
231 PROTEUS软件简介 3
232 KEIL简介 4
3硬件设计 5
31 总体设计框图 5
32部分硬件设计原理 5
321 AT89C51简介 5
322 LED显示电路设计原理 6
323 时钟振荡电路 6
33 硬件电路图功 6
4软件设计 8
41音调节拍编码确定方法 8
411 音调确定 8
412 节拍确定 9
413 编码 10
42 软件程序设计 11
421 程序流程图相应代码块 11
422 程序源代码(见附录A) 15
5调试 16
51 检查硬件连接 16
52 检查软件系统 16
53 测试结果 16
531.总体运行图 16
532.花样灯3种花样图 17
6 总结 18
致谢 19
参考文献 20
科技外文文献 21
中文译文 24
附录A 程序源代码注释 26
引言
21世纪电子技术获飞速发展推动现代电子产品渗透社会领域力推动社会生产力发展社会信息化程度提高时现代电子产品性进步提高产品更新换代节奏越越快
目前单片机正着高性品种方发展趋势进步着CMOS化低功耗体积容量高性低价格外围电路装化等方面发展单片机应重意义根改变传统控制系统设计思想设计方法前必须模拟电路数字电路实现部分功现已单片机通软件方法实现种软件代硬件控制技术称微控制技术传统控制技术次革命单片机渗透生活领域难找领域没单片机踪迹导弹导航装置飞机种仪表控制计算机网络通讯数传输工业动化程实时控制数处理广泛种智IC卡民豪华轿车安全保障系统录机摄机全动洗衣机控制程控玩具电子宠物等等离开单片机
着科学技术进步社会发展类接触信息断增加日益复杂面浩烟海信息已够利计算机等工具高效准确进行处理想处理完信息时清晰传递必须通寻求更加卓越显示技术实现单片机技术液晶显示技术结合信息传输交流着智视化方迅速发展
着类社会发展视觉听觉方面享受提出越越高求音乐盒带美回忆提高精神文化享受传统音乐盒机械型体积笨重发音单调实现批量生产文设计音乐盒单片机核心元件电子式音乐盒体积重量轻演奏旋音乐功外观效果彩方便具定商业价值
1概述
设计AT89C51芯片电路基础外部加放音设备实现音乐演奏控制器硬件电路通软件程序控制单片机部定时器演奏出优美动听音乐户喜选择音乐转化成机器码存入单片机存储器中型号单片机需相应改变址该软硬件系统具通性高实际价值广单片机音乐爱者提供鉴
11 课题意义
音乐盒起源追溯中世纪欧洲文艺复兴时期时教会钟塔报时钟表装机械装置称发出声音组钟音乐盒着300年发展历史类文明发展历史见证
传统音乐盒机械音乐盒工作原理通齿轮带动带铁钉铁桶转动铁桶铁钉撞击铁片制成琴键发出声音机械式音乐盒体积较较笨重发音单调水灰尘等外素容易部金属发音条变形造成发音跑调外机械音乐盒放音时音色稳定必须放动摇价格昂贵实现批量生产
文设计音乐盒基单片机设计制作电子式音乐盒传统机械式音乐盒相更巧音质更优美演奏弦音乐电子式音乐盒动力源电池制作工艺简单进行批量生产价格便宜基单片机制作电子式音乐盒控制功强根需选歌方便根存储容量存储歌曲外设计彩灯外观效果音乐盒功更加丰富
12设计方案
设计基AT89C51系列单片机音乐盒利键切换演奏出乐曲蜂鸣器发出某音调相应LED亮起两键切换歌曲切换八路LED变化花样
13研究容
1)电路两种工作模式:演奏音乐模式花样灯模式
演奏音乐模式:演奏完整首歌曲八路LED着音乐变化
花样灯模式:八路LED变化出种花样蜂鸣器着发出嘀嘀声
2)键1进入演奏音乐模式切换歌曲两首歌曲
3)键2进入花样灯模式切换LED花样三种花样
电路程序占1K左右编制更音乐LED花样系统功更加强
2 系统总体方案介绍
21 系统组成框图
音乐盒系统结构AT89C51单片机位控制核心加2键时钟复位电路蜂鸣器LED模块组成单片机负责接收键输入根输入控制音乐播放曲目音乐花样灯显示样式蜂鸣器发音系统组成框图图21示
图21 系统组成框图
22 音乐盒功结构图
音乐盒功结构图22示Key1负责切换播放歌曲播放歌曲2首分挥着翅膀女孩寂寞沙洲冷Key2负责切换LED显示花样显示花样3种第种序显示第二种两边中间移动然两边移动第三种循环显示
图22 音乐盒功结构图
23 设计软件介绍
设计利KEIL编程软件音乐盒源程序进行编程调试配合PROTEUS仿真软件硬件进行仿真调试两种软件简介:
231 PROTEUS软件简介
Proteus软件英国Labcenter electronics公司出版EDA工具软件(该软件中国总代理广州风标电子技术限公司)仅具EDA工具软件仿真功仿真单片机外围器件目前仿真单片机外围器件工具然目前国推广刚起步已受单片机爱者事单片机教学教师致力单片机开发应科技工作者青睐Proteus世界著名EDA工具(仿真软件)原理图布图代码调试单片机外围电路协仿真键切换PCB设计真正实现概念产品完整设计目前世界唯电路仿真软件PCB设计软件虚拟模型仿真软件三合设计台处理器模型支持8051HC11PIC101216182430DsPIC33AVRARM8086MSP430等2010年增加CortexDSP系列处理器持续增加系列处理器模型编译方面支持IARKeilMPLAB等种编译器
232 KEIL简介
单片机开发中必硬件外样离开软件写汇编语言源程序变CPU执行机器码两种方法种手工汇编种机器汇编目前已极少手工汇编方法机器汇编通汇编软件源程序变机器码MCS51单片机汇编软件早期A51着单片机开发技术断发展普遍汇编语言逐渐高级语言开发单片机开发软件断发展Keil软件目前流行开发MCS51系列单片机软件年仿真机厂商纷纷宣布全面支持Keil出Keil提供包括C编译器宏汇编连接器库理功强仿真调试器等完整开发方案通集成开发环境(uVision)部份组合起运行Keil软件需PentiumCPU16MB更RAM20M空闲硬盘空间WIN98NTWIN2000WINXP等操作系统掌握软件51系列单片机爱者说十分必果C语言编程Keil二选(目前国买该软件买仿真机支持该软件)C语言仅汇编语言编程方便易集成环境强软件仿真调试工具会令事半功倍Keil C51生成目标代码效率非常高数语句生成汇编代码紧凑容易理解开发型软件时更体现高级语言优势
3硬件设计
31 总体设计框图
图31总体设计框图
32部分硬件设计原理
321 AT89C51简介
AT89C51种带4K字节闪存编程擦读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)低电压高性CMOS 8位微处理器俗称单片机AT89C2051种带2K字节闪存编程擦读存储器单片机单片机擦读存储器反复擦100次该器件采ATMEL高密度非易失存储器制造技术制造工业标准MCS51指令集输出脚相兼容功8位CPU闪烁存储器组合单芯片中ATMELAT89C51种高效微控制器AT89C2051种精简版AT89C51单片机嵌入式控制系统提供种灵活性高价廉方案外形引脚排列图32示
图32 AT89C51系列单片机
322 LED显示电路设计原理
LED显示电路8LED发光二极组成连接方式阳极LED接单片机P1口低电LED亮起发光二极亮灭部程序控制8LED发光二极分应音阶LED会着音阶变化规律亮灭
323 时钟振荡电路
AT89C51中构成部振荡器高增益反相放器引脚XTAL1XTAL2分该放器输入端输出端放器作反馈元件片外石英晶体者陶瓷谐振器起构成然振荡器外接石英晶体电容C1C2接放器反馈回路中构成联振荡电路外接电容C1C2然没什严格求电容容量会轻微影响振荡频率高低振荡器工作稳定性起振难易程序温度稳定性果石英晶体推荐电容30PF10PF果陶瓷振荡器建议选择40PF10PF户采外部时钟采外部时钟电路图示种情况外部时钟脉接XTAL1端部时钟发生器输入端XTAL2悬空外部时钟信号通2分频触发器作部时钟信号外部时钟信号占空没特殊求高电持续时间低电持续时间应符合产品技术条件求振荡器电路图:
图33 单片机部外部振荡电路
33 硬件电路图功
总体硬件电路实现功图34示
1) 电路中P32P33控制键
2) P10~P17控制LED
3) P23控制蜂鸣器
4) 电路12MHZ晶振频率工作起振电路中C1C2均30PF
图34 硬件电路图
4软件设计
程序中设置两标志——count1count2分初始化10键1count112间切换键2count21~4间切换程序检测count1值count1等1时播放第首歌曲等2时播放第二首方面根count2值切换LED花样count1count2值互斥设置count1等12时count2时设置0设置count2等1~4时count1时设置0
41 音调节拍编码确定方法
般说单片机演奏音乐基单音频率包含相应幅度谐波频率说电子琴样奏出种音色声音单片机奏乐需弄清楚两概念音调节拍表示音符唱长时间
411 音调确定
音高乐音CDEFGAB表示7字母音乐音名般次唱成DOREMIFASOLASI唱成简谱1234567相汉字米发梭拉西读音唱曲时乐音发音音调ToneCDEFGAB组音距离分成12等份等份半音两音间距离两半音全音钢琴等键盘乐器C–DD–EF–GG–AA–B两音间隔着黑键间距离全音E–FB–C两音间没黑键相隔间距离半音通常唱成1234567音然音左角加﹟号者b号变化音﹟升记号表示音原基础升高半音b降记音表示原基础降低半音例高音DO频率(1046Hz)刚中音DO频率(523Hz)倍中音DO频率(523Hz)刚低音DO频率(266 Hz)倍样高音RE频率(1175Hz)刚中音RE频率(587Hz)倍中音RE频率(587Hz)刚低音RE频率(294 Hz)倍
1)产生音频脉算出某音频周期(1频率)然周期2半周期时间利定时器计时半周期时间计时输出脉IO反相然重复计时半周期时间IO反相IO脚频率脉
2)利AT89C51部定时器工作计数器模式MODE1改变计数值TH0TL0产生频率方法
外结束符休止符分代码00HFFH表示查表结果00H表示曲子终查表结果FFH产生相应停顿效果
3)例频率523Hz周期T15231912us令计数器计时956us1us956次计数956次时IO反相中音DO(523Hz)
计数脉值频率关系公式:
NFi2Fr
N:计算值 Fi:部计时次1us频率1MHz
4) 计数值求法:
T65536N65536Fi2Fr
例:设K65536F1000000Fi1MHz球低音DO(261Hz)中音DO(523Hz)高音DO(1046Hz)计算值
T65536N65536Fi2Fr6553610000002Fr65536500000Fr
低音DOT6553650000026263627
低音DOT6553650000052364580
低音DOT65536500000104765059
5) C调音符频率计数值T表表41示
表41 C调音符频率计数值T表
低音
频率
T
参数
中音
频率
T
参数
高音
频率
T
参数
Do
262
1908
229
Do
523
956
115
Do
1046
57
57
Do﹟
277
1805
217
Do﹟
554
903
108
Do﹟
1109
54
54
Re
294
1701
204
Re
587
852
102
Re
1175
51
51
Re﹟
311
1608
193
Re﹟
622
804
97
Re﹟
1245
48
48
Mi
330
1515
182
Mi
659
759
91
Mi
1318
45
45
Fa
349
1433
172
Fa
698
716
86
Fa
1397
43
43
Fa﹟
370
1351
162
Fa﹟
740
676
81
Fa﹟
1480
41
41
So
392
1276
153
So
784
638
77
So
1568
38
38
So﹟
415
1205
145
So﹟
831
602
72
So﹟
1661
36
36
La
440
1136
136
La
880
568
68
La
1760
34
34
La﹟
464
1078
129
La﹟
932
536
64
La﹟
1865
32
32
Si
494
1012
121
Si
988
506
61
Si
1976
30
30
412 节拍确定
构成音乐光音调够需节拍音乐具旋律(固定律动)调节音快满度节拍Beat简单说拍子听音乐拍手跺脚1拍实05s14 拍0125s1拍少s没严格规定心跳样部分心跳分钟72快点慢点听悦耳音持续时间长短时值般拍数表示休止符表示暂停发音
首音乐许音符组成音符应着频率样利频率组合加拍数应延时构成音乐解音乐基础知识知产生频率音频脉产生音乐单片机说产生频率脉非常方便利单片机定时计数器产生样方波频率信号需弄清楚音乐中音符应频率单片机定时计数关系
表42节拍节拍码
节拍码
节拍数
节拍码
节拍数
1
14拍
1
18拍
2
24拍
2
14拍
3
34拍
3
38拍
4
1拍
4
21拍
5
114拍
5
58拍
6
112拍
6
34拍
8
2拍
8
1拍
A
212拍
A
114拍
C
3拍
C
112拍
F
334拍
音符1字节字节高4位代表音符高低低4位代表音符节拍图52节拍码果1拍04秒14拍实01秒设定延迟时间求节拍时间假设14拍1DELAY1拍应4DELAY类推求14拍DELAY时间余节拍倍数图531418节拍时间设定
表43 1418节拍时间设定
曲调值
DELAY
曲调值
DELAY
调44
125毫秒
调44
62毫秒
调34
187毫秒
调34
94毫秒
调24
250毫秒
调24
125毫秒
413 编码
do re mi fa so la si分编码1~7重音do编8重音re编9停顿编0播放长度十六分音符单位(程序中165ms)拍四分音符等4十六分音符编4播放时间类推音调作编码高4位播放时间作低4位音调节拍构成编码0xff作曲谱结束标志
举例1:音调do发音长度两拍二分音符编码0x18
举例2:音调re发音长度半拍八分音符编码0x22
歌曲播放设计先歌曲简谱进行编码储存数类型unsigned char 数组中程序数组中取出数然分离出高4位音调接着找出相应值赋定时器0定时操作蜂鸣器出相应音调接着分离出该数低4位延时时间接着调软件延时
表44 简谱应简谱码T值节拍数
简谱
发音
简谱码
T值
节拍码
节拍数
5
低音SO
1
64260
1
14拍
6
低音LA
2
64400
2
24拍
7
低音TI
3
64524
3
34拍
1
中音DO
4
64580
4
1拍
2
中音RE
5
64684
5
114拍
3
中音MI
6
64777
6
112拍
4
中音FA
7
64820
8
2拍
5
中音SO
8
64898
A
212拍
6
中音LA
9
64968
C
3拍
7
中音TI
A
65030
F
334拍
1
高音DO
B
65058
2
高音RE
C
65110
3
高音MI
D
65157
4
高音FA
E
65178
5
高音SO
F
65217
42 软件程序设计
421 程序流程图相应代码块
程序流程图
图41 程序流程图
程序代码
main()
{ uchar x
count10流水灯花样
count21唱第首歌
P340选取矩阵键盘列
EA1开总中断
EX01开外部中断0
IT01外部中断0降触发方式
EX11开外部中断1
IT11外部中断1降触发方式
TMOD0x01定时器0工作方式1
TH00
TL00
ET01
while(1)
{
if(count10) 音乐停止花样灯开始花样闪烁
{
switch(count1)
{
case 1
for(x0x<14x++)
{
duan1
P1huayang1[x]
beep()
delay1(300)
duan0
if(count11)
break
}
break
case 2
for(x0x<14x++)
{
duan1
P1huayang2[x]
beep()
delay1(300)
duan0
if(count12)
break
}
break
case 3
for(x0x<16x++)
{
duan1
P1huayang3[x]
beep()
delay1(300)
duan0
if(count13)
break
}
break
}
}
else
{
song()
delay1(1000)
}
}
}
播放音乐子程序流程图
图42 播放音乐子程序流程图
播放音乐子程序代码:
void song()
{
uint temp
uchar jpjp简谱
i0
while(1)
{ if(count20)
{
break
}
if(count21) 选曲
tempqnzl[i] 播放千年恋
if(count22)
tempjmszl[i] 播放寂寞沙洲冷
if(temp0xff) 结束标志
break
jptemp16 取数高4位
duan1
P1yinyue[jp]
duan0
if(jp0)
{
timehcuzhi[jp*2]
timelcuzhi[jp*2+1]
}
else
{
TR00
fm1关蜂鸣器
}
delay(temp16) 取数低4位
TR00 唱完音停10MS
fm1
delay1(10)
TR01
i++
}
TR00
fm1
}
延时程序代码:
void delay(uint z) 延时165MS十六分音符
{ uint xy
for(xzx>0x)
for(y19000y>0y)
}
void delay1(uint z) 延时1MS
{ uint xy
for(xzx>0x)
for(y112y>0y)
}
422 程序源代码(见附录A)
5调试
51 检查硬件连接
PROTUES检查硬件脚否连接正确线路逻辑否正确例:晶振电路连接复位电路否设计正确
52 检查软件系统
1.根系统原理结构检查流程图否正确根流程图检查程序否正确
2.程序组织起软件环境运行检查程序否正确通硬件软件系统认真检查反复测试果没出现问题源程序编译成HEX文件装载单片机中硬件进行仿真
53 测试结果
531.总体运行图
图51 系统总体运行图
532.花样灯3种花样图
截图静态图整体图样面画图说明:
图52 花样灯
(1)第种花样灯显示方式:D1移D2然D1熄灭D2移D3然D2熄灭类推复循环
图52 第种花样
(2)第二种花样灯显示方式:两边中间移动首先D1移D8D8移D2类推复循环具体图53
图53 第2种花样
(3)第三种花样灯显示方式:D1移D2然D1熄灭D2移D3然D2熄灭复循环第种方式处:D1移D2时D1熄灭D2移D3时D2熄灭类推
图54 第3中花样
6 总结
单片机设计止已进入令鼓舞阶段进行长达两月时间摸索实验仅仅单片机入门软件硬件常设计功项设计研究制作程需详细步骤具体实现方法力度掌握
然次宝贵毕业设计活动中验收获增强身未知问题知识深化认识力受益匪浅词语概括次难忘活动觉合适光完成作品满足开始时候怀着作品制作更加性化更加令满意更加功完美方便应领域终目着单片机门学科认识加深达拓展程度想目远时期实现
总次设计软件编写调试软硬件联机调试倾注量时间心血真程序编写冥思查找法找出错误郁闷苦恼某功实现犹豫彷徨终成功
仅品味结果喜悦更明白程弥足珍贵
致谢
感谢导师冯永政老师严谨细致丝苟作风直工作学中榜样循循善诱教导拘格思路予启迪
感谢爸爸妈妈焉谖草言树背养育恩回报永远健康快乐心愿
感谢室友维系着彼间兄弟般感情维系着寝室份家融洽四年仿佛昨天四年里没红脸没吵嘴没发生学前担心开心事情家难聚起吃年元旦顿饭吧没关系奔前程家珍重起日子会记辈子
文完成际心情法静开始进入课题文利完成少敬师长学朋友言帮助里请接受诚挚谢意
参考文献
[1] 李建忠单片机原理应[M]西安电子科技学出版社20082
[2] 黄智伟全国学生电子设计竞赛系统设计[M]北京:北京航空航天学出版社20066
[3] 黄智伟凌阳单片机课程设计指导[M]北京:北京航空航天学出版社200611
[4] 李广弟朱月秀王秀山单片机基础[M]北京:北京航空航天学出版社20017
[5] 赵曙光郭万杨颂华编程逻辑器件原理开发应[M]西安:西安电子科技学 2000
[6] 候伯亨VHDL硬件描述语言数字逻辑电路设计[M] 西安:西安电子科技学出版社 1999
[7] 康华光 模拟电子技术基础(第四版)[M] 武汉:华中理工学出版社1999
[8] 谭浩强C语言程序设计(第二版)[M]北京:清华学出版社1991
[9] 陈忠黄宁 单片机接口技术实子程序[M]北京:北京民邮电出版社 2005
[10] 欧伟明周春瞿遂春电子信息系统设计[M]西安电子科技学出版社20059
[11] 贾立新王涌电子系统设计实践[M]北京:清华学出版社2007
[12] 罗亚非凌阳16位单片机应基础[M]北京:北京航空航天学出版社2003
[13] 雷思孝凌阳单片机原理实技术[M]西安电子科技学2004
科技外文文献
Getting Started with µVision2
The Keil Software 8051 development tools listed below are programs you use to compile your C code assemble your assembly source files link and locate object modules and libraries create HEX files and debug your target program
µVision2 for Windows™ is an Integrated Development Environment that combines project management source code editing and program debugging in one single powerful environment
The C51 ANSI Optimizing C Cross Compiler creates relocatable object modules from your C source code
The A51 Macro Assembler creates relocatable object modules from your 8051 assembly source code
The BL51 LinkerLocator combines relocatable object modules created by the C51 Compiler and the A51 Assembler into absolute object modules
The LIB51 Library Manager combines object modules into libraries that may be used by the linker
The OH51 ObjectHEX Converter creates Intel HEX files from absolute object modules
The RTX51 Realtime Operating System simplifies the design of complex timecritical software projects
Software Development Cycle
When you use the Keil Software tools the project development cycle is roughly the same as it is for any other software development project
1 Create a project select the target chip from the device database and configure the tool settings
2 Create source files in C or assembly
3 Build your application with the project manager
4 Correct errors in source files
5 Test the linked application
µVision2 IDE
The µVision2 IDE combines project management a richfeatured editor with interactive error correction option setup make facility and online help Use µVision2 to create your source files and organize them into a project that defines your target application µVision2 automatically compiles assembles and links your embedded application and provides a single focal point for your development efforts
LIB51 Library Manager
The LIB51 library manager allows you to create object library from the object files created by the compiler and assembler Libraries are specially formatted ordered program collections of object modules that may be used by the linker at a later time When the linker processes a library only those object modules in the library that are necessary to create the program are used
BL51 LinkerLocator
The BL51 linker creates an absolute object module using the object modules extracted from libraries and those created by the compiler and assembler An absolute object file or module contains no relocatable code or data All code and data reside at fixed memory locations The absolute object file may be used
To program an EPROM or other memory devices
With the µVision2 Debugger for simulation and target debugging
With an incircuit emulator for the program testing
µVision2 Debugger
The µVision2 symbolic sourcelevel debugger is ideally suited for fast reliable program debugging The debugger includes a highspeed simulator that let you simulate an entire 8051 system including onchip peripherals and external hardware The attributes of the chip you use are automatically configured when you select the device from the Device Database
The µVision2 Debugger provides several ways for you to test your programs on
real target hardware
Install the MON51 Target Monitor on your target system and download your program using the Monitor51 interface builtin to the µVision2 Debugger
Use the Advanced GDI interface to attach use the µVision2 Debugger front end with your target systemØ
Monitor51
The µVision2 Debugger supports target debugging using Monitor51 The monitor program resides in the memory of your target hardware and communicates with the µVision2 Debugger using the serial port of the 8051 and a COM port of your PC With Monitor51 µVision2 lets you perform sourcelevel symbolic debugging on your target hardware
RTX51 RealTime Operating System
The RTX51 realtime operating system is a multitasking kernel for the 8051 microcontroller family The RTX51 realtime kernel simplifies the system design programming and debugging of complex applications where fast reaction to time critical events is essential The kernel is fully integrated into the C51 Compiler and is easy to use Task description tables and operating system consistency are automatically controlled by the BL51 linkerlocator
C51 Optimizing C Cross Compiler
The Keil C51 Cross Compiler is an ANSI C Compiler that was written
specifically to generate fast compact code for the 8051 microcontroller family
The C51 Compiler generates object code that matches the efficiency and speed
of assembly programming
Using a highlevel language like C has many advantages over assembly language
programming
Knowledge of the processor instruction set is not required Rudimentary knowledge of the memory structure of the 8051 CPU is desirable (but not necessary)
Details like register allocation and addressing of the various memory types and data types is managed by the compiler
Programs get a formal structure (which is imposed by the C programming language) and can be divided into separate functions This contributes to source code reusability as well as better overall application structure
The ability to combine variable selection with specific operations improves program readability
Keywords and operational functions that more nearly resemble the human thought process may be used
Programming and program test time is drastically reduced
The C runtime library contains many standard routines such as formatted output numeric conversions and floatingpoint arithmetic
Existing program parts can be more easily included into new programs because of modular program construction techniques
The language C is a very portable language (based on the ANSI standard) that enjoys wide popular support and is easily obtained for most systems
Existing program investments can be quickly adapted to other processors as needed
Code Optimizations
The C51 Compiler is an aggressive optimizing compiler that takes numerous steps to ensure that the code generated and output to the object file is the most efficient (smallest andor fastest) code possible The compiler analyzes the generated code to produce the most efficient instruction sequences This ensures that your C program runs as quickly and effectively as possible in the least amount of code space
The C51 Compiler provides nine different levels of optimizing Each increasing level includes the optimizations of levels below it The following is a list of all optimizations currently performed by the C51 Compiler
General Optimizations
Constant Folding Constant values occurring in an expression or address calculation are combined as a single constantØ
Jump Optimizing Jumps are inverted or extended to the final target address when the program efficiency is thereby increased
Dead Code Elimination Code that cannot be reached (dead code) is removed from the program
Register Variables Automatic variables and function arguments are located in registers whenever possible No data memory space is reserved for these variables
Parameter Passing Via Registers A maximum of three function arguments
may be passed in registers
Global Common Subexpression Elimination Identical subexpressions or address calculations that occur multiple times in a function are recognized and calculated only once whenever possible
Common Tail Merging Common instruction blocks are merged together using jump instructions
Reuse Common Entry Code Common instruction sequences are moved in front of a function to reduce code size
Common Block Subroutines Multiple instruction sequences are packed into subroutines Instructions are rearranged to maximize the block size
中文译文
Keil C 简介
Keil Software 8051开发工具提供程序编译C源码汇编汇编源程序连接重定位目标文件库文件创建HEX文件调试目标程序
Windows应程序uVision2集成开发环境项目理源代码编辑程序调试等集成功强环境中
C51美国标准优化C交叉编译器C源代码产生重定位目标文件
A51宏汇编器8051汇编源代码产生重定位目标文件
BL51连接重定位器组合C51A51产生重定位目标文件生成绝目标文件
LIB51库理器组合目标文件生成连接器库文件
OH51目标文件HEX格式转换器绝目标文件创建Intel HEX 格式文件
RTX51实时操作系统简化复杂时间求敏感软件项目
软件开发流程
Keil Software工具时项目开发流程软件开发项目流程极相似
1 创建项目器件库中选择目标器件配置工具设置
2 C语言汇编语言创建源程序
3 项目理器实现应
4 修改源程序中错误
5 测试连接应
uVision2 IDE
uVision2 集成开发环境集成项目理器功丰富错误提示编辑器设置选项生成工具线帮助利uVision2创建源代码组织确定目标应项目中uVision2动编译汇编连接嵌入式应开发提供单焦点
C51编译器A51汇编器
源代码uVision2 IDE创建C51编译A51汇编编译器汇编器源代码生成重定位目标文件Keil C51编译器完全遵ANSI C语言标准支持C语言标准特性外直接支持8051结构特性添加里面Keil A51宏汇编器支持8051派生系列全部指令集
LIB51 库理器
LIB51库理器允许编译器汇编器生成目标文件创建目标库库种特组织连接重象模块连接器处理库时仅仅目标模块真正
BL51 连接器定位器
BL51 连接器定位器利库中提取目标模块编译器汇编器生成目标模块创建绝址目标模块绝址目标模块文件包含重定位代码数代码数安置固定存储器单元中绝址目标文件:
写入EPROM存储器件
uVision2调试器模拟调试
仿真器测试程序
uVision2 调试器
uVision2源代码级调试器理想快速程序调试器调试器包含高速模拟器够模拟整8051系统包括片外围器件外部硬件器件库中选择器件时器件特性动配置
uVision2调试器实际目标板测试程序提供种方法:
安装MON51目标监控器目标系统通Monitor51接口载程序
利高级GDI(AGDI)接口uVision2调试器绑定目标系统
Monitor51
uVision2调试器支持Monitor51进行目标板调试监控程序驻留目标板 存储器里利串口uVision2调试器进行通信利Monitor51uVision2调试器 目标硬件实行源代码级调试
RTX51实时操作系统
RTX51实时操作系统针8051系列务核RTX51实时核质简化实时事件反应速度求高复杂应系统设计编程调试RTX51实时核完全集成C51编译器中方便务描述表操作系统连接BL51连接器定位器动控制
C51优化C语言交叉编译器
Keil C51交叉编译器基ANSI C标准针8051系列MCUC编译器生成执行代码快速紧凑运行效率速度汇编程序代码相媲美
汇编语言相C语言样高级语言优势:
处理器指令集必解8051 CPU基结构解必须
寄存器分配种变量数寻址编译器完成
程序拥正式结构(C语言带)分成单独子函数整应系统结构变清晰时源代码变重复
选择特定操作符操作变量力提高源代码读性
运思维接词汇算法表达式
编写程序调试程序时间程度缩短
C运行连接库包含标准子程序格式化输出数字转换浮点运算
程序模块结构技术现程序段容易包含新程序中
ANSI 标准C语言种丰常方便获广泛应绝部分系统中够容易语言
果需现程序快移植处理器节省投资
代码优化
C51杰出优化编译器通步骤确保产生代码效率(快)编译器通分析初步代码 产生终效率代码序列保证C语言程序占少空间时运行快效
C51编译器提供9优化级高级优化级包括低优化级优化容列出目前C51编译器提供优化级容:
常量折叠:表达式寻址程中出现常量综合单常量
跳转优化:采反转跳转直接指终目跳转提升程序效率
哑码消:永远执行代码动程序中剔
寄存器变量:局部变量函数参数放CPU寄存器中需变量分配存储器空间
通寄存器传递参数:三参数通寄存器传递
消全局公子表达式:程序中次出现相子表达式址计算表达式计算次
合相代码:利跳转指令相代码块合
重复入口代码:需次代码移子程序前面缩减代码长度
公块子程序:需重复条指令提取组成子程序指令重新安排化子程序长度
附录A 程序源代码注释
#include
#define uchar unsigned char
#define uint unsigned int
sbit duanP2^6
sbit key1P3^2key1切换花样
sbit key2P3^3key2切换歌曲
sbit fmP3^7蜂鸣器连续IO口
sbit P34P3^4矩阵键盘列
uchar code huayang1[]{0x7f0xbf0xdf0xef0xf70xfb0xfd0xfe
0xfd0xfb0xf70xef0xdf0xbf}花样1
uchar code huayang2[]{0x7f0xfe0xbf0xfd0xdf0xfb0xef0xf7
0xef0xfb0xdf0xfd0xbf0xfe}花样2
uchar code huayang3[]{0x7f0x3f0x1f0x0f0x070x030x010x0
0x800xc00xe00xf00xf80xfc0xfe0xff}
char code huayang4[]{ 0x550xaa0xcc0x330x990x660x0f0xf0}
uchar count1花样标志
uchar count2歌曲标志
uchar timehtimeli
简谱
编程规字节高位简谱低位持续时间
代表少十六分音符
17代表中央C调8E代表高八度0代表停顿
0结束标志
uchar code qnzl[]{ 千年恋
0x120x220x340x840x740x540x380x420x320x220x420x340x840x720x820x940xA80x08
前奏
0x320x310x210x320x520x320x310x210x320x62
竹林灯火 沙漠
0x320x310x210x320x820x710x810x710x510x320x22
七色国度 断飘逸风中
0x320x310x210x320x520x320x310x210x320x62
种神秘 灰色旋涡
0x320x310x210x320x830x820x710x720x02
卷入迷雾中
0x630xA10xA20x620x920x820x52
清双手
0x310x510x630x510x630x510x630x510x620x820x7C0x02
朵花传谁温柔
0x610x710x820x710x620xA20x710x76
穿越千年伤痛
0x610x710x820x710x620x520x310x36
求结果
0x610x710x820x710x620xA30x730x620x53
留轮廓 指引
0x420x630x830x830x910x91
黑夜中寂寞
0x610x710x820x710x620x0A20x710x76
穿越千年哀愁
0x610x710x820x710x620x520x310x36
头等
0x610x710x820x710x620xA30x730x620x53
美丽感动 会值
0x420x820x880x020x740x930x890xff结束标志
生守候
}
uchar code jmszl[]{ 寂寞沙洲冷
0x120x120x220x320x310x220x210x22
走心憔悴
0x210x310x510x520x310x520x610x150x14
白色油桐风中纷飞
0x510x520x310x520x620x130x110x130x320x280x080x28
落花似情 季节
0x310x320x310x320x110x210x510x520x510x52
河畔风放肆拼命吹
0x510x510x310x320x310x320x810x720x63
断拨弄离眼泪
0x620x710x810x720x610x610x520x310x210x320x510x54
样浓烈爱法
0x220x120x110x120x110x120x120x140x260x320x26
伤感夜夜
0x320x610x510x510x310x310x210x310x510x610x510x310x51
记忆线缠绕支离破碎
0x020x320x810x810x810x810x620x520x34
慌乱占心扉
0x310x810x810x810x610x910x82
花伴着蝴蝶
0x510x510x510x510x310x610x53
孤雁双飞
0x210x110x210x110x220x110x210x26
夜深静独徘徊
0x320x610x510x510x310x310x210x310x510x610x510x310x510x52
幸福恋寄红色分享喜悦
0x310x310x810x810x810x610x910x810x610x310x56
闭双眼难头敢回
0x320x320x810x810x810x810x910x810x610x810x610x510x310x510x34
然捡寒枝肯安歇微带着悔
0x210x310x510x310x210x110x610x210x16
寂寞沙洲该思念谁
0xff}
简谱音调应定时器初值
适合110592M晶振
uchar code cuzhi[]{
0xff0xff占位
0xFC0x8E中央C调17
0xFC0xED
0xFD0x43
0xFD0x6A
0xFD0xB3
0xFD0xF3
0xFE0x2D
0xFE0x47 高八度17
0xFE0x76
0xFE0xA1
0xFE0xC7
0xFE0xD9
0xFE0xF9
0xFF0x16
}
uchar yinyue[]{0xff0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f0x00x0}
音调转化应LED样式
void delay1(uint z) 延时1MS
void delay(uint z) 延时165MS十六分音符
void song()
void beep()蜂鸣器声
main()
{ uchar x
count10流水灯花样
count21唱第首歌
P340选取矩阵键盘列
EA1开总中断
EX01开外部中断0
IT01外部中断0降触发方式
EX11开外部中断1
IT11外部中断1降触发方式
TMOD0x01定时器0工作方式1
TH00
TL00
ET01
while(1)
{
if(count10)
{
switch(count1)
{
case 1
for(x0x<14x++)
{
duan1
P1huayang1[x]
beep()
delay1(300)
duan0
if(count11)
break
}
break
case 2
for(x0x<14x++)
{
duan1
P1huayang2[x]
beep()
delay1(300)
duan0
if(count12)
break
}
break
case 3
for(x0x<16x++)
{
duan1
P1huayang3[x]
beep()
delay1(300)
duan0
if(count13)
break
}
break
case 4
for(x0x<8x++)
{
duan1
P1huayang4[x]
beep()
delay1(300)
duan0
if(count14)
break
}
break
}
}
else
{
song()
delay1(1000)
}
}
}
void int0() interrupt 0
{
EA0关总中断
delay1(1)抖
if(key10)
{
count20蜂鸣器唱歌
TR00
count1++
if(count15)
count11
}
EA1开总中断
}
void int1() interrupt 2
{
EA0关总中断
delay1(1)抖
if(key20)
{
count10流水灯花样
TR01
i0头开始唱
count2++
if(count23)
count21
}
EA1开总中断
}
void timer0() interrupt 1 产生种音调
{
TH0timeh
TL0timel
fm~fm
}
void song()
{
uint temp
uchar jpjp简谱
i0
while(1)
{ if(count20)
{
break
}
if(count21) 选曲
tempqnzl[i]
if(count22)
tempjmszl[i]
if(temp0xff)
break
jptemp16 取数高4位
duan1
P1yinyue[jp]
duan0
if(jp0)
{
timehcuzhi[jp*2]
timelcuzhi[jp*2+1]
}
else
{
TR00
fm1关蜂鸣器
}
delay(temp16) 取数低4位
TR00 唱完音停10MS
fm1
delay1(10)
TR01
i++
}
TR00
fm1
}
void delay(uint z) 延时165MS十六分音符
{ uint xy
for(xzx>0x)
for(y19000y>0y)
}
void delay1(uint z) 延时1MS
{ uint xy
for(xzx>0x)
for(y112y>0y)
}
void beep() 蜂鸣器声
{ uchar i
for(i0i<50i++)
{ fm~fm
delay1(1)
}
fm1
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档