单片机原理实验指导书
单片机实验指导书(6个实验)

单片机原理和接口技术实验指导书襄樊学院物理和电子信息技术系实验要求1.进入实验室前完成的部分1)认真阅读实验指导书,弄懂实验原理和实验内容。
2)编写实验所要用到的程序,将其放在U盘上。
3)写出预习报告。
2. 进入实验室后完成的部分1)建立工程,加入已准备好的程序文件。
2)对程序进行调试,修改错误,获得要求的结果。
3)保存调试后的程序。
3.实验结束后的部分对实验结果进行分析、总结,写出实验报告。
实验报告内容及格式1.实验目的2.实验设备3.实验原理及环境4.实验内容只做文字叙述,程序部分放在程序清单中。
流程图也可不画。
5.程序清单本实验使用的完整程序。
如果使用了本实验或前面实验中完全相同的子程序,可不列写,只做注明即可。
6.实验步骤7.实验总结主要包括对实验结果、调试过程、错误及产生的原因的分析,以及本次实验的重要收获等。
此项为实验成绩评定的重要依据。
实验1 Keil C51的使用(汇编语言)实验目的:初步掌握Keil C51(汇编语言)和ZY15MCU12BD型综合单片机实验箱的操作和使用,能够输入和运行简单的程序。
实验设备:ZY15MCU12BD型综合单片机实验箱一台、具有一个RS232串行口并安装Keil C51的计算机一台。
实验原理及环境:在计算机上已安装Keil C51软件。
这个软件既可以和硬件(ZY15MCU12BD型综合单片机实验箱)连接,在硬件(单片机)上运行程序;也可以不和硬件连接,仅在计算机上以虚拟仿真的方法运行程序。
如果程序有对硬件的驱动,就需要和硬件连接;如果没有硬件动作,仅有软件操作,就可以使用虚拟仿真。
实验内容:1.掌握软件的开发过程:1)建立一个工程项目选择芯片确定选项。
2)加入C 源文件或汇编源文件。
3)用项目管理器生成各种使用文件。
4)检查并修改源文件中的错误。
5)编译连接通过后进行软件模拟仿真。
6)编译连接通过后进行硬件仿真。
7)I A P 编程操作2.按以上步骤实现在P1.0输出一个频率为1Hz的方波。
单片机实验指导书

单片机实验指导书一、实验介绍单片机是一种集成电路,能够完成各种控制和计算任务。
本实验指导书将引导您进行单片机实验,以帮助您了解单片机的基本原理和应用。
在本实验中,您将学习如何搭建实验环境、编写程序以及进行各种实验操作。
二、实验准备1. 实验设备和材料:- 单片机开发板- USB数据线- 适配器- 数字电路元件(如LED、电位器等)2. 软件准备:- 单片机开发软件(如Keil、IAR EWARM等)- 编程软件(如C语言编辑器)- USB驱动程序三、实验步骤1. 搭建实验环境:- 将USB数据线连接单片机开发板和计算机。
- 通过适配器给单片机开发板供电。
- 检查驱动程序是否正确安装。
2. 编写程序:- 打开单片机开发软件,并创建一个新的工程。
- 选择适当的单片机型号和编程语言。
- 编写程序代码,实现所需功能。
- 编译程序并下载到单片机开发板。
3. 实验操作:- 根据实验要求连接相应的电路元件。
- 调试程序,确保程序能正确运行。
- 运行实验并观察结果。
四、实验注意事项1. 请确保您具备基本的电路和编程知识。
2. 在操作实验设备和元件时,请小心谨慎,避免发生触电等事故。
3. 如果遇到问题,请及时咨询实验指导人员或相关专家。
五、实验示例以下是一个简单的实验示例,用于演示如何控制LED灯的亮度:实验电路连接:将一个LED灯连接至单片机开发板的一个GPIO口。
程序代码:#include <reg51.h>sbit LED = P1^0;void delay(unsigned int time){unsigned int i,j;for(i=0;i<time;i++)for(j=0;j<120;j++);}void main(){while(1){LED = 1; // 点亮LEDdelay(200); // 延时200msLED = 0; // 熄灭LEDdelay(200); // 延时200ms}}六、实验总结通过本次实验,我们学习了搭建实验环境、编写程序以及进行单片机实验操作的基本步骤和注意事项。
单片机原理实验指导书(2012.10)

《单片机原理》实验指导书计算机科学与技术系2012年8月目录第一部分单片机仿真实验 (1)实验一:流水灯实验 (1)实验二:中断实验 (4)实验三:定时器中断实验 (6)实验四:串行口实验 (9)实验五:矩阵式键盘输入识别 (13)实验六:LCD循环显示设计 (19)第二部分单片机硬件实验............................错误!未定义书签。
第一章试验箱系统概述 ...................................错误!未定义书签。
一、系统地址分配........................................... 错误!未定义书签。
二、系统接口定义........................................... 错误!未定义书签。
三、通用电路简介........................................... 错误!未定义书签。
第二章实验指导...............................................错误!未定义书签。
实验七P1口亮灯和P1口加法器实验........... 错误!未定义书签。
实验八简单I/O口扩展(选作).................. 错误!未定义书签。
实验九8255控制交通灯................................ 错误!未定义书签。
实验十128*64LCD液晶显示 .......................... 错误!未定义书签。
第一部分单片机仿真实验实验一:流水灯实验一、实验目的:通过对P3口地址的操作控制8位LED流水点亮,从而认识单片机的存储器。
二、实验原理图实验参考电路图如下:三、参考实验程序//流水灯实验#include<reg51.h> //包含单片机寄存器的头文件sfr x=0xb0; //P3口在存储器中的地址是b0H,通过sfr可定义8051内核单片机//的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作/****************************************函数功能:延时一段时间*****************************************/void delay(void){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++); //利用循环等待若干机器周期,从而延时一段时间 }/*****************************************函数功能:主函数******************************************/void main(void){while(1){x=0xfe; //第一个灯亮delay(); //调用延时函数x=0xfd; //第二个灯亮delay(); //调用延时函数x=0xfb; //第三个灯亮delay(); //调用延时函数x=0xf7; //第四个灯亮delay(); //调用延时函数x=0xef; //第五个灯亮delay(); //调用延时函数x=0xdf; //第六个灯亮delay(); //调用延时函数x=0xbf; //第七个灯亮delay(); //调用延时函数x=0x7f; //第八个灯亮delay(); //调用延时函数}}四、实验思考题:修改程序使LED灯为18灯亮——27灯亮——36灯亮——45灯亮,再将LED 灯亮的顺序倒过来既:45灯亮——36灯亮——27灯亮——18灯亮,连续运行。
《单片机原理》实验指导书

《单片机原理》实验指导书For personal use only in study and research; not for commercial use山东华宇职业技术学院实训中心电子教研室目录第一章认识单片机实验系统 (3)3 第一部分系统介绍.......................................................................................6 第二部分银环MCS—51调试软件的使用........................................................第三部分键盘监控使用简介 (9)第二章软件实验 (15)实验一字处理程 (15)实验二数据处理程序 (17)实验三多分支程序 (20)实验四脉冲计数(定时/计数器实验) (22)第三章硬件实验 (26)实验一 P1口实验 (26)*实验一 P1口实验 (31)实验二 P1口输入\输出 (35)实验三 P3.3输入 P1口输出 (38)实验四工业顺序控制 (40)实验五简单I/O扩展实验一 (43)实验六简单I/O扩展实验一 (47)实验七定时器实验 (49)实验八 8255A可编程并行接口实验一 (52)实验九 D/A转换实验 (54)实验十 A/D转换实验 (60)实验十一存储器扩展实验 (64)附:实验报告要求 (66)实验注意事项及要求 (67)第一章认识单片机实验系统第一部分系统介绍一、整机介绍1、DICE型微机教学实验系统结构DICE型微机教学实验系统由电源、系统板、CPU板、可扩展的实验模板、微机串口通讯线、JTAG通讯线及通用连接线组成。
二、系统特点DICE 型微机/单片机教学实验系统是启东计算机有限公司根据广大学者和许多高等院校实验需求,结合电子发展情况而研制的具有开发、应用、实验相结合的高科技实验设备。
旨在尽快提高我国电子科技发展水平,提高实验者的动手能力、分析解决问题能力。
单片机实验指导书

单片机实验指导书第一章实验概述本实验指导书旨在帮助学生掌握单片机基本原理和应用技巧。
通过实验的学习,学生将了解单片机的内部结构,学习单片机的编程方法,并能够用单片机实现简单的控制功能。
第二章实验准备2.1 实验器材准备本实验需要准备以下器材:- 单片机开发板- USB线- 电脑2.2 软件安装在开始实验之前,需要安装以下软件:- Keil C51开发环境- STC单片机系列驱动程序第三章实验步骤3.1 硬件连接将单片机开发板通过USB线连接到电脑上,并确保连接正常。
3.2 软件设置打开Keil C51开发环境,点击菜单栏中的“文件”选项,选择“新建”创建新的工程。
设置工程的名称和保存位置,确定后点击“保存”。
3.3 编写程序在Keil C51开发环境中,编写单片机程序。
首先需要包含相应的头文件,然后编写具体的程序逻辑,实现所需的功能。
3.4 编译和烧录程序在编写完程序后,点击菜单栏中的“编译”选项进行编译。
编译成功后,点击菜单栏中的“下载”选项将程序烧录到单片机开发板中。
3.5 实验验证将程序烧录完毕后,将开发板与外部模块连接,观察实验现象是否符合预期。
第四章实验注意事项4.1 安全注意事项在实验过程中,要注意使用安全电压和电流,避免短路和电击风险。
4.2 实验环境实验需要在安静、整洁的环境中进行,以避免干扰和误操作。
4.3 调试和故障排除如果遇到实验效果不理想或者出现故障的情况,可以参考开发板的说明书进行故障排查和调试。
第五章实验总结通过本次实验,我深入了解了单片机的基本原理和应用技巧。
通过编写程序并实际观察实验现象,我成功掌握了单片机编程的方法和技巧,并能够用单片机实现简单的控制功能。
本次实验还让我意识到了实验中的安全注意事项和环境要求的重要性。
在实验过程中,我严格遵守了安全规定,并在安静整洁的环境中进行操作,确保实验顺利进行。
通过反复实践和调试,我不断提高了自己的实验技巧和问题排查能力。
在遇到故障时,我能够通过检查并参考说明书,准确地找到并解决问题。
单片机原理实验指导书(6)

2.1 实验六I/O及其扩展实验一、实验目的加深对MCS-51单片机I/O及其扩展知识的理解。
二、实验设备Keil C单片机程序开发软件。
DP51-PROC单片机综合实验仪。
三、实验内容和步骤内容:1)利用8155实现并行扩展。
2)利用P1端口访问CA T24WC02(兼容AT24C02)。
实验程序:程序一:使用8155实现对并行接口的扩展。
利用8155的PA口输入KEY组各按键的状态信息,然后将该状态信息通过单片机的P1口输出到LED组显示。
设计思路:主程序在完成各项初始化设置后,可进入一死循环,在该循环里面不断的读取8155 PA口的信息并将其输出到单片机的P1口。
设计参考:①8155的地址分配:命令/状态寄存器7F00HPA口7F01H②8155命令/状态寄存器:PA 0=A口输入;1=A口输出PB 0=B口输入;1=B口输出PC2PC1 00=A口、B口基本输入输出,C口输入01=A口、B口基本输入输出,C口输出10=略11=略IEA 略IEB 略TM2TM1 略③8155芯片手册8155.PDF先将单片机内部RAM 中30H~37H 单元的值复制到CAT24WC02中的00H~07H 单元。
然后又将这8个数从CAT24WC02中复制到单片机内部RAM 的40H~47H 单元中 设计参考:① CAT24WC02的器件地址: 0A0H② CAT24WC02芯片手册CA T24WCxxx.pdf预习:1) 详细阅读两个芯片手册。
2) 编写好实验程序。
3) 根据编写的程序和实验步骤的要求制定调试仿真的操作方案。
实验单元电路:1) 8155电路。
2) CAT24WC02电路。
图2.6 系统中的8155电路PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7 P3.6P3.7P0.5P0.2P0.4P0.0P0.1P0.3P0.6P0.7P2_IO2P2_CS 图2.7 系统中的CAT24WC02电路SCLSDA Vcc程序一:1)关闭实验仪电源,将D1区开关SW2拨在下方,按图2.8连接实验线路后再打开实验仪电源。
《单片机原理与应用》实验指导书1

《单片机原理与应用》实验指导书目录实验一无符号双字节乘法运算子程序实验二 BCD码与ASCII码转换实验三 P1口实验实验四定时器实验—循环彩灯实验实验五数码显示实验实验六 A/D转换实验实验一无符号双字节乘法运算子程序一、实验目的:熟悉MCS-51指令系统,学会使用Keil C编程软件。
熟悉汇编语言编程。
二、实验设备:EL-8051-III型单片机实验箱。
三、实验内容:(1)在(R2R3)和(R6R7)中输入双字节无符号整数。
(2)将(R2R3)和(R6R7)中双字节无符号整数相乘,积存入R2R3R4R5中。
(3)连续或单步运行所编程序。
检查R2R3R4R5中的内容是正确。
四、实验原理:R6 R7R2 R3R4 R5B AB AB A(B)R2 (B+B+A) R3 (R4+A+A) R4 R5五、实验调试1、打开Keil,新建Keil项目;2、选择CPU类型为ATMEL中的AT89C52单片机;3、根据流程图新建汇编源程序(*.asm),并保存;4、在项目管理器窗口(project windows)中,将新建的ASM源程序添加到“source group 1”中;5、在Keil中选择“project”->“build target”菜单,编译汇编源程序,如有错,修改后重新编译;6、选择“debug”->“start/stop debug session”菜单,进入程序调试环境;7、按“F11”键,单步运行程序,观察“project windows”中,寄存器R0~R7的变化情况,最后验证R2R3R4R5无符号双字节相差的结果是否正确(可和程序/附件计算器的相乘结果对比)。
六、参考程序实验二 BCD码与ASCII码转换程序一、实验目的:熟悉MCS-51指令系统,学会使用Keil C编程软件。
熟悉汇编语言编程。
二、实验设备:EL-8051-III型单片机实验箱。
三、实验内容:将本人的班号学号以压缩的BCD码的形式由低到高存放在50H开始的单元中,如10050941班,学号为01的同学,将1050H、0551H、0952H、4153H、0154H。
单片机原理实验指导书(简略)

第一章D VCC系列单片机仿真实验系统性能系统提供的主要实验项目如下:一、MCS—51部分软件实验1、清零程序实验 6、字符串查找并统计相同字符串个数2、拆字程序实验 7、双字节乘法程序3、拼字程序实验 8、多分支程序设计4、数据块传送实验 9、定时/计数器实验5、数据排序实验 10、电脑时钟实验二、MCS—51部分硬件实验1、8031单片机P3、P1口应用 11、步进电机控制2、工业顺序控制 12、直流电机控制3、并行I/O口8255应用 13、电子音响4、简单I/O口输入、输出扩展 14、继电器控制5、A/D转换0809应用 15、数据存贮器扩展和程序存贮器扩展6、D/A转换0832应用 16、8031串行口应用实验(一)—双机通信实验7、串并转换实验 17、8031串行口应用实验(二)—与PC机通信8、定时计数器8253A应用 18、温度测量实验(5G14433应用)9、可编程键盘显示8279A应用 19、压力测量实验10、打印机接口应用第二章MCS—51实验系统安装与启动§ 2.1 MCS51实验系统安装与启动1. DVCC系列实验系统在出厂时均为51状态2. 如果系统用于仿真外接用户系统,将40芯仿真电缆一头插入系统中J6插座,另一头插入用户系统的8051CPU位置,注意插入方向,仿真头上小红点表示第一脚,对应用户8051CPU 第一脚。
3. 接上+5V电源,将随机配备的2芯电源线,红线接入外置电源的+5V插孔,黑线接入外置电源地插座。
上电后,DVCC系列实验系统上显示“P.”闪动。
如果是独立运行,按DVCC系列用户手册进入键盘管理监控,就能马上做实验。
键盘管理监控操作详见第一分册第四章。
如果连上位机工作,必须将随机配备的D型9芯插头一端插入DVCC 系统J2插座,另一端插入上位机串行口COM1—COM2任选。
然后按DVCC实验系统PCDBG键,再运行上位机上的DVCC联机软件,双方建立通信,往后详细操作见用户手册第五章。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一LED 流水灯一、实验目的1. 学习单片机并口的使用方法。
2. 学习延时子程序的编写和使用。
3. 学习集成开发环境MedWin的安装与使用。
4. 学习STC单片机在线下载软件STC-ISP的使用。
二、实验内容所谓流水灯就是4 个发光二极管(LED)轮流点亮,周而复始。
实验板上以P3口作输出口,接有四只发光二极管,当单片机的引脚输出为低电平时发光二极管点亮,为高电平时息灭。
编写程序,使4 个发光二极管循环点亮,时间间隔约0.5 秒。
三、实验电路连线实验板上与本实验有关的硬件如下图所示。
4 个LED上串联4 个限流电阻,以防止其电流过大而烧坏。
单片机的主时钟为11.0592MHz。
四、实验说明1、P3 口是准双向口,它作为输出口时与一般的双向口使用方法相同。
由准双向口结构可知当P1 口用作输入口时必须先对它置“1”。
若不先对它置“1”,读入的数据是不正确的。
输出时需要接上拉电阻,P3 口内部有弱上拉,若将外围电路设计为低有效,高无效,则无需再外接上拉电阻。
2、为使每次点亮一个LED,应使P3.4~P3.7 4 个端口中有一个为低,其余均为高,延时一段时间后再点亮另一个LED。
3、编写for 循环构成的软件延时子程序,在MedWin 下模拟执行,根据MedWin 显示的执行时间,调整循环变量的终值,使延时时间约0.5秒,在晶振频率为11.0592MHz情况下,循环终值约27000。
程序如下:void delay(void){ unsigned int i,j,k,l;for(i=0;i<=27000;i++){j++; k++;l++;};}#include <REG51.H>void main (void){ unsigned char i,c[4] = {0xef,0xdf,0xbf,0x7f};// 从左往右流水i = 0;while(1){ P3 = c[i & 3];i++;11delay();}}五、思考1、如何使点亮的LED 从右往左移动?2、如何使点亮的LED 从两边往中间移动?实验二用一位数码管循环显示0~9一、实验目的1. 学习单片机并口的使用方法。
2. 学习延时子程序的编写和使用。
3. 学习LED数码管的驱动编码。
二、实验内容实验板上有4 个LED 数码管,编写程序,使最右边的一个LED 数码管循环显示0~9 十个数字。
时间间隔约0.5 秒___________,其余LED数码管关闭。
12三、实验电路连线实验板上与本实验有关的硬件如上页图所示。
4 个共阳的LED 数码管上同名的引脚连接在一起,通过限流电阻接到单片机的P0 口(段控制)。
单片机P2 口的4个引脚分别控制4个LED 数码管的公共端(位控制)。
单片机的主时钟为11.0592MHz。
四、实验说明1、P0 口和P2 都是准双向口,输出时需要接上拉电阻。
P0 内部没有上拉电阻,P2 口内部有弱上拉,本实验外围电路设计均为低有效,故无需外接上拉电阻。
2、下表为驱动LED 数码管的段代码表,“0”代表对应的笔段亮,“1”代表不亮。
若需要在最右边显示数字“5”,只要将从表中查得的段代码2CH 写入P0口,再将P2.4 置低即可。
g c h d e b f a数字P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0十六进制0 1 0 1 0 0 0 0 0 A01 1 0 1 1 1 0 1 1 BB2 0 1 1 0 0 0 1 0 623 0 0 1 0 1 0 1 0 2A4 0 0 1 1 1 0 0 1 395 0 0 1 0 1 1 0 0 2C6 0 0 1 0 0 1 0 0 247 1 0 1 1 1 0 1 0 BA8 0 0 1 0 0 0 0 0 209 0 0 1 0 1 0 0 0 28A 0 0 1 1 0 0 0 0 30b 0 0 1 0 0 1 0 1 25C 1 1 1 0 0 1 0 0 E4d 0 0 1 0 0 0 1 1 23E 0 1 1 0 0 1 0 0 64F 0 1 1 1 0 1 0 0 74- 0 1 1 1 1 1 1 1 7F3、实现最右边的一个LED 数码管循环显示0~9十个数字的C 语言程序如下:#define U8 unsigned charsbit P2_4 = P2^4;code U8 tab[]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};void delay(void){ unsigned int i,j,k,l;for(i=0;i<=27000;i++){j++; k++;l++;};}13void main(void){ U8 i;P2_4 = 0;while(1){ P0 = tab[i];delay();i++;if(i==10) i = 0;}}五、思考题1. 分别写出六个字母(用于显示十六进制数)的段代码。
2. 能否交替点亮4个LED 数码管?实验三LED 数码管的动态驱动一、实验目的1、学习LED 数码管的动态驱动编程。
2、学习使用定时/计数器。
二、实验内容编写程序,使实验板上的4个LED数码管稳定显示4个不同的数字,并使这四位数从0000开始,每秒钟加一。
三、实验电路连线本实验有关的硬件见实验二。
四、实验说明在实验二中,我们已经能够让某一个LED数码管显示需要的数字,比如选让第一个LED显示“1”,隔一较短的时间(如5 毫秒)后关闭第一个LED,让第二个LED 显示“2”,如此周而复始,让4 个LED 依次显1、2、3、4,我们就能看到4 个LED 上稳定地显示4 个不同的数字。
当然,每个瞬间只有一个LED 被点亮,大家亮的时间相同,均为5 毫秒,4 个LED 数码管点亮一遍需要20 毫秒,一秒钟各亮50 次,所以看上去不会有闪烁感,但亮度只是实验二中LED亮度的四分之一。
要实现每隔5 毫秒变换一个LED,最好的方法是使用定时器中断。
C51 程序如下:#define U8 unsigned charU8 tab[] = {0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0x20,0x28};U8 scn[] = {0x7f,0xbf,0xdf,0xef};//先点亮左边一个数码管14U8 buf[4] = {0,0,0,0};// 显示缓冲区,开机先显示"0000"U8 cnt = 0; // 扫描计数void main(void){ EA = 1; // 允许中断TMOD = 0x01; // 设定时器0 为模式1(16 位)ET0 = 1; // 定时器0中断允许TH0 = 0xee; // 晶振11.0592MHz,5mSTL0 = 0;TR0 = 1; // 开始计数while(1); // 死循环,等待中断}void timeint(void) interrupt 1 // 定时器0中断服务程序{ char i;TH0 = 0xee; // 设置定时器时间常数TL0 = 0;i = cnt & 0x03; // 求应点亮的LED 号(从左到右依次为0,1,2,3)P0 = tab[buf[i]]; // 笔划代码送P0 口P2 = scn[i]; // 控制扫描码送P2口if(cnt==200){ cnt=0; // 到1 秒钟,显示的数字加一for(i=3;i>=0;i--){ buf[i]++;if(buf[i]==10) buf[i]=0;// 加到10 向前进位else break;}}cnt++;}五、思考题如何让4 个LED 数码管从0000开始,每秒钟自动加1,前两位代表分,后两位代表秒?实验四数字电子钟一、实验目的进一步熟悉定时/计数器的使用。
二、实验内容15在实验板上编写程序,实现电子钟功能。
时间显示格式为HH.MM,中间的小数点每秒钟闪烁一次。
三、实验电路连线本实验有关显示部分的硬件见实验二,按钮连接见实验四。
四、实验说明实验二及实验三中LED 数码管的笔划代码均不含小数点(h 位为1,小数点不亮),为了让第2 个LED 的小数点在每一秒的前半秒亮,后半秒灭,应在定时器的中断子程序中,判断当前时间为前半秒,而且动态扫描到第2 个LED时,将其笔划代码取出,和0xDF 相与后再写入P0 口。
该电子钟在上电或复位后时间均从00 时00 分00秒开始,若要使电子钟断电后照常行走,应采取电池供电。
为了降低使用成本及减小体积,可采用两节5 号电池,其满电量时电压为3 伏,89C51单片机的正常工作电压范围为4.5~5.5 伏,无法使用,可选用89C2051 单片机(电压范围2.7~6 伏),最好使用工作电压更低的单片机(如工作电压为1.8伏的AVR单片机)。
为了延长电池使用寿命,必须采取一些节电措施,如将LED 换成液晶、让单片机不工作时进入休眠方式、适当降低单片机的时钟频率等。
五、思考题给电子钟加上能输入当前时间的功能。
实验五自动演奏乐曲一、实验目的(1)进一步熟悉89C51定时器/计数器的功能及应用;(2)掌握其初始化与中断服务程序的编程方法;(3)掌握用定时器/计数器产生不同频率方波的编程方法。
二、实验内容用单片机的定时器/计数器0 作定时器使用,工作于模式1,中断产生方波发声,根据简谱中各个音阶的频率,计算对应的定时时间常数,定时器中断后按此常数赋初值,从而发出对应的音调。
将歌曲的音调和节拍各编成一个表(数组),用音调作为定时器的初值,用节拍控制发音时间,就可以实现自动演奏乐曲。
三、实验电路连线本实验有关的硬件如右图所示。
四、实验说明16产生音阶定时初值的计算:根据下表的音阶频率,计算对应的音阶周期T,用T/2 计算定时周期数(晶振11.0592MHz),填入下表中。
定时器的计数初值为65536-定时周期数,由程序计算产生。
定时周期数增加1 倍,音阶降低八度,定时周期数降低1 倍,音阶升高八度。
音阶表的编码规则为,音阶1-7 用11-17 表示,高八度音阶1-7用21-27表示,低八度音阶1.-7.用1-7 表示。
节拍表的编码规则为,1 拍为16,约570mS,1/2 拍为8,1/4 为4,依此类推。
下面是《康定情歌》的简谱及编码,上一行数字是音阶编码,下一行数字是节拍编码。
自动演奏《康定情歌》乐曲的C51程序为:#include <REG51.h>#define U8 unsigned charcode unsigned int cyc[]={1800,1600,1440,1351,1200,1079,960};//音阶1-7 的半周期数code U8 tone[]={13,15,16,16,15,16,13,12,12,13,15,16,16,15,16,13,13, 13,15,16,16,15,16,13,12,12,15,13,12,13,12,11,12,6,6,12,15,13,12,6,6,15,13,12,13,12,11, 12,6,5,6,0xff};// 乐曲《康定情歌》的简谱表code U8 time[]={8,8,8,4,4,8,8,12,4,8,8,8,4,4,8,16,8,8,8,8,4,4,8,8,12,4,8,8,4,4,音阶(C 调) 1 2 3 4 5 6 7频率(Hz) 256 288 320 341 384 427 480周期(μs) 3906 3472 3125 2932 2604 2342 2083半周期数1800 1600 1440 1351 1200 1079 960174,4,8,24,8,24,8,24,8,16,8,8,8,4,4,4,4,8,16,8,32};// 节拍表U8 H0,L0,cnt;sbit P2_3 = P2^3;sbit P3_2 = P3^2;void cntint0(void) interrupt 1 // 定时器0中断用于产生音阶方波{ TH0=H0;TL0=L0;P2_3=~P2_3; // P2.3是音乐信号输出脚,P2.3反相,产生方波}void cntint1(void) interrupt 3 // 定时器1 中断用于产生节拍延时{ cnt++; // 计数初值为0,所以不用赋值}void main(void){ U8 i,a,t;unsigned int b;next:TMOD=0x11;EA=1;ET0=1;ET1=1;cnt=0;TR1=1;i=0;while(1){ t=tone[i]; // 读音调if(t==0xff) break; // 0xff 是结束符if(t!=0) // 0 是休止符{ b=cyc[t%10-1]; // 根___________据基本音阶,求出半周期数if(t<10) b=b*2; // 若是低八度音阶,半周期数加倍if(t>20) b=b/2; // 若是高八度音阶,半周期数减半H0=(65536-b)/256; // 根据半周期数,计算T0初值的高字节和低字节L0=(65536-b)%256;TR0=1; // 启动定时器0 发音}cnt=0;a=time[i]; // 读节拍while(a>cnt);TR0=0;i++;for(b=0;b<1000;b++); // 稍加延时,增强节奏感18}P2_3=1; // 关闭喇叭while(P3_2==1); // 等待按INT 键goto next; // 重放一遍}五、思考题将程序改成演奏别的乐曲。