实验单片机指导书
实验说明
实验1:定时控制实验
要求:电路连接与编程相结合,控制灯按一定规律点亮和熄灭。注意:灯为低电平驱动。
实验报告:说明灯亮的方式;画出实际电路图、程序流程图和源程序(要有详细注释)。
实验2:密码锁实验
要求:三个数码键一个确认键,按设定的密码(开关顺序)使灯点亮。
注意:为消除开关触点抖动,判断时要加10毫秒左右的延时。
实验报告:说明密码顺序;画出实际电路图、程序流程图和源程序(要有详细注释)。
实验3:音乐发生器实验
要求:电路连接与编程相结合,使单片机演奏一段乐曲。
实验报告:画出实际电路图、程序流程图和源程序(要有详细注释)。
实验4:串口通讯实验
要求:两人为一组,一人为发一人为收,通过串口连接。用发者的开关控制收者的灯点亮或发出音响。之后二人交换收、发。实验报告:画出电路图、程序流程图和源程序(要有详细注释)。
硬件测试程序
main: mov p0,#0ffhmov p1,#0ffhmov p2,#0ffhmov p3,#0ffhacall spk1
mov p0,#00hmov p1,#00hmov p2,#00hmov p3,#00hacall spk2
sjmp main
spk1: mov r0,#0ffhmov r2,#0ffhacall spk
ret
spk2: mov r0,#0ffhmov r2,#0dfhacall spk
ret
spk:cpl p1.0
lp1:mov a,r2,mov r5,adjnz r5,$cpl p1.0djnz r0,lp1
ret
;端口设置 ;1-灯灭
;调音响1 ;端口清0 ;灯亮
;调音响2 ;返回重复
;设音响1 ;参数 ;调音响
;设音响2 ;参数 ;调音响
;P1.0翻转
关键词:单片机,教学改革,毕业设计
1 单片机教学的现状与存在的问题
毕业设计是教学过程的最后阶段采用的一种总结性的实践教学环节。通过毕业设计, 能使学生综合应用所学的各种理论知识和技能, 进行全面、系统、严格的技术及基本能力的练习。
电子、电气专业学生毕业设计课题有不少是单片机应用类的, 如单片机电机调速控制、单片机人机接口、单片机温度湿度控制、单片机数据采集系统等等[1]。但是很多同学在毕业设计过程中, 很少有人能调试成功程序并完成实物设计, 大都通过查找资料完成一篇纯理论的毕业论文, 这就把一门应用性很强的课程与生产实践完全脱离了。这样培养出来的学生怎能适应社会的需要呢[2]?
2 毕业设计指导对单片机教学改革的提示
要完成这类课题, 要求学生具有较好的模拟电路和数字电路知识, 有一定的编程能力, 还要求其具有较好的单片机知识。很多学生虽然都学过这些知识, 但是都停留在理论阶段, 所以感觉不好做, 无从下手。
我指导的方法是:理论加实践。任何一门课的学习, 都离不开这个老套的思路, 知识理论学习到一定程度, 一定要实践来验证。下面是我在指导学生在做毕业设计时的一点体会, 写出来和大家分享。
2.1 态度要端正, 学习单片机, 最忌讳心浮气躁, 刚开
始学的时候, 不要怕自己会犯错误, 程序调不通, 烧毁板子, 这些都是正常的事情, 这时就要有耐心, 从底层找起, 相信每找出一个错误都会有一个新的收获。切不可轻言放弃!
2.2 打好基础, 建议从网上看单片机视频教程, 如北航的陈博老师的视频和郭天祥的十天学会单片机。
再结合课本, 如谭浩强的《C程序设计》, 和李全利的《单片机原理及其应用技术》, 把基础知识学好, 就可以从一个点出发, 逐渐触及其它知识。
2.3 动手实践
让学生去买一些基础的板, 从焊接板子中不但可以练习学习软硬件, 还可以学会一种调试开发板的方法, 更可以学习焊接技术, 一举而多得。需要的元件有:一片STC89C52单片机、一个11.0592M HZ的晶振、2个20PF的电容、1个0.1UF的电容和4.7K的电阻、一小块电路板和一个插针, 自己搭建焊接单片机最小系统, 然后检查这个系统是否能正常工作。如果能正常工作, 准备软件:KEIL软件 (编译程序) 、烧写软件, 程序最好还是用C语言编程。这些软硬件都准备好后, 在整个毕业设计指导中, 老师要为学生精选实验, 选取的原则应由易到难、由单一性实验到综合性实验、由实例性实验到设计性实验, 最终能达到合作完成一个综合性项目的能力。实际指导中, 在毕业设计初期时选取一些简单控制项目, 目的是熟悉指令和编程技巧, 如:清零程序、拆字程序、数据排序、无符号数双字节快速乘法子程序、多分支程序等软件实验程序;在中期选取一些外围电路控制的实例实验, 目的是学习单片机的内部结构和外围常用设备的控制方法, 如:流水灯、数码管、液晶、DS1302时钟、DS18B20、A/D、D/A等外围常用设备的控制实验, 再深入就可以结合一些具体实例扩展一些中断、串口通讯等功能。通过实验, 使你感受到指令产生的控制效果, 眼睛看得见 (灯光) 、耳朵听得到 (声音) , 更能深刻理解指令是怎样转化成信号去实现控制。边学习、边演练, 循序渐进, 这样用不了几次就能将所用到的指令理解、吃透、扎根于脑海, 甚至“根深蒂固”;在后期要选取综合性、设计性的实验, 这些实验应该是在前期基础上的综合应用和开发, 包括硬件电路和软件开发, 并且这些设计要在教科书和网络中找不到, 学生不可抄袭, 需要完全独立开发完成, 如:油库自动化系统设计:其中包含数据采集模块、人机接口模块、通讯模块等, 都可以交给学生去设计实现。
2.4 合理安排时间持之以恒
学习单片机不能“三天打鱼, 两天晒网”, 要有持之以恒的毅力与决心。学习完几条指令后, 就应及时做实验, 融汇贯通, 而不要等几天或几个星期之后再做实验, 这样效果不好甚至前学后忘。另外要有打“持久战”的心理准备, 不要兴趣来时学上几天, 无兴趣时凉上几星期。学习单片机很重要的一点就是持之以恒。
以上是我在指导学生做毕业设计过程中, 根据学生实际情况总结的学习方法, 经过几年的指导发现, 实践证明在安徽建筑工业学院的大四学生中有70%的能够在老师的指导下能完成设计, 学生对此很感兴趣, 并且从根本上了解了单片机, 毕业设计都自己动手做出来了, 收获很大, 这样的学生也备受工作单位的欢迎。相信这些能够给教学带来一些指导意见, 从而使学生喜爱单片机。
参考文献
[1]李全利.单片机原理及应用技术[M].北京:高等教育出版社.2009:5-12.
[2]刘新.单片机教学改革的思考与实践[J]山东电力高等专科学校学报, 2009, 12 (3) :65-68.
【摘 要】针对单片机课程设计这门课程传统实验方式的不足之处,设计了一种新的实验项目;围绕“单片机系统设计方法”这一主线,从计算器系统电路的构成、仿真图的绘制、程序的编写、印制电路板的设计等方面对新项目的实施做了详细分析。
【关键词】单片机课程设计 计算器系统 实验课
【中图分类号】G 【文献标识码】A
【文章编号】0450-9889(2016)01C-0163-03
单片机课程设计作为单片机原理课程的延伸,是一门以学生动手实践为主的实验课。本课程在传统的教学中一般会以单片机实验箱作为操作的平台。教师设计一个综合的实验项目,学生在实验箱上完成线路的连接程序的调试运行等操作,之后学生完成设计报告。单片机实验箱内模块众多、接线杂乱,与实际应用不符,不利于学生理解和掌握单片机控制系统的设计过程及调试方法。因此在单片机课程设计中有必要引入一种新的实验形式。该实验项目作为单片机课程设计的一个综合实验内容,既要做到有别于单片机原理课程的验证性实验,又要做到理论联系实际,具有一定的实用价值,还要能够体现单片机系统开发的流程,激发学生的学习兴趣,增强学生的动手能力。
鉴于此,开发了一个“计算器的设计”项目作为单片机课程设计的教学内容。本项目的要求如下:设计一个简易计算器,能实现8位数之内的加减乘除运算,并要求学生按照单片机控制系统的开发流程,完成电路的仿真、程序的编写、电路图绘制、PCB板制作、焊接调试等工作。
一、计算器项目总体设计
为了实现计算器的功能,本系统应由单片机、输入模块、显示模块、声光提示模块和电源模块几部分构成,其组成框图如图1所示。
(一)控制器的选择
本项目中选取STC90C58RD+单片机作为控制器。STC90C58RD+与AT89C51完全兼容,可直接替换。前者具备高达1280Btye的SRAM,32K字节flash存储器,29K字节EEPROM,更高的可靠性及更低的功耗,使得它被越来越多的单片机开发者选用。
(二)显示模块的设计
单片机系统的输出显示部分,可以选用液晶屏或者数码管。液晶屏价格相对较贵,驱动程序编写较复杂,而数码管具有价格低廉、驱动电路简单、控制程序容易编写等特点。而且本设计要求完成8位数范围内的计算,因此使用8位数码管作为显示器件。
(三)输入模块的设计
按键作为单片机系统人机交互的输入部分,有独立式按键和行列式按键之分。独立式按键占用单片机的IO口资源较多,不选用。本计算器项目中,需要输入0-9的数字键以及代表各种运算操作的按键,需要按键数量多,因此选用行列式键盘。行列式键盘通过对行线和列线的电平状态的组合来判断哪个键被按下,可以用较少的IO口得到较多的按键。在本设计中采用4×4的行列式按键。
(四)声光提示模块的设计
本设计中需要在按键按下时发出“嘀”提示音,而且在运算结果溢出的时候发出声光提示。溢出选用最常用的蜂鸣器和发光二极管作为声光提示模块。
二、计算器项目的仿真
在电路实际制作之前的仿真是单片机系统开发过程中一个非常重要的环节,通过仿真能够验证设计方案是否可行。本设计是一个单片机系统,既有电路的仿真又有程序的仿真,因此选用Proteus软件进行系统仿真。
仿真软件Proteus是英国Lab Center Electronics公司研制的EDA软件。它不但和普通仿真软件一样能够仿真模拟电路,最大的特色是能够仿真单片机及外围器件,能进行代码调试。
学生熟练掌握本软件的使用,对完成单片机项目的设计开发有较大的促进作用。
(一)仿真电路设计
1.单片机最小系统仿真电路设计
单片机的最小系统指单片机工作的、由最少的电路构成的系统,包括晶振电路和复位电路。晶振X1和两个瓷片电容C1、C2构成了单片机的时钟电路。手动复位按键、电解电容C3和电阻R2构成单片机的上电复位和手动复位电路。
2.显示模块仿真电路设计
数码管的驱动由断码驱动和位选端驱动构成。单片机的P0口用于输出数码管的段码。由于P0口是标准的双向IO口,内部没有上拉电阻,因此P0口连了一个1K的排阻RP1。P2口的8个引脚用于控制8个数码管的位选端,分别经过Q2-Q9这8个三极管驱动8位数码管。
3.输入模块仿真电路设计
单片机的P1口连接一个4×4的行列式键盘。P1口的低4位作为行列式键盘的4条列线,高4位作为行列式键盘的4条行线。
4.声光提示模块仿真电路设计
声光提示电路由一个发光二极管和一个蜂鸣器构成。蜂鸣器由NPN型三极管Q1驱动。当系统上电时P3.6引脚为高电平,三极管截止,蜂鸣器不会误动作。当需要蜂鸣器发出声音时置P3.6引脚为低电平即可。发光二极管有P3.3引脚控制,低电平有效。
综上各个模块,此计算器系统完整的仿真电路如图2所示:
(二)计算器程序设计
计算器项目的控制程序在Keil C软件中完成。Keil 是一款针对51单片机内核的集成编译环境,具有很高的编译效率。
1.程序设计思路
本程序主要完成3方面的任务:扫描数码管、扫描按键、处理按键;因此编制了两个独立的函数Display( )和KeyBoard( )完成扫描数码管和扫描按键的功能。为了在按下不同的键值的时候完成不同的功能,使用了switch语句,这样程序的结构会比较清晰。
在主程序里面定义了以下几个变量:
unsigned char Key,InputCnt,LastOpt。
unsigned long Result,InputData。
变量Key用于暂存当前按下去的键值。
变量InputCnt用于存放输入数字的个数,当输入数字超过8个时就不能接收这个数字,并报警提示;
变量LastOpt用于存放前一次输入的运算类型。因为按下加、减、乘、除中某种运算的时候,计算器做的并不是当前的这种运算类型,而是前一次按下的运算类型。
变量Result用于存放运算的结果。由于计算器可以进行连续的多次运算,Result的值是会在每次运算之后改变的。
变量InputData用于保存输入的操作数,并作按下某种运算的按键后与Result的值进行相应的运算,把结果保存到Result里面。
2.主程序设计
程序的流程图如图3所示。
系统上电后首先进行系统初始化,对各个变量赋初值。然后调用按键函数,判断是否有键按下。若无按键按下则扫描数码管,接下来再次扫描按键。
若有按键按下,则会出现3种情况。第一种情况,按下的为数字键“0-9”,而且输入数字的位数InputCnt小于8的话,就把按下去的键值接收到变量InputData里面,更新一次显示缓冲区,让数码管显示输入的数字。如果InputCnt大于等于8,说明输入数字的位数已经达到最大不能再输入了,并发出报警提示;第二种情况,按下的键为“加、减、乘、除、等于”键,则根据LastOpt的取值把变量Result和InputData的值进行运算,并把结果存放到Result里面。同时更新一次显示缓冲区,让数码管显示运算的结果;第三种情况,按下的键为清零键“C”,则给各个变量重新赋初值,显示缓冲区清零,准备开始下一次计算。
3.子程序分析
在程序中调用了几个子函数,这几个子函数的逻辑关系如图4所示。
函数原型: void FillDispBuf(ulong a)
函数功能: 把ulong a这个数处理后存入显示缓冲区。若a没有超过8位十进制数的范围则把它拆分后直接存入显示缓冲区即全局数组DispBuf[8];若a超过这个范围则需要在数码管显示“Error”,因此需要把这几个字形的段码存入DispBuf[8]。
函数原型: uchar KeyBoard(void)
函数功能: 读取4×4行列式键盘的键值。若有按键按下则返回0- 15之间的某个键值,若无按键按下则返回21。
函数原型: void Display(void)
函数功能: 扫描8位数码管。全局数组uchar DispBuf[8]为显示缓冲区。本函数把数组DispBuf[8]里面的8个元素的数值在8个数码管上显示出来。
函数原型: void DelayMs(uint j)
函数功能: 延时N毫秒,参数 j 表示需要延时的时间为j毫秒。
在实验的过程中,只要把几个子函数的代码及相应功能告诉学生,学生就能在此基础上进行顶层代码的编写调试。如果学生时间充裕,也可自己编写以上几个子函数的代码。
三、计算器实物的制作及调试
本项目的设计内容在仿真软件中验证通过之后,就是实物电路的制作。电路图原理图和PCB图的设计在PROTEL99SE中完成。
本设计所需元件清单如表1所示。实验室为每个学生准备一套对应的元器件。
为了更好的让学生掌握单片机系统开发的流程,后续的实验有3种方式可以进行,每个学生可根据自己的实际情况选择。
A:学生可根据原理图和元件清单中的元器件,在万用板上自己焊接这个电路。直到电路调试成功,并下载程序运行。
B:学生可根据电路原理图绘制PCB电路板,并在实验中完成电路板的转印、腐蚀、钻孔等操作,然后焊接元器件并调试运行。
C:实验室通过专业的电路板工厂把“计算器项目”的PCB板加工出来。并且把此电路板及配套的元器件分发给学生焊接调试。统一生产出来的电路板及元器件套件如图5所示。
最终学生都能制作出一个调试成功的实物计算器。
通过对单片机课程设计新实验项目的实施,改变了本课程的教学组织形式,激发了学生的兴趣,增强了学生的动手能力。学生在完成“计算器设计”项目的过程中掌握了单片机系统的设计方法以及调试技巧。实践表明这样的方式收到了良好的效果,具有较大推广价值。
【参考文献】
[1]代芬,王卫星,邓小玲,等.单片机综合实验开发板设计[J].实验室研究与探索2010,29(8)
[2]林祥果.高职单片机课程设计与教学实践[J].宁波职业技术学院学报,2014,18(01)
[3]潘谈.基于STC89C58芯片的小型GPS船舶航迹仪的设计[J].船舶科学技术,20=14,36(12)
[4]袁芳,江伟,陈冬等.篮球比赛场地计时计分系统的设计[J].实验室研究与探索,2014,33(11)
[5]王海燕,杨艳华.Proteus和Keil软件在单片机实验教学中的应用[J].实验室研究与探索,201,31(5)
[6]包建华,张兴奎,丁启胜.模块化单片机实验系统的研制[J].电气电子教学学报,2010,32(6)
目的: 1.掌握单片机仿真软件的使用。
2.掌握单片机汇编语言程序设计的基本方法。
3.掌握单片机编程、调试方法。
设计题目:
1、试编写程序。统计内RAM 30H一50H单元中FFH的个数,并将统计结果存51H。
2、从内RAM 30H单元开始存放着一组无符号数,其个数存在21H单元中。试编写程序,找出其中最小的数,并将其存入20H单元中。
3、设外RAM 2000H单元中有一个8位二进制数,试编程将该数的低四位屏蔽掉,并送回原存储单元。
4、试编写程序,求出内RAM20H单元中“1”的个数,并将结果存入21H单元。
5、试编一程序,分别统计在内部RAM的30H~50H单元的数据区中奇数和偶数的个数,并将奇数和偶数的个数分别存放在51H和52H单元中。
6、在2000H~2004H单元中,存有5个压缩的BCD码,试编程将它们转换成ASCII码,并存入2005H开始的连续单元中。
实验报告格式:
一.设计题目:
二.编程实现:(左边为实验前的程序,右边为实验后调试正确的程序)
三.实验小结:
软件实验小结:
可以从以下几个方面总结
1. 进一步掌握并理解单片机指令系统的功能及应用(熟悉MCS—51单片机指令
系统)。
2. 加深对寻址方式的理解。
3. 了解程序设计过程,掌握单片机程序设计的基本方法。
4. 掌握编程、调试方法(包括排除程序错误、决解问题的方法)。
5. 掌握单片机仿真软件的使用(包括对以后项目开发的好处)
6. 通过编程设计、软件调试,进一步了解和掌握单片机软、硬件的工作原理,为
教
冯
案
杰
实验一(1)顺序结构程序设计
一、实验目的
掌握汇编语言设计和调试方法。熟悉KeilC和Protus仿真软件的使用。
二、实验内容
1、电路如图一所示。将A的内容通过P2口送LED发光二极管显示。
2、修改程序,实现跑马灯的显示效果。
四、实验步骤
1、在计算机某个硬盘中建立项目文件夹。例如“shiyan1”或者“ex1”。
2、启动KEILC程序。
3、打开主菜单中的“project”下的“new project”建立新的项目。按照要求输入项目文件名,例如“shiyan1.prj”。注意:项目应该建立在第一部的文件夹中。
4、打开主菜单中的“file”下的“new file”,建立新的汇编语言文件。录入程序,并将文件命名为“ex1.asm”,存入项目文件夹中。
5、将第四步建立的文件加入到项目中。
6、编译项目文件,查错。
7、启动protus软件,将电路图一输入计算机,并存到项目文件夹中。
8、在protus软件中,使用鼠标左键双击,将第六步编译后所产生的“shiyan1.hex”文件写入到单片机中。
9、在protus软件中运行程序。
10、将A中的内容修改为“0AAH”,重新编译程序,并运行,观察结果。
五、思考
如何用断点方式调试本程序。
ORG 0000H
LJMP START
ORG 0030H START: MOV A,#55H
MOV P1,A
SJMP $ END
实验一(2)循环结构程序设计
一、实验目的
熟悉MCS-51指令系统,掌握程序设计方法。
二、实验内容
编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单元字节无符号的正整数,按从小到大的次序重新排列。
三、程序框图
四、实验步骤
1、LED环境
⑴在“P.”状态下按“0→EV/UN”,装载实验所需的代码程序。⑵对片内RAM地址50h~5AH进行不规则置数。
⑶在“P.”状态下键入0000,然后按“STEP”或“EXEC”进入实验项目的调试与运行。
2、PC环境
在与PC联机状态下,编译、连接、下载PH51se05.asm,用连续或单步方式运行程序。
3、运行结果检查
⑴在单步运行时每走一步可观察其运行结果。
⑵在连续运行状态下,应按“暂停图标”或实验箱上的“暂停按钮”,使系统无条件退出用户运行状态返回监控,然后再用相应的命令键观察与检查片内50~5Ah中内容是否按从小到大排列。
五、思考:修改程序把50~5Ah中内容按从小到大排列。
ORG 0000H LJMP START ORG 0030H
START:
MOV R7,#09H MOV R6,#00H;清除标志 CLR C MOV A,@R0 INC R0 SUBB A,@R0 JC LOOP1 MOV R6,#01H DEC R0 MOV A,@R0 INC R0 XCH A,@R0 MOV @R0,A DJNZ R7,START1 CJNE R6,#00H,START SJMP $ END
MOV R0,#50H START1:
DEC R0
INC R0 LOOP1:
实验一(3)选择结构程序设计
一、实验目的
掌握汇编语言的编程。
二、实验内容
编写程序,根据送入的数据转移运行。
三、程序框图
四、实验步骤
ORG 0000H
LJMP START
ORG 0030H START: MOV 20H,#00H MOV A,20H
MOV B,#03H
MUL AB
MOV DPTR,#TAB
JMP @A+DPTR
SJMP $ ORG 3000H TAB:
LOOPA: MOV A,#01H LOOPA1:
LOOPB: MOV A,#03H LOOPB1:
LOOPC: MOV A,#07H LOOPC1:
DELAY1S: DELAY1S3: DELAY1S2: DELAY1S1:
LJMP LOOPA LJMP LOOPB LJMP LOOPC MOV P1,A LCALL DELAY1S RL A LJMP LOOPA1 MOV P1,A LCALL DELAY1S RL A LJMP LOOPB1 MOV P1,A LCALL DELAY1S RL A LJMP LOOPC1 MOV R7,#5 MOV R6,#200 MOV R5,#250 DJNZ R5,DELAY1S1 DJNZ R6,DELAY1S2 DJNZ R7,DELAY1S3 RET END
实验二 中断实验
一、实验目的
熟悉单片机中断概念及中断编程方法。
二、实验内容
编写程序,从P3.3输入脉冲,记录输入脉冲个数,并用P1口外部链接的发光二极管显示计数结果。
二、参考程序
ORG 0000H
LJMP START
ORG 0013H
LJMP INT1_COUNT
ORG 0030H START:
MOV SP,#60H
MOV A,#00H
SETB IT1;下降边沿触发方式
SETB EX1;开启INT1中断
SETB EA
SJMP $ INT1_COUNT:
INC A
MOV P1,A
RETI
END
实验三 LED显示实验
一、实验要求
利用实验系统提供的显示设备,动态显示一行数据。
二、实验目的
⑴了解数码管动态显示的原理; ⑵了解用总线方式控制数码管显示。
三、实验说明
UN2003芯片,是7个带驱动的反相器。8个数码管均为共阴极接法。
四、程序框图
汇编语言参考程序:
ORG 0000H LJMP START ORG 0030H START: MOV SP,#60H MOV 50H,#8CH;显示字符P.MOV 51H,#40H MOV 52H,#79H MOV 53H,#24H MOV 54H,#30H MOV 55H,#19H MOV 56H,#12H MOV 57H,#02H
LOOP1: LCALL DISPLAY
LJMP LOOP1
DISPLAY: MOV P2,#0FH MOV P0,50H LCALL DELAY20MS
MOV P2,#1FH MOV P0,51H LCALL DELAY20MS
MOV P2,#2FH MOV P0,52H LCALL DELAY20MS
MOV P2,#3FH MOV P0,53H LCALL DELAY20MS
MOV P2,#4FH MOV P0,54H LCALL DELAY20MS
MOV P2,#5FH MOV P0,55H LCALL DELAY20MS
MOV P2,#6FH MOV P0,56H LCALL DELAY20MS
MOV P2,#7FH MOV P0,57H LCALL DELAY20MS
LJMP DISPLAY
DELAY20MS: MOV R7,#20 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET
TAB: DB 40H,79H,24H,30H,19H,12H,02H;0 1 2 3 4 5 6 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符码
TAB1: DB 8CH;P.TAB2: DB 7FH;END 的字符码的字符码
空,不显示的字符
键盘电路实验
电路图:
程序:
;用int1中断实现按键功能,键值存放在4fh单元中;通过P1口输出按键值,用发光二极管显示按键值;通过P2.4--P2.6和三八译码器输出八列按键扫描码;通过P2.0---P2.3读入按键的行值;行列值组合,就是按键的键值 ORG 0000H LJMP START ORG 0013H LJMP key_value ORG 0030H START: MOV 4fH,#00h;存放按键键值单元 MOV P1,#00H MOV P2,#0FFH setb ex1 setb it1 setb ea KEY_SCAN: MOV P2,#0FH LCALL DELAY5MS
MOV P2,#1FH LCALL DELAY5MS
MOV P2,#2FH
LCALL DELAY5MS
MOV P2,#3FH LCALL DELAY5MS
MOV P2,#4FH LCALL DELAY5MS
MOV P2,#5FH LCALL DELAY5MS
MOV P2,#6FH LCALL DELAY5MS
MOV P2,#7FH LCALL DELAY5MS
LJMP KEY_SCAN
DELAY5MS: MOV R7,#40 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET
KEY_VALUE: PUSH ACC PUSH PSW MOV A,P2 MOV 4FH,A MOV P1,A POP PSW POP ACC RETI END
LED和键盘综合实验
电路图:
参考程序:
ORG 0000H LJMP START ORG 0013H LJMP KEY_VALUE ORG 0030H START: MOV SP,#60H
MOV 4fH,#00h;存放按键键值单元 MOV P2,#0FFH setb ex1 setb it1 setb ea
MOV 50H,#0CH;显示字符P.MOV 51H,#0CH MOV 52H,#7FH MOV 53H,#7FH MOV 54H,#7FH MOV 55H,#7FH MOV 56H,#7FH
MOV 57H,#0CH
LOOP1: LCALL DISPLAY
LJMP LOOP1
DISPLAY: MOV P2,#0FH MOV P0,50H LCALL DELAY20MS
MOV P2,#1FH MOV P0,51H LCALL DELAY20MS
MOV P2,#2FH MOV P0,52H LCALL DELAY20MS
MOV P2,#3FH MOV P0,53H LCALL DELAY20MS
MOV P2,#4FH MOV P0,54H LCALL DELAY20MS
MOV P2,#5FH MOV P0,55H LCALL DELAY20MS
MOV P2,#6FH MOV P0,56H LCALL DELAY20MS
MOV P2,#7FH MOV P0,57H LCALL DELAY20MS
LJMP DISPLAY
DELAY20MS: MOV R7,#20 DELAY1: MOV R6,#100 DELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1
RET
KEY_VALUE: PUSH ACC PUSH PSW MOV 4FH,P2 LCALL KEY_VALUE_DISP POP PSW POP ACC RETI
KEY_VALUE_DISP: MOV A,4FH ANL A,#0F0H SWAP A MOV DPTR,#TAB MOVC A,@A+DPTR MOV 56H,A MOV A,4FH ANL A,#0FH MOVC A,@A+DPTR MOV 57H,A RET
TAB: DB 40H,79H,24H,30H,19H,12H,02H;0 1 2 3 4 5 6的字符码 DB 78H,00H,10H,08H,03H,46H,21H,06H,0EH;7 8 9 A B C D E F的字符码
TAB1: DB 8CH;P.的字符码
TAB2: DB 7FH;空,不显示的字符 END
实验四 A/D转换实验
一、实验目的
(1)掌握A/D转换与单片机接口的方法;(2)了解A/D芯片0809转换性能及编程方法;(3)通过实验了解单片机如何进行数据采集。
二、实验内容
利用实验系统上的0809做A/D转换器,实验系统上的电位器提供模拟量输入,编制程序,将模拟量转换成数字,通过数码管显示出来。
三、程序框图
四、实验电路
五、实验步骤
把0809的零通道INT0用插针接至AINl孔,0809CS位FFE0孔,运行程序,数码管显示0809.XX,后二位显示当前采集的电压转换的数字量,调节W1,该二位将随着电压变化而相应变化。
六、思考
修改程序,用其它通道轮流采样显示。
实验五 电脑时钟(定时器、中断综合实验)
一、实验目的
熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用实时程序的设计与调试技巧。
二、实验内容
编写程序,从本实验系统键盘上输入时间初值,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示。
三、程序框图
四、实验步骤
连续运行程序,在键盘上输入时间初值,按执行键EXEC执行,数码管上实时显示时间值。
五、思考
(1)电子钟走时精度和程序中那些常数有关?
(2)修改程序使定时器工作方式改变,调节有关参数,进一步提高精度。
六、参考程序
ORG 0000H LJMP START ORG 000BH LJMP T0_INT ORG 0030H START: MOV 50H,#00H;时的低位字符码 MOV 51H,#00H;时的高位字符码 MOV 52H,#00H;“-”的字符码 MOV 53H,#00H;分的低位字符码 MOV 54H,#00H;分的高位字符码 MOV 55H,#00H;“-”的字符码 MOV 56H,#00H;秒的低位字符码 MOV 57H,#00H;秒的高位字符码 MOV 5FH,#00H;存放小时的单元 MOV 5EH,#00H;存放分钟的单元 MOV 5DH,#00H;存放秒的单元 MOV 5CH,#00H;存放T0中断次数,50次为1秒
MOV SP,#60H;设置堆栈栈顶 MOV TH0,#???;设置T0定时器初值 MOV TL0,#??? MOV TMOD,#00000001H;T0工作在定时方式,工作方式0
SETB ET0;开放T0中断 SETB EA;开放总中断 SETB TR0;启动定时器T0 LOOP: mov P2,#11111110H MOV R0,#50H loop1: MOV R7,#08H LOOP2: MOV A,@R0 MOV P1,A LCALL DELAY INC R0 MOV A,P2 RL A MOV P2,A
DJNZ R7, LOOP2 LJMP LOOP SJMP $
DELAY: MOV R6,#2;延时程序 DELAY1: MOV R5,#10 DELAY2: MOV R4,#100 DELAY3: DJNZ R4,DELAY3 DJNZ R5,DELAY2 DJNZ R6,DELAY1 RET 16
T0_INT: CLR TR0 PUSH ACC MOV A,5CH CJNE A,#50H,T0_INT1 MOV 5CH,#00H MOV A,5DH CJNE A,#59H,T0_INT2 MOV 5DH,#00H MOV A,5EH CJNE A,#59H,T0_INT3 MOV 5EH,#00H MOV A,5FH CJNE A,#23H,T0_INT4 MOV 5FH,#00H LJMP T0_END T0_INT1: INC 5CH LJMP T0_END T0_INT2: INC 5DH LJMP T0_END T0_INT3: INC 5EH LJMP T0_END T0_INT4: INC 5FH T0_END: MOV A,5FH
MOV B,#10 DIV AB MOV 51H,A MOV A,B MOV 50H,A MOV A,5EH MOV B,#10 DIV AB MOV 54H,A MOV A,B MOV 53H,A MOV A,5DH MOV B,#10 DIV AB MOV 57H,A MOV A,B MOV 56H,A POP ACC
MOV TH0,#??? MOV TL0,#??? SETB TR0 RETI
实验六 LCD液晶显示屏实验
一、实验目的
⑴掌握单片机扩展液晶显示接口的设计与编程。⑵利用字符式液晶显示器显示字符。
二、实验内容
编制程序,在液晶显示器上显示:
学生所在的院系的汉语拼音字母和学生的名字。分两行显示。
三、实验电路
四、参考程序
DAT1 EQU 30H;第一参数单元 DAT2 EQU 31H;第二参数单元 COM EQU 32H;指令代码单元 C_ADD EQU 0100H;指令通道地址 D_ADD EQU 0000H;数据通道地址
org 0000h ljmp main org 0030h;主程序
MAIN: MOV SP,#60H;
lcall delay;上电延时
LCALL INT;初始化
LCALL CLEAR;清缓冲区
TEST: LCALL hgnu_disp;显示“WELCOM TO HGNU” LCALL PL_XW_ZKB;显示 “P_L :”
“X_W :”
“ZKB:” sjmp test
;上电延时子程序
delay: MOV R6,#50H;MOV R7,#00H;DELY1: NOP
DJNZ R7,DELY1;上电延时
DJNZ R6,DELY1;ret;读状态字子程序
R_ST: MOV DPTR,#C_ADD;设置指令通道
MOVX A,@DPTR;RET;判断状态位STA1,STA0子程序(读写指令和数据),在指令的读,写
;数据之前这两个标志必须同时为“1” ST01: LCALL R_ST;JNB ACC.0,ST01;JNB ACC.1,ST01;RET;判断状位STA2子程序(数据自动读状态),该位
;在数据自动操作过程中取代STA0和STA1有效。在连续读过程中每读一次;之前都要确认STA2=1 ST2: LCALL R_ST;JNB ACC.2,ST2;RET;判断STA3子程序(数据自动写状态)ST3: LCALL R_ST;JNB ACC.3,ST3;RET;判断状态位STA6子程序(屏读/屏拷贝状态)ST6: LCALL R_ST;JB ACC.6,ERR;RET ERR: LJMP ST6;;出错处理
;写指令和写数据子程序..;双字节参数指令写入入口
PR1: LCALL ST01;判断状态位STA1,STA0 MOV A,DAT1;取第一参数单元数据
LCALL PR13;写入参数;单字节参数指令写入入口
PR11: LCALL ST01;判断状态位STA1,STA0 MOV A,DAT2;取第二参数单元数据
LCALL PR13;写入参数;无参数指令写入入口
PR12: LCALL ST01;无参数指令写入入口
MOV A,COM;取指令代码单元数据
MOV DPTR,#c_ADD;设置指令通道地址/数据写入入口
LJMP PR14;写入指令代码
PR13: MOV DPTR,#D_ADD;设置数据通道地址/数据写入入口 PR14: MOVX @DPTR,A;写入操作
RET;读数据子程序 PR2: LCALL ST01;判断状态位
MOV DPTR,#D_ADD;设置数据通道地址
MOVX A,@DPTR;读数据操作
MOV DAT2,A;数据存入第二参数/数据单元
RET;初始化子程序
INT:
;显示区域设置
MOV DAT1,#00H;设置文本显示区首地址
MOV DAT2,#00h;
MOV COM,#40H;LCALL PR1;双字节参数指令写入入口
MOV DAT1,#16;设置文本显示区域宽度
MOV DAT2,#00H;即一行显示所占字节数
MOV COM,#41H;LCALL PR1;双字节参数指令写入入口
MOV DAT1,#00H;设置显示区域首地址
MOV DAT2,#00H;或文本属性区域首地址
MOV COM,#42H;LCALL PR1;双字节参数指令写入入口
MOV DAT1,#10H;设置图形显示区域宽度
MOV DAT2,#00H;或为文本属性区域狂宽度
MOV COM,#43H;即一行显示所占字节数
LCALL PR1;双字节参数指令写入入口
;显示光标设置
MOV COM,#0A1H;光标形状设置
LCALL PR12;
;设置光标初始位置,是字符行和字符列,第0行第15列
MOV DAT1,#0;光标行位置
MOV DAT2,#0;光标列位置
MOV COM,#21H;LCALL PR1;双字节参数指令写入入口
;显示方式设置,使用内部字符发生器
MOV COM,#80H;显示方式设置,逻辑“或”合成LCALL PR12;无参数指令写入入口+
;显示开关方式
MOV COM,#97H;仅用文本显示
LCALL PR12;无参数指令写入入口
RET
;写数据子程序,8*8点阵
;R6中装入显示位置的列数(字符的个数),每行16个字符,R7中装入显示位置距左上角的字符行数
;5FH单元中装入待显示的字符码
DISP: mov b,r7
mov a,#16 mul ab mov r7,a CLR C mov a,R6
ADD A,R7 MOV R6,A;R7*16+R6
MOV DAT1,R6;设置显示RAM首地址,水平方向字符数
MOV DAT2,#00H;固定送00H MOV COM,#24H;地址指针指令
LCALL PR1;MOV
dat2,5fH;取要显示的字符
MOV COM,#0c4H;数据写,地址不变
LCALL PR11;写入数据
RET;清显示缓冲区(16*8单元)clear: MOV 5FH,#00H
MOV R5,#0 CLEAR0: MOV R4,#0 CLEAR1: MOV A,R5
MOV R7,A MOV A,R4 MOV R6,A CLEAR2: LCALL DISP
INC R4 CJNE R4,#16,CLEAR1
mov r4,#00h
INC R5
CJNE R5,#8,CLEAR0 CLEAR9: RET;显示频率、相位、占空比、相位差等字符。(P_L :;PL_XW_ZKB:MOV R7,#3 MOV R6,#0 MOV
5fh,#30H;“P” LCALL DISP MOV R7,#3 MOV R6,#1 MOV
5fh,#3FH;“_” LCALL DISP MOV R7,#3 MOV R6,#2 MOV
5fh,#2CH;“L”
X_W :
ZKB:)
LCALL DISP MOV R7,#3 MOV R6,#3 MOV
5fh,#1AH;“: ” LCALL DISP
MOV R7,#5 MOV R6,#0 MOV
5fh,#38H;“X” LCALL DISP MOV R7,#5 MOV R6,#1 MOV
5fh,#3FH;“_” LCALL DISP MOV R7,#5 MOV R6,#2 MOV
5fh,#37H;“W” LCALL DISP MOV R7,#5 MOV R6,#3 MOV
5fh,#1AH;“: ” LCALL DISP
MOV R7,#7 MOV R6,#0 MOV
5fh,#3AH;“Z” LCALL DISP MOV R7,#7 MOV R6,#1 MOV
5fh,#2BH;“K” LCALL DISP MOV R7,#7 MOV R6,#2 MOV
5fh,#22H;“B ” LCALL DISP MOV R7,#7 MOV R6,#3 MOV
5fh,#1AH;“: ” LCALL DISP RET;顶行显示“黄冈师院物科院“的英文名称。;”welcome to hgnu!“ hgnu_DISP:
MOV R7,#0;显示位置的行列数
MOV R6,#0 MOV
5fh,#37H;”W“ LCALL DISP MOV R7,#0 MOV R6,#1 MOV
5fh,#25H;”E“ LCALL DISP MOV R7,#0 MOV R6,#2 MOV
5fh,#2CH;”L“ LCALL DISP MOV R7,#0 MOV R6,#3 MOV
5fh,#23H;”C“ LCALL DISP MOV R7,#0 MOV R6,#4 MOV
5fh,#2FH;”0“ LCALL DISP MOV R7,#0 MOV R6,#5 MOV
5fh,#2DH;”M“ LCALL DISP MOV R7,#0 MOV R6,#6 MOV
5fh,#25H;”E“ LCALL DISP MOV R7,#0 MOV R6,#7 MOV
5fh,#00H;” “ LCALL DISP MOV R7,#0 MOV R6,#8 MOV
5fh,#34H;”T“ LCALL DISP MOV R7,#0 MOV R6,#9 MOV
5fh,#2FH;”O“ LCALL DISP MOV R7,#0 MOV R6,#10 MOV
5fh,#00H;” “ LCALL DISP MOV R7,#0 MOV R6,#11 MOV
5fh,#28H;”H“ LCALL DISP
MOV R7,#0 MOV R6,#12 MOV
5fh,#27H;”G“ LCALL DISP MOV R7,#0 MOV R6,#13 MOV
5fh,#2EH;”N“ LCALL DISP MOV R7,#0 MOV R6,#14 MOV
5fh,#35H;”U“ LCALL DISP RET tab: db 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h;”0-----9“
db 21h,22h,23h,24h,25h,26h;”A-----F" end
实验七 直流电机转速测量与控制实验
一、实验目的
1.掌握直流电机的驱动原理。2.了解直流电机调速的方法。
二、实验内容
1.用0832 D/A转换电路后的输出经放大后驱动直流电机。
2.编制程序改变0832输出经放大后的方波信号的占空比来控制电机转速。本实验中 D/A输出为双极性输出,因此电机可以正反向旋转。
三、程序流程
三、实验电路
五、参考程序
DATA_TH0 EQU 00H DATA_TL0 EQU 00H;信号周期为130ms DATA_TH1 EQU 20H DATA_TL1 EQU 00H;高电平时间65ms ORG 0000H LJMP MAIN ORG 0003H LJMP INT_0;启动电机按键
ORG 000BH LJMP T_0;T0确定输出信号的周期(或者频率)
ORG 0013H LJMP INT_1;电机转动方向控制按键
ORG 001BH LJMP T_1;T1确定输出信号高电平的时间期
ORG 0030H MAIN: MOV SP,#60H CLR P1.0 CLR P1.1;关闭电机
setb 20h.0;初始化电机正转
clr 20h.1;初始状态时,电机停止转动
MOV TMOD,#11H SETB IT0 SETB EX0 SETB IT1 SETB EX1 SETB ET0 SETB ET1 SETB EA
SJMP $
T_0: JNB 20H.1,T_01;
MOV TH1,#DATA_TH1
MOV TL1,#DATA_TL1 SETB TR1
MOV TH0,#DATA_TH0
MOV TL0,#DATA_TL0
SETB TR0
JNB 20H.0,T_02
setb P1.0
clr P1.1
LJMP T_05 T_02: clr P1.0
setb P1.1
LJMP T_05
T_01: CLR P1.0
CLR P1.1
CLR TR0
CLR TR1 T_05: RETI T_1: CLR TR1
clr p1.0
clr p1.1
RETI int_1: CPL 20H.1;电机启动标志求反,开启电机或者关闭电机
JNB 20H.1,INT_11;启动标志不为1,则停止电机,关闭定时器
MOV TH1,#DATA_TH1;启动标志为1,则开启定时器1和定时器2,输出PWM波
MOV TL1,#DATA_TL1 SETB TR1
MOV TH0,#DATA_TH0
MOV TL0,#DATA_TL0
SETB TR0
JNB 20H.0,INT_12;转动方向标志不为1,则反转,否则正转
setb P1.0
clr P1.1
LJMP INT_19 INT_12: clr P1.0
setb P1.1
LJMP INT_19 INT_11: CLR P1.0
CLR P1.1
CLR TR0
CLR TR1 INT_19: RETI 26
INT_0: CPL 20H.0 RETI END
实验八 步进电机控制实验
一、实验目的
1.了解步进电机控制的基本原理。2.掌握步进电机转动编程方法。
二、实验内容
从键盘上输入正、反转命令,转速参数和转动步数显示在显示器上,CPU再读取显示器上显示的正、反转命令,转速级数(16级)和转动步数后执行。转动步数减为零时停止转动。
三、实验电路图
四、参考程序
ORG 0000H
ljmp main ORG 000BH LJMP COUNT0
ORG 001BH LJMP COUNT1 ORG 0100H MAIN: MOV P0,#0FFH;输送脉冲口,SETB P1.2;MOV R0,#1;延时变化变量 LOOP1: MOV P0,#0FCH LCALL DELAY MOV P0,#0F6H LCALL DELAY MOV P0,#0F3H LCALL DELAY MOV P0,#0F9H LCALL DELAY JNB P1.2,LOOP2 MOV TMOD,#01010101B MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR MOV P2,A JMP LOOP1 LOOP2: MOV P0,#0FCH LCALL DELAY MOV P0,#0F9H LCALL DELAY MOV P0,#0F3H LCALL DELAY MOV P0,#0F6H LCALL DELAY JB P1.2,LOOP1 MOV TMOD,#01010101B MOV TH0,#0FFH MOV TL0,#0FFH MOV TH1,#0FFH MOV TL1,#0FFH 28
SETB TR0 SETB TR1 SETB ET0 SETB ET1 SETB EA MOV DPTR,#TABLE MOV A,R0 MOVC A,@A+DPTR MOV P2,A JMP LOOP2 SJMP $ COUNT0: MOV TH0,#0FFH;减速中断 MOV TL0,#0FFH CJNE R0,#9,L4 JMP L5 L4: INC R0
流水灯实验一
一:实验目的
1、掌握51单片机如何控制信号输出。
2、掌握Keil C集成开发环境的使用。
3、掌握51开发平台的使用。
二、实验内容
在开发板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象
三:实验程序
ORG 000H START: MOV A,#07FH
CLR
C
MOV R2,#08H
LOOP: RRC
A
;循环右移
MOV P1,A
;输出至P1口
LCALL DELAY
;调用延迟子程序(延迟100毫秒)
LCALL DELAY
;调用延迟子程序(延迟100毫秒)
DJNZ R2,LOOP
;循环转移
MOV R2,#07H
;设右移7次
LOOP1:RLC A
;带进位的循环左移指令
MOV P1,A
;输出至P1口
LCALL DELAY;长调用指令
LCALL DELAY
DJNZ R2,LOOP1
JMP START
;跳回到START,再一次循环。
DELAY:MOV R4,#200
;延迟子程序(100毫秒)250*2*100=500*200us D1:
MOV R5,#248;=50*2ms=100ms
DJNZ R5,$;2us
DJNZ R4,D1;2us
RET END
功能:使两个相邻的灯同时亮,并向右循环移动,延时200ms。
流水灯实验二
一:实验目的
1、掌握51单片机如何控制信号输出。
2、掌握Keil C集成开发环境的使用。
3、掌握51开发平台的使用。
二、实验内容
查表法实现在开发板上实现8个发光LED“流水”的现象,并通过编写程序控制流水现象
三:实验程序
BEEP
BIT P2.0
BUFF_LED_LP
EQU 21H
;亮灯循环寄存器
org 000h
;org,指定一个地址,后面的程序或数据从这个地址值开始分配
JMP START
ORG 100H start:
mov
P1,#0ffh
;初始化MCU端口
MOV
A,#00H
;初始化寄存器
MOV
PSW,#00H
MOV
IE,#00H
MOV
SP,#30H
MOV
BUFF_LED_LP,#00H LOOP: MOV
DPTR,#TAB_A_LAMP
;设置亮灯花型列表地址(32种)
MOV
A,BUFF_LED_LP
;查询方式读取花型
MOVC A,@A+DPTR
CPL
A
;取反
MOV
P1,A
;LED小灯控制口
LCALL DEL1S
;长调用指令
INC
BUFF_LED_LP
;+1
MOV
A,BUFF_LED_LP
CJNE A,#32,LOOP
;比较条件转移指令
MOV
BUFF_LED_LP,#00H
JMP
LOOP TAB_A_LAMP:
DB 11111110B,11111100B,11111000B,11110000B,11100000B,11000000B,10000000B,00000000B
DB
10000000B,11000000B,11100000B,11110000B,11111000B,11111100B,11111110B,11111111B
DB
00011000B,00111100B,01111110B,11111111B,00000000B,10101010B,01010101B,11001100B
DB
00111100B,10000001B,11000011B,11100111B,11111111B,11100111B,11000011B,10000001B,00000000B
deL1S:
MOV
R5,#03H
;延时子程序(约0.5秒)DEL1S0: mov
R6,#0ffh DEL1S1: mov
R7,#0ffh
djnz
R7,$
djnz
R6,del1S1
DJNZ
R5,DEL1S0
;CPL
BEEP
ret
END
功能:通过查表法实现LED灯的点亮功能,低电平有效。首先是L8亮,继续是L7、L8亮,继续是L6、L7、L8亮等等,从右往左,依次点亮;接着按照相反的顺序依次熄灭;全灭后,然后是L4、L5灭,接着L3、L4、L5、L6 灭,然后又全灭,接着全亮,再然后L1、L3、L5、L7灭,L2、L4、L6、L8亮,然后的亮灭与之相反,下面则是L3、L4、L7、L8亮,其余灭;最后是L3、L4、L5、L6灭,接着L1灭,然后L3、L4、L5、L6亮,L4、L5亮,接着全灭,然后又是L4、L5亮,接着L3、L4、L5、L6亮,L1、L8灭,最后全灭。按此顺序循环执行。
按键实验三
一:实验目的
1.学习非编码键盘的工作原理和键盘的扫描方式。2.学习键盘的去抖方法和键盘应用程序的设计。
二:实验内容
用按键控制发光管的亮或灭
三:实验程序 KEY BIT
P3.3
SW1 BIT
P2.7;P2.2
by htq
ORG 000H
START: mov sp,#40h
mov p2,#0ffh
mov p3,#0ffh
MOV P1,#0ffh;
clr key
WAIT:;JB
KEY,$
;等候按键!by htq
JB
SW1,$
lcall delay
cpl
P1.0
JNB
SW1,$;wait key is released
lcall delay;by htq
cpl
p1.1
JNB
SW1,$
lcall delay cpl
p1.2
JNB
SW1,$
lcall delay
JMP
wait
DELAY:
MOV R3,#200 D1:
MOV R4,#200
DJNZ R4,$
DJNZ R3,D1
RET END
功能:通过按键sw1实现L1、L2、L3的亮灭,按一下sw1,L1、L2、L3依次亮。
计时实验四
一:实验目的
用单片机89C51的定时/计数器实现倒计时。采用两位数码管静态显示倒计时秒值。二:实验内容
实现0~39的倒计时。
三:实验程序
MIAO
EQU
21H
GEWEI
EQU
22H
SHIWEI
EQU
23H
SCANLED
BIT
01H
ORG 000H
;ORG伪指令使用于程序定位
JMP
START
ORG
0BH
JMP
TIMER0
;定时0中断入口地址 START:MOV SP,#40H
;设定堆栈指针
MOV TMOD,#01H
;设定定时器1为工作方式1
MOV TH0,#HIGH(65536-5000)
MOV TL0,#LOW(65536-5000)
SETB TR0
MOV IE,#10000010B
MOV R7,#200
MOV MIAO,#39
AJMP $ TIMER0:PUSH
ACC
;定时器1中断服务子程序
PUSH
PSW
MOV
TH0,#HIGH(65536-5000)
MOV
TL0,#LOW(65536-5000)
DJNZ
R7,TIM0_LP
;not 1s
MOV
R7,#200
DJNZ
MIAO,TIM0_LP
MOV
MIAO,#39
;TIM0_LP: MOV
A,MIAO
LCALL BIN_BCD
MOV
SHIWEI,A
MOV
GEWEI,B
CPL
SCANLED
JB
SCANLED,SCAN_L1
JMP
SCAN_L2
SCAN_L1: MOV
P2,#10111111B
;显示十位
MOV
A,SHIWEI
JMP
END_SCAN SCAN_L2: MOV
P2,#11011111B
;显示个位
MOV
A,GEWEI END_SCAN: MOV
DPTR,#TABLE
MOVC A,@A+DPTR
MOV
P0,A
POP
PSW
POP
ACC
RETI BIN_BCD: MOV B,#10
DIV
AB
RET TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
关键词:单片机实验教学,Proteus仿真,实验箱,一个小灯亮灭
单片机原理及应用这门课程是高校计算机、电子信息工程、通信工程、自动化等很多工科电类专业的基础课程, 该课程具有较强的理论性和实践性, 学生初次学习往往感觉该课程难以理解, 内容枯燥。而传统的单片机课程实验教学主要是依靠实验板或者实验箱这样的硬件平台完成, 该实验平台开展的大多是一些验证性实验, 学生只需要简单地在实验箱上搭几条线, 或者简单地下载几条程序在实验箱上运行观察结果即可, 这样学生不能够真正地理解其中的原理, 从而导致学生学习兴趣下降[1]。另外, 实验箱使用时间长, 会存在损坏和接触不良的现象, 会影响到实验结果, 降低了学生对实验的兴趣, 影响了实验效果。而且, 实验箱只存放在实验室里, 如果学生对实验内容有兴趣, 想继续学习, 又受到限制[2]。
一、Proteus仿真软件及应用
Proteus是Lab center Electronics公司于1989年推出, 为单片机应用系统开发提供的功能强大的虚拟仿真工具。除具有模拟电路、数字电路的仿真功能外, 最大特色是对单片机应用系统连同程序运行以及所有的外围接口器件、外部测试仪器一起仿真。针对单片机的应用, 可直接在基于原理图的虚拟模型上进行编程, 并实现源代码级实时调试。用软件手段对单片机应用系统进行仿真开发, 与用户样机硬件无任何联系, 只需在PC机安装Proteus, 就可进行单片机应用系统的设计开发、虚拟仿真与调试。
Proteus仿真软件不仅节约实验成本, 减少实验开支, 而且“绿色”, “环保”, 例如, 制作PCB板, 传统的做法是先画原理图 (电路图) , 再布线, 然后焊接, 接着就是调试, 如果调试期间发现问题, 那么就存在着重新布线, 或者重新焊接问题, 甚至有时候会因为某个布线出错, 导致整个板子作废, 需要重新设计一块新电路板的后果。这样, 既造成浪费, 又因反反复复布线“污染”了实验室环境。而用Proteus仿真软件模拟PCB板制作, 就可以直接在proteus软件上构造设计PCB板, 并可以将其反复调试, 调试成功以后, 再实际制作PCB板, 这样设计调试周期短, 成功率高, 也避免了器件浪费。
(一) Proteus软件与单片机实验教学
利用Proteus仿真软件进行仿真实验不仅可将单片机实验功能形象化, 也可将许多单片机实验运行过程形象化, 达到实物演示的效果。该软件具有各种常用仿真元器件库, 能够提供实验所用的元器件, 从而实现仿真电路与传统的单片机实验硬件电路高度对应[1], 学生通过亲自动手, 用导线将元器件按正确的方向连接起来, 加深其对相关电路知识的理解, 也加深了对单片机元器件功能的了解, 激发了学生学习单片机的兴趣。利用Proteus仿真软件进行单片机实验教学具有实验内容广泛、硬件投入少、损耗小等优势。
(二) 单片机实验仿真应用实例
Proteus可以将一些现象虚拟放大, 实验者通过观察现象, 加深对理论的理解。以单片机实验教学中控制一个小灯的亮灭为例, 详细介绍Proteus软件的实验仿真过程。首先, 绘制实验电路原理图。打开Proteus ISIS软件, ISIS (智能原理图输入) 界面用来绘制单片机系统的电路原理图, 在该界面下, 可进行单片机系统的虚拟仿真。在元件库中选择所需元件, 按照实验电路连接元器件, 即完成了仿真电路图的绘制, 如图1所示。
其次, 进行软件调试及仿真。在实验教学中通常采用Keil软件来完成软件的调试。本实验采用汇编语言进行程序的编写, 按照实验内容编制程序如下:
编写好源程序后, 在Keil软件中编译, 调试无误, 并通过编译生成可执行的“一个灯亮灭.hex”文件, 以备仿真时调用。如图2所示。
然后, 介绍在protues ISIS软件中如何调用源程序及仿真运行。打开已经绘制好的实验电路原理图, 选中单片机芯片AT89C51, 点击鼠标右键选择“Edit Properties”属性, 出现编辑元器件对话框, 在Program File选项中加载编译好的“一个灯亮灭.hex”文件, 其他选项可以设置为默认, 最后点击“OK”完成设置。
接下来, 就可以点击运行按钮进入电路仿真运行状态, 若程序无误, 且硬件电路连接正确, 则会出现一个小黄灯亮灭交替的仿真运行结果, 其中, 元器件引脚还会出现红、蓝两色的方点 (在微机显示器上可分辨出颜色) , 来表示此时引脚电平高低。红为高电平, 蓝表示低电平。
而实际上, 因为程序中没有加延时子程序, 小灯亮灭的速度非常快, 用肉眼是捕捉不到小灯变化的, 因此, 如果用单片机实验板或者实验箱做此实验的话, 看到的只是小灯保持一个灭的状态不变的想象。
尽管Proteus具有开发效率高, 不需要附加的硬件开发装置成本, 且在多数场合可以获得和实际一样的效果, 但是需要注意的是, 使用Proteus来对用户系统仿真, 是在理想的状况下的仿真, 对硬件电路的实时性还不能完全准确地模拟, 因此不能进行用户样机硬件部分的诊断与实时在线仿真。而且, 如果完全依靠仿真, 学生获得的感性认识远远不够, 因此, 基于实验板或者实验箱的实验教学仍然是不可缺少的环节[3]。
二、仿真与实验板结合的实验教学设计
通过proteus仿真软件, 打破时间限制, 实验课的课时有限, 只靠课堂时间, 学生很难完全掌握所学知识。通过Proteus软件, 只需要一台电脑, 学生就可以利用课余时间来设计电路, 编程仿真。教师可以在实验课前让学生熟悉实验课的内容, 用Proteus画好原理图, 编好程序完成仿真, 确认软件没有问题。在实验课的时候, 再在实验板或者实验箱上完成实际的操作。这样软硬件结合, 理论联系实际, 学生对实验内容掌握得更透彻[2]。
在实验板或者实验箱实际操作过程中, 如果实验结果与仿真结果不一样, 还能促进学生找原因, 例如, 是实验箱接线不对呢, 还是Proteus仿真不精确, 亦或者是实验箱硬件部分有损坏等, 这样激发了学生学习单片机实验的兴趣, 加深了对单片机原理的认识, 提高了单片机的应用水平。
三、结束语
将Proteus引入实验教学并结合实验板, 不但弥补了传统实验教学中存在的设备紧张、更新速度慢、元器件损耗大等不足, 而且实现了理论与实践的有机结合, 使教学过程更加丰富且易于表达清楚, 亦打破了时间和空间的限制, 提高了学生学习的主动性。实践证明, 只有在教学中将现代化的手段和传统实验方式有机结合起来, 充分发挥各自优势, 才能达到事半功倍的效果[4]。
参考文献
[1]朱永涛, 李明菜, 高凤梅.基于Proteus仿真软件的单片机实验教学改革探讨[J].科技信息, 2011, (27) .
[2]常淑俊, 黄杰勇.单片机实验教学的探讨[J].实验科学与技术, 2013, 11 (2) .
[3]伦翠芬, 张海峰.Proteus仿真与实验板结合的单片机教学[J].武汉职业技术学院学报, 2012, 11 (4) .
【关键词】单片机;建筑电气;智能温控系统
近年来,单片机以其控制能力强、可靠性高、通用性好、扩展灵活、体积小、价格便宜等优点,在工业控制、楼宇自动化、家用电器等领域都有着广泛的应用。[1]在现代智能建筑中,电梯控制系统、空调温控系统、照明控制系统[2]中均可见到单片机的踪影。然而现在市场上的单片机实验平台大多是面向电子类专业开发、缺乏专业建筑电气实验模块、集成度高,使得建筑电气类学生在学习和理解上存在较大困难。[3]针对这种现象和我校实际情况,本文结合温度控制系统展开研究,并注重实用性,以应用为出发点,开发出一套在实验项目内容方面更具针对性和实用性,且适合建筑电气工程、建筑设备工程及楼宇智能化等专业学生进行单片机课程实践教学需要的单片机实验平台。
1.总体技术方案设计
首先,对《单片机原理与应用》课程的教学和实验平台所需要的功能进行研究,并以AT89S52单片机为CPU的单片机综合实验平台模型;其次,对市场上现有的单片机实验平台的优缺点进行比较分析,根据分析结果对模型的硬件及软件方面进行完善;最后,针对建筑电气类专业中温度控制和电机控制较多的特点,确定了以智能温度控制系统为核心的实验平台,并明确了该系统所需要的主要芯片、编程方式、系统扩展方式。
2.单片机实验平台硬件设计
根据总体技术方案要求,该单片机综合实验平台硬件主要包括流水灯模块、交通灯模块、独立键盘模块、矩阵键盘模块、LED数码管显示模块、液晶模块、ISP模块、DS18B20温度测试模块、继电器驱动电路和电机控制电路等。实验平台硬件设计框图如图1所示。
图1 实验平台硬件设计框图
图2 DS18B20接线图
在整个电路设计过程中应尽量兼顾系统的先进性、经济性和实验的方便性、安全性。其中温度测试模块采用数字温度传感器DS18B20,接线方便,简单易用。DS18B20接线图如图2所示。
电机控制模块中的驱动芯片采用L298N,该芯片可直接驱动两台直流电机或一台步进电机。同时,考虑到系统稳定性,使用TLP521对L298N和单片机进行光耦隔离以消除电机对系统稳定性的影响,从而保护单片机不受损坏;通过布置去耦电容、适当的方式布置数字地和模拟地等措施解决电磁兼容问题,提高系统稳定性。
3.单片机实验平台软件设计
图3 智能温控系统流程图
在该实验平台上共设计了模拟交通灯、计数器、秒表、温度检测等七个基础实验和一个综合实验“智能温控系统”。以综合实验为例说明其软件的实现过程。软件的编写可以再Keil C51环境下进行,芯片型号选择AT89S52,用C语言按照图3所示的流程图编写源程序,利用Keil C51編译生成HEX文件,再利用PROGISP将生成的HEX文件下载至单片机中即可实现对智能温控系统的调试。
4.小结
针对目前市场上的基于单片机实验教学平台缺乏建筑电气类实验平台以及实验教学上的需要,本文结合单片机教学经验,运用51系列单片机开发了一套适用于建筑电气类专业的综合实验平台,并成功实现硬件设计及调试、软件编程,实验结果表明该系统具有良好的稳定性及实用性,极大提高了单片机实验教学硬件水平,满足了高职院校的专业性实验教学的需要。
【参考文献】
[1]王静霞.单片机应用技术-C语言版[M].北京:电子工业出版社,2009.5.
[2]张世冬.单片机在楼宇照明中的应用[J].科技致富向导,2011(11):122.
【实验单片机指导书】推荐阅读:
单片机技术实验指导书10-04
单片机实验指导书下10-30
单片机串口通信实验10-17
单片机第三次实验思考题10-03
单片机编程经验07-23
单片机编程心得10-12
单片机实习报告07-20
单片机说课稿10-11
单片机工程师11-07
51单片机学习简难11-10