C51单片机自学第一课

时间:2019-05-14 18:43:46下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《C51单片机自学第一课》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《C51单片机自学第一课》。

第一篇:C51单片机自学第一课

第一课 了解单片机及单片机的控制原理,控制一个LED 灯的亮和灭

本章学习内容:

单片机基本原理,如何仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC51uV调试环境,如何使用单步,断点,全速,停止的调试方法

单片机现在是越来越普及了,学习单片机的热潮也一阵阵赶来,许多人因为工作需要或者个人兴趣需要学习单片机。可以说,掌握了单片机开发,就多了一个饭碗。

单片机已经有30 多年的历史了,在中国,高校的单片机课程大多数都是51,而51 经过这么多年的发展,也增长了许多的系列,功能上有了许多改进,也扩展出了不少分支。而国内书店的单片机专架上,也大多数都是51 系列。可以预见,51 单片机在市场上只会越来越多,功能只会越来越丰富,在可以预见的数十年内是不可能会消失的。

下面以51 为例来了解一下单片机是什么东西,控制原理又是什么?

在数字电路中,电压信号只有两种情况,高电平和低电平,用数字来记录就是1 和0。单片机内部的CPU,寄存器,总线等等结构都是通过1 和0 两种信号来运作的,数据也是以1 或者0 来保存的。单片机的输入输出管脚,也就是IO 口,也是只输出或识别1 和0 两种信号,也就是高电平和低电平。当单片机输出一个或一组电平信号到IO 口后,外部的设备就可以读到这些信号,并进行相应操作,这就是单片机对外部的控制。当外部一个或一组电平信号送到单片机的IO 口时,单片机也可以读到这些信号,并进行分析操作,这就是单片机对外部设备信号的读取。当然实际的操作中,这些信号可能十分复杂,必须严格地按照规定的时间顺序(时序)输入输出。每种设备也都规定了自己的时序,只要都严格遵守,就可以控制任何设备,做出只要你想象得出的任何事情。

您可能会再问,我如何让单片机去控制和分析外部设备呢?答案是程序,您可以编写相关的程序,并且把他们烧写到单片机内部的程序空间,单片机在上电时,就会一步一步按照您写的程序去执行指令,做您想做的事情。

在51 标准芯片中,有32 个输入输出IO,分为4 组,每组8 个,分别为P0 口,P1 口,P2 口,P3 口。P1 口的8 条脚就用P1.0 至P1.7 表示,其余类似。51 就是用这32 个口来完成所有外部操作的。对于51 的内部结构,如果您已经了解,那是最好;如果不懂,也可以先放下,在完成了本教程开始的几个章节之后,您就会大有兴趣,自己去寻找资料阅读了。当然,如果您希望成为一个优秀的单片机开发程序员,还是必须熟悉单片机的内部结构及工作原理,切不可偷懒!

在这一章,您将用程序去控制一个LED 发光管的亮和灭。你应该知道,LED 发光管在通过一定电流时亮,不通电就灭。为了不让LED 通过太大的电流把它烧坏,我们还要串上限流电阻。51 的IO 是弱上拉的方式,在输出高电平时,只能输出几十微安的电流到地,而在输出低电平时,VCC 电源可以输入几十毫安的电流到IO。一般LED 需要10 毫安左右电流点亮,我们就将LED 接在电源VCC 和IO 口之间,中间串上电阻,当IO 输出低电平时,灯就亮了,反之,灯就灭了。我们在这个程序里要控制的是P1.0。请参考一下我们将要使用的试验板的电路图。

现在可以开始做试验了,我们打开已经建立好的工程和编写好的程序试验。顺便还会学习一下程序调试的技巧。至于如何建立一个新工程,请参考C51 的帮助文件。请双击lessoncode01 目录下的lesson1.uv2,打开后界面如下:

点一下上图第三排第2 或者第3 个按钮(您的编译器按钮位置不一定在那个位置,自己找找),就可以看到编译结果了。上面显示是0errrs,0warnings,这是最佳的编译结果,如果有error,则无法进行下一步仿真,如果有warning,一定要尽量消除,确实无法消除的,也要确认不会对程序造成影响,才进行下一步的仿真。在编译结果中,我们还可以看到有data,xdata,code 等用了多少字节的报告,要注意您的单片机中是否有这么多的资源,如果不够,将来烧片运行时就可能出现问题。比如AT89C51 的程序空间是4K,xdata 如果没有外扩就是0 个,data 是128 个。超出这些范围,程序就不能在AT89c51 中运行。不同的芯片有不同的容量,如SST89E516RD 就有64K 程序,内部768 字节XDATA,还有256 个字节的data。我们的例程中肯定都考虑了这些了,肯定不会超出,将来自己开发时就要注意了。

下面我们故意把第9 行的P10 写成P11,点编译,因为没有预先定义P11,所以就报告错误了,如下图:

双击一下错误报告的那一行,窗口就也会跳到这一行,方便您进行修改。好了,现在请把错误改回去,再编译一次,出现报告正确了以后,下面开始仿真了。点一下第二行第5 个一个放大镜里面一个d 字母的按钮,就可以进入仿真了,仿真器要事先连接好哟。进入仿真后要退出仿真环境也是点这个按钮。注意,等会如果程序在正在全速运行时,仿真环境是不能直接退出的,得先点停止运行后,再点仿真按钮才可以退出。点进入仿真按钮,程序开始装载,PC 自动运行到了main()停下,并指向了main()函数的第一行。

进入仿真窗口后,如果出现的不是前面的源代码窗口,而是夹有反汇编代码的窗口,直接关掉这个窗口就会恢复到代码窗口。下次进入也会直接进入到源代码窗口。

现在先试验单步,点单步(两个单步都可以,一般点单步跨过)。可以看到灯亮了。PC 指针也指向了下一个

程序行。再点一下单步,PC 又走下一步,灯灭了。再点一次,PC 走到挂起的程序行了,继续点仍然在这一行。这句指令其实就是使程序不断地跳到自己这一行,别的什么也不做。一般称作程序挂起。

一般的实际应用中的程序是不会挂起的,一般是在main 函数里做一个大循环,程序如下:

void main(void)// 主程序 { while(1){ P11=0;//亮灯 P10=1;//灭灯 } } 请将main 函数程序改为上面的代码,我们下一步将试验断点的操作。

在第15 行双击一下,可以看到程序行左边出现了一个红方块,这就是设置断点,再双击一次,断点就取消了。如果程序在全速运行的过程中遇到断点,就会自动停下来给你分析。注意在进入仿真后,并且程序是停止状态时,才可以设置或者取消断点。

现在点全速运行,可以看到程序在断点处停了下来,并且由于前一句指令刚刚执行了点灯,所以这时灯是亮着的。

现在在第14 行设置断点,并且取消上一个断点。

现在点全速运行,可以看到程序在断点处停了下来,并且由于刚刚执行了灭灯,灯是灭着的。好,现在试验全速运行和停止。把断点取消,再点全速运行,可以看到灯是亮着的,但是不是很亮,这是由于程序是循环的,亮灭交替进行,亮的时间并不是全部的时间。现在点停止,可以看到程序停止了,重复几次进行全速和停止,可以发现每次停止的地方不一定是同一位置。

演讲稿

尊敬的老师们,同学们下午好:

我是来自10级经济学(2)班的学习委,我叫张盼盼,很荣幸有这次机会和大家一起交流担任学习委员这一职务的经验。

转眼间大学生活已经过了一年多,在这一年多的时间里,我一直担任着学习委员这一职务。回望这一年多,自己走过的路,留下的或深或浅的足迹,不仅充满了欢愉,也充满了淡淡的苦涩。一年多的工作,让我学到了很多很多,下面将自己的工作经验和大家一起分享。

学习委员是班上的一个重要职位,在我当初当上它的时候,我就在想一定不要辜负老师及同学们我的信任和支持,一定要把工作做好。要认真负责,态度踏实,要有一定的组织,领导,执行能力,并且做事情要公平,公正,公开,积极落实学校学院的具体工作。作为一名合格的学习委员,要收集学生对老师的意见和老师的教学动态。在很多情况下,老师无法和那么多学生直接打交道,很多老师也无暇顾及那么多的学生,特别是大家刚进入大学,很多人一时还不适应老师的教学模式。学习委员是老师与学生之间沟通的一个桥梁,学习委员要及时地向老师提出同学们的建议和疑问,熟悉老师对学生的基本要求。再次,学习委员在学习上要做好模范带头作用,要有优异的成绩,当同学们向我提出问题时,基本上给同学一个正确的回复。

总之,在一学年的工作之中,我懂得如何落实各项工作,如何和班委有效地分工合作,如何和同学沟通交流并且提高大家的学习积极性。当然,我的工作还存在着很多不足之处。比日:有的时候得不到同学们的响应,同学们不积极主动支持我的工作;在收集同学们对自己工作意见方面做得不够,有些事情做错了,没有周围同学的提醒,自己也没有发觉等等。最严重的一次是,我没有把英语四六级报名的时间,地点通知到位,导致我们班有4名同学错过报名的时间。这次事使我懂得了做事要脚踏实地,不能马虎。

在这次的交流会中,我希望大家可以从中吸取一些好的经验,带动本班级的学习风气,同时也相信大家在大学毕业后找到好的工作。谢谢大家!

第二篇:自学单片机心得体会

自学单片机心得体会

无论是作为一名业余的电子爱好者还是一名电子行业的相关从业人员,掌握单片机技术无疑可以使您如虎添翼,为您的电子小制作或者开发设计电子产品时打开方便的大门!

而且现在学习单片机技术的热潮正在不断升温,电子发烧友网开设了详细的单片机学习专栏和人气非常旺的论坛讨论组,对于想学习单片机的朋友来说帮助很大,可以说现在的单片机学习环境是最好的,经过一段时间的努力,采用单片机来开发设计电子产品已经不再是专业电子工程师的“专利”!作为一个普通的电子爱好者完全可以通过一番努力后熟练掌握!国外的电子爱好者采用单片机来设计小制作非常普及,一些智能机器人、智能自动装置内部都离不开单片机的身影~~~

学习单片机技术有一定的难度,不花费一番努力是很难学会的,但是只要不断努力就一定能成功,套用一句广告歌词:努力总有回报!

学习单片机最好从51系列开始,第一是书多、资料多,而且掌握51技术的人多,碰到问题能请教的老师也就多了,51系列的实验芯片AT89C51价格低廉而且很容易买到,AT89C51芯片而且可以反复擦写1000次以上,对于初学者来说真是太合适了,就算以后考虑工业运用,也可以先学透51后再学其他类型的单片机,毕竟技术是相通的。

学习单片机的第一步是看书,单片机是一个知识密集的东东,不看书是绝对不行的,北京航空航天大学出版社出版了大量单片机方面的好书,你可以直接登录他们的网站进行邮购。本人认为第一本书应该是8051单片机的基础原理书,我看的第一本书是问单位一位大学生同事借的清华大学出版社的《单片机的原理及接口技术》这本是51的大学教科书,比较系统地介绍了51芯片的基础知识,我认为这本书对我帮助还是很大的,可以很系统地了解51单片机,虽然一开始不容易看懂,不过确实很有用,很有嚼头,可以先大致看一遍,不消化的可以以后在试验实践中反复研究。

这里我推荐初学者一张学习单片机的多媒体光盘,这张光盘中有比较详细的单片机基础知识,因为是图文并茂,所以学习起来比较容易上手,学习容易产生兴趣,当然最终还是要看书的,毕竟书更系统全面。

《MCS-51单片机实用接口技术》这是一本北京航空航天大学出版社出版的一本好书,它详细描述了单片机的常见接口技术,对于想以后开发产品的话,那就人手一本吧!《单片机实践与运用》这本书详细介绍了用单片机作的实验,有很实用的汇编源程序,可以通过学习模仿上面的程序加以试验,快速掌握单片机技术。

学习单片机的第二步是购买工具,单片机芯片必须借助编程器才能写入程序,站长用的编程器是一种性能较好的Genius NSP 通用编程器,通用编程器的特点是专为开发单片机和烧写各类存储器而设计的通用机型,它的编程可靠性高,支持的器件品种很多。

Genius NSP 通用编程器:

4Opins万用锁紧插座。适应绝大多数器件编程之所需。使用适配器能够支持非DIP封装器件的编程。

RS232窜口通讯。通讯波特率:57600bit/s

9V/500mA电源转换器。

主要功能:EPROM、EEPROM、FLASH、MPU/CPU、PLD。Serial EEPROM六大类器件的编程;RAM器件及CMOS/TTL器件的测试等等。

可选择的器件插入自动探测启动功能,即当您选择该功能并启动后,不再需要每次点击鼠标启动操作,每次当您更换芯片并锁紧万用插座后操作自动启动。

Genius NSP 可以在 WINDOS95、98、me、2000、XP上运行。

从长远的方面考虑,购置一台通用编程器是很有必要的。

学习单片机的第三步是反复编程实践,这里需要一块AT89C51的试验板。

仿真器对单片机初学者来说既是那么耳熟,同时又有些陌生,这主要是因为市场上传统的仿真器价格都在千元以上,对经济不是非常宽裕的人来说是不小的开支。同时仿真器是用来提高调试程序效率的,也不是非需不可的,所以站长在自学单片机开始的时候也没有用过仿真器,碰到程序出错的时候,只好苦思冥想,或者在程序中插入一些驱动端口的指令,然后再接上一些发光二极管做简单指示,一般调试一个程序,反复烧写几十次芯片是很经常的。

现在我们介绍一种新型的廉价在线仿真器:它使用一片宏晶公司 【SST公司】的STC89C516RD 的单片机,仿真机通过串口与 PC 连接,该型号单片机是51系列单片机中的一种,具有ISP(在系统可编程)功能,程序可串行下载,可仿真63K用户程序空间,具有450个外部RAM字节。

具备了必要的工具以后就可以开始学习单片机了,对单片机进行编程可以采用汇编语言或者C语言,汇编语言的特点是代码紧凑,对初学者的电脑水平要求低、上手快,但是程序编写工作量大,站长网站的程序范例就是采用汇编语言编写的,这里说的C语言是专用于51单片机的C语言,它的特点是编写效率高,但是对使用者的电脑水平要求高,最好是已经会C语言了,电子发烧友网网站上也有单片机C语言教程。我认为初学单片机的人最好懂一些汇编语言,汇编语言可以直接控制单片机的资源,比如具体的单片机引脚、内存地址,掌握这些也是很有必要的,学会汇编语言可以打下比较好的基础,很多参考书也是这么说的,如果你是专业单片机开发人员,那么C语言效率高,更适合你。

自学汇编语言,首先要学会看懂别人的汇编语言程序,可以将汇编语言的指令翻译成自己容易理解的功能描述性文字,详细注释在程序后面,这样便于自己以后引用或者别人容易看懂。站长看到别人写的一些汇编程序的注释都非常少,这非常不利于初学者学习和互相交流,所以只要是站长写的程序都做了非常详细的注释。

学习汇编语言可以参考相关的书,汇编语言有100多条指令,但是常用的指令也就二三十条,可以先记住常用的汇编指令,如果一时记不住可以打印在纸上慢慢熟悉,然后对别人的汇编程序再加以试验验证,最后还可以在自己理解的基础上对汇编程序的相关参数修改再反复试验,这是快速掌握单片机的捷径!

一、八路LED跑马灯实验

现在让我们开始做第一个实验:八路发光二极管轮流点亮的实验,也就是通常所说的跑马灯实验,首先让我们来完成必须的硬件部分,我们需要焊接上8个发光二极管和8个限流电阻,可以参考下面的原理图和实物图像进行操作,需要注意的是LED是有极性的,引脚长的为正极,引脚短的为负极,负极和电阻一侧连接,如果接错那么相应的那一路可能在实验中不会点亮了,在焊接前要看仔细哦~~~

下面我们来完成软件编程设计,这里我们没有采用高深的编程技巧,而是用了最笨、最直接的向端口送数的办法来实现,一来程序比较简单,没必要玩深沉,而且初学者看起来直观易懂。

ORG 0000H

START:MOV P1,#01111111B;最下面的LED点亮

LCALL DELAY;延时1秒

MOV P1,#10111111B;最下面第二个的LED点亮

LCALL DELAY;延时1秒

MOV P1,#11011111B;最下面第三个的LED点亮(以下省略)

LCALL DELAY

MOV P1,#11101111B

LCALL DELAY

MOV P1,#11110111B

LCALL DELAY

MOV P1,#11111011B

LCALL DELAY

MOV P1,#11111101B

LCALL DELAY

MOV P1,#11111110B

LCALL DELAY

MOV P1,#11111111B;完成第一次循环点亮,延时约0.25秒

AJMP START;反复循环

;延时子程序,12M晶振延时约250毫秒

DELAY:

MOV R4,#2

L3: MOV R2,#250

L1: MOV R3,#250

L2: DJNZ R3,L2

DJNZ R2,L1

DJNZ R4,L3

RET

END

如何精确计算延时子程序的执行时间?

汇编语言的一大优势就是能够精确控制程序的执行时间,这在编写一些对时序要求严格的外围器件驱动时由为重要!

二、两位数码管循环显示00~99的实验

现在让我们用实验板上的两个数码管来做一个循环显示00~99数字的实验,先来完成必要的硬件部分,数码管有共阴和共阳的区分,单片机都可以进行驱动,但是驱动的方法却不同,并且相应的0~9的显示代码也正好相反。

首先我们来介绍两位共阳数码管的单片机驱动方法,电路如下图:

网友可以看到:P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过IN4148二极管和驱动三极管给数码管相应的位供电,这时只要P0口送出数字的显示代码,数码管就能正常显示数字。

因为要显示两位不同的数字,所以必须用动态扫描的方法来实现,就是先个位显示1毫秒,再十位显示1毫秒,不断循环,这样只要扫描时间小于1/50秒,就会因为人眼的视觉残留效应,看到两位不同的数字稳定显示。

下面我们再介绍一种共阴数码管的单片机驱动方法,电路如下图:

网友可以看到:+5V通过1K的排阻直接给数码管的8个段位供电,P2.6和P2.7端口分别控制数码管的十位和个位的供电,当相应的端口变成低电平时,相应的位可以吸入电流。单片机的P0口输出的数据相当于将数码管不要显示的数字段对地短路,这样数码管就会显示需要的数字。

网友可以看到,共阴数码管的硬件更简单,所以在批量生产时,硬件开销小,节省PCB面积,减少焊接工作量,降低综合成本,所以采用共阴数码管更有利于批量生产,现在销售的试验板都是采用共阴数码管了。

以下是用AT89C51实验板的两位数码管显示00~99依次循环的汇编语言程序

a_bit equ 20h;数码管个位数存放内存位置

b_bit equ 21h;数码管十位数存放内存位置

temp equ 22h;计数器数值存放内存位置

star: mov temp,#0;初始化计数器,从0开始

stlop: acall display;调用显示子程序

inc temp;对计数器加1

mov a,temp

cjne a,#100,next;判断计数器是否满100?

mov temp,#0;满100就清零重新开始

next: ljmp stlop;不满就循环执行

;显示子程序

display: mov a,temp;将temp中的十六进制数转换成10进制

mov b,#10;10进制/10=10进制

div ab

mov b_bit,a;十位在a

mov a_bit,b;个位在b

mov dptr,#numtab;指定查表启始地址

mov r0,#4

dpl1: mov r1,#250;

dplop: mov a,a_bit;取个位数

MOVC A,@A+DPTR;查个位数的7段代码

mov p0,a;送出个位的7段代码

clr p2.7;开个位显示

acall d1ms;显示162微秒

setb p2.7;关闭个位显示,防止鬼影

mov a,b_bit;取十位数

MOVC A,@A+DPTR;查十位数的7段代码

mov p0,a;送出十位的7段代码

clr p2.6;开十位显示

acall d1ms;显示162微秒

setb p2.6;关闭十位显示,防止鬼影

djnz r1,dplop;循环执行250次

djnz r0,dpl1;循环执行250X4=1000次

ret

;2+2X80=162微秒,延时按12MHZ计算

D1MS: MOV R7,#80

DJNZ R7,$

RET

;实验板上的7段数码管0~9数字的共阴显示代码

numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

end

;如果是共阳数码管的显示代码

numtab: DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H

三、单片机演奏音乐实验

利用单片机演奏音乐大概是单片机爱好者感兴趣的问题之一。这里我们用网站提供的实验板来做这个实验,并且了解单片机演奏音乐的基本原理,和相关的源程序。

首先来完成必要的硬件部分,硬件部分比较简单,如下图:

AT89C51单片机的P2.5口控制一个8550的三极管,三极管控制电磁蜂鸣器的电源通断。

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的高电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。

例如,要产生200HZ的音频信号,200HZ音频的变化周期为1/200秒,即5ms。这样,当P2.5的高电平或低电平的持续时间为2.5ms时就能发出200HZ的音调。

乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。

此外,结束符和体止符可以分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。

程序框图如图2所示。

下面给出程序序请单,可直接在51实验板上进行演奏。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。网友也可以自行找出一首歌,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。

;标题 ‘八月桂花香’发声程序

ORG 0000H

LJMP START

ORG 000BH

INC 20H;中断服务,中断计数器加1

MOV TH0,#0D8H

MOV TL0,#0EFH;12M晶振,形成10毫秒中断

RETI

START:

MOV SP,#50H

MOV TH0,#0D8H

MOV TL0,#0EFH

MOV TMOD,#01H

MOV IE,#82H

MUSIC0:

NOP

MOV DPTR,#DAT;表头地址送DPTR

MOV 20H,#00H;中断计数器清0

MUSIC1:

NOP

CLR A ;A清零

MOVC A,@A+DPTR;查表取代码

JZ END0;是00H,则结束

CJNE A,#0FFH,MUSIC5 ;如果是休止符,往下执行

LJMP MUSIC3

MUSIC5:

NOP

MOV R6,A ;R6=18H音符的频率

INC DPTR DPTR加一

MOV A,#0

MOVC A,@A+DPTR;取节拍代码送R7

MOV R7,A ;R7=30H音符发音的时间

SETB TR0;启动计数

MUSIC2:

NOP

CPL P2.5 ;P2.5是音乐输出引脚

MOV A,R6

MOV R3,A ;R3=R6=18H

LCALL DEL

MOV A,R7

CJNE A,20H,MUSIC2;中断计数器(20H)=R7否?

;不等,则继续循环

MOV 20H,#00H;等于,则取下一代码

INC DPTR

LJMP MUSIC1

MUSIC3:

NOP;休止100毫秒

CLR TR0

MOV R2,#0DH;R2=13

MUSIC4:

NOP

MOV R3,#0FFH;R3=255

LCALL DEL

DJNZ R2,MUSIC4

INC DPTR

LJMP MUSIC1

END0:

NOP

MOV R2,#0FFH;歌曲结束,延时1秒后继续

MUSIC6:

MOV R3,#00H

LCALL DEL

DJNZ R2,MUSIC6

LJMP MUSIC0

DEL:

NOP

DEL3:

MOV R4,#02H

DEL4:

NOP

DJNZ R4,DEL4

NOP

DJNZ R3,DEL3

RET

NOP

DAT:

DB 18H,DB 20H,DB 18H,DB 1CH,DB 1CH,DB 1CH,DB 20H,DB 30H,DB 20H,DB 20H,DB 40H,DB 20H,DB 20H,DB 20H,DB 18H,DB 26H,1CH,10H,1CH,10H,20H,10H,18H,40H,20H,20H,18H,20H,0FFH,20H,10H,18H,20H,1CH,20H,26H,20H,2BH,20H,20H,80H,0FFH,1CH,10H,20H,20H,2BH,20H 30H 40H 10H 10H 20H 20H 80H 1CH 15H 20H 20H 26H 30H 20H 10H 20H

DB 30H,20H,2BH,40H

DB 20H,20H,1CH,10H

DB 18H,10H,20H,20H

DB 26H,20H,2BH,20H

DB 30H,20H,2BH,40H

DB 20H,DB 18H,DB 1CH,DB 26H,DB 2BH,DB 20H,DB 20H,DB 20H,DB 20H,DB 2BH,DB 2BH,DB 1FH,DB 1CH,DB 26H,DB 30H,DB 20H,DB 18H,1CH,10H,15H,20H,20H,20H,20H,20H,26H,20H,30H,80H,1CH,10H,1CH,10H,26H,20H,30H,20H,20H,15H,20H,10H,20H,20H,2BH,20H,2BH,40H,1CH,10H,15H,20H 30H 20H 20H 40H 20H 20H 30H 10H 20H 20H 40H 05H 10H 20H 20H 30H 20H

DB 1CH,20H,20H,20H

DB 26H,40H,20H,20H

DB 2BH,20H,26H,20H

DB 20H,20H,30H,30H

DB 20H,30H,1CH,10H

DB 18H,40H,1CH,20H

DB 20H,20H,26H,40H

DB 13H,60H,18H,20H

DB 15H,40H,13H,40H

DB 18H,80H,00H

end

四、单片机倒计时定时器

这里我们先要安装好51试验板上的两个轻触按钮开关,我们采用的是独立式按钮开关,也就是说将开关直接连接到电源的地和单片机的对应引脚之间,这里K1接到单片机的P3.6引脚,K2接到P3.7。正常情况下单片机的P3.6、P3.7都被程序初始化时置“1” 当有按键按下时对应的单片机引脚被按钮开关下拉为“0”,这种方法比较直观,而且比较简单,在按键数量不多的场合下使用很广泛。

因为机械开关开关时有抖动,所以需要在程序中加一个软件去抖动程序,它的工作原理如下:当单片机检测到有按键被按下后立即执行一个10毫秒的延时程序,然后再在检测该引脚是否仍然为闭合状态?如果仍然为闭合说明确认该键被按下立即执行相应的处理程序,否则可能是干扰,丢弃这次检测结果。

接下来我们再安装一个四位的拨码开关,就是图中红色的开关,它相当于四个装在一起的拨动开关,当开关拨到“ON”一侧时,对应的那路就会接通,反之断开。它在单片机中一般用于设置初始参数,而且不经常改变的场合。这里因为单片机引脚资源不够,所以我们只使用了拨码开关的第2、3、4位,第1位闲置。三个开关可以逻辑组合出8种状态,所以我们能够方便灵活地预置多达7种的倒计时时间。

最后我们来安装两个继电器和相关电路,有了继电器我们的实验板不再仅仅是做做实验而已,可以用于控制一些负载,比如说:充电器,洗衣机,电风扇等,使我们的实验板的实用功能大大增强,这也是电子制作实验室网站的单片机实验板和其他公司的产品不同的地方。

这里继电器由相应的S8050三极管来驱动,开机时,单片机初始化后的P2.3/P2.4为高电平,+5伏电源通过电阻使三极管导通,所以开机后继电器始终处于吸合状态,如果我们在程序中给单片机一条:CLR P2.3或者CLR P2.4的指令的话,相应三极管的基极就会被拉低到零伏左右,使相应的三极管截至,继电器就会断电释放,每个继电器都有一个常开转常闭的接点,便于在其他电路中使用,继电器线圈两端反相并联的二极管是起到吸收反向电动势的功能,保护相应的驱动三极管,这种继电器驱动方式硬件结构比较简单。

;电子制作实验室http://www.xiexiebang.com/

;可设定时间的倒计时定时器,可选择5/15/20/30/35/45/50分钟倒计时

;倒计时时间由四位拨码开关的2/3/4位来控制,;第2位表示5分钟,第3位表示15分钟,第4位表示30分钟,;通过不同的组合可以产生5/15/20/30/35/45/50分钟倒计时

;P1.0口的外接的发光二极管为状态LED,定时未开始时LED常亮,定时过程中LED闪烁

;K1为开始按钮,K2为停止按钮

a_bit equ 20h;数码管个位数存放内存位置

b_bit equ 21h;数码管十位数存放内存位置

temp equ 22h;计数器数值存放内存位置

;开机初始化

MOV P3,#0FFH;对P3口初始化,设置为高电平,用于按键输入

MOV P0,#0FFH;使显示时间数码管熄灭

CLR P1.0;点亮LED指示灯

;等待键盘输入

START:JB P3.6,$;循环判断开始按钮K1是否按下?

ACALL DELAY10;延时10毫秒触点消抖

JB P3.6,START;如果是干扰就返回

JNB P3.6,$;等待按键松开

;读拨码开关的状态,获得倒计时时间

SET:MOV A,#0;首先对A清零

JB P2.0,A1;判断拨码开关的第2位是否接通,接通就对A加5

ADD A,#5

A1:JB P2.1,A2;判断拨码开关的第3位是否接通,接通就对A加15

ADD A,#15

A2:JB P2.2,A3;判断拨码开关的第4位是否接通,接通就对A加30

ADD A,#30

A3:MOV TEMP,A

;这时TEMP中的值就是倒计时时间

;数码管显示定时时间的程序

display:CLR P2.4;使继电器1释放,开始定时(开机时继电器处于吸合状态)

CLR P2.3;使继电器2释放,开始定时(开机时继电器处于吸合状态)

MOV R2,#120

AB:MOV R3,#250

TIME1:mov a,temp;将temp中的十六进制数转换成10进制

mov b,#10;10进制/10=10进制

div ab

mov b_bit,a;十位在a

mov a_bit,b;个位在b

mov dptr,#numtab;指定查表启始地址

mov r0,#4

dpl1: mov r1,#250;

dplop: mov a,a_bit;取个位数

MOVC A,@A+DPTR;查个位数的7段代码

mov p0,a;送出个位的7段代码

clr p2.7;开个位显示

ACALL DELY1;显示1毫秒

setb p2.7;关闭个位显示,防止鬼影

mov a,b_bit;取十位数

MOVC A,@A+DPTR;查十位数的7段代码

mov p0,a;送出十位的7段代码

clr p2.6;开十位显示

ACALL DELY1;显示1毫秒

setb p2.6;关闭十位显示,防止鬼影

;插入一段判断定时过程中是否有按键输入的程序段

C1:JB P3.6,B1

ACALL DELAY10;延时10毫秒消抖

JB P3.6,C1

JNB P3.6,$;等待按键松开

AJMP SET

B1:JB P3.7,M33

ACALL DELAY10;延时10毫秒消抖

JB P3.7,B1

JNB P3.7,$;等待按键松开

AJMP OVER

M33:djnz r3,TIME1;2毫秒循环执行250次,时间约0.5秒

CPL P1.0;使LED每1秒闪烁一次

djnz r2,AB;循环执行120次,时间为1分钟

DEC TEMP;满一分钟对定时时间减1

MOV A,TEMP

JNZ DISPLAY;判断TEMP的数值是否为0?不为0循环

;结束定时

OVER:CLR P1.0;LED指示灯常亮

SETB P2.4;继电器1吸合,定时结束,退回到开机时的状态

SETB P2.3;继电器2吸合,定时结束,退回到开机时的状态

AJMP START;退到开机初始化状态

;1毫秒延时子程序

DELY1:MOV R4,#2

D1:MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

RET

;10毫秒延时子程序

DELAY10:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

;实验板上的7段数码管0~9数字的共阴显示代码

numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH

end

五、单片机和PC机串口通讯试验

51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。电子制作实验室网站的提供的带扩展元件的51单片机实验板上已经装配好了全部硬件。

串口通讯的硬件电路如上图所示,我们可以采用以下方法来判断串口是否存在硬件问题,将MAX232的第9脚接地,测量一下串口的第3脚和第5脚之间是否输出10V左右的直流电压?将MAX232的第9脚接正5V,测量一下串口的第3脚和第5脚之间是否输出-10V左右的直流电压?这样可以判断MAX232是否完好和串口线的排线压接处是否有接触不良。

为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。

点击这里可以下载并运行这个串口调试软件,这是一个绿色的软件,无需安装,可以直接在当前位置运行这个软件。软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为COM1,当然将网站提供的51单片机实验板的串口也要和电脑的COM1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源,这时只要按下K1一次,在串口调试助手软件的接收区界面中就会增加一个“AF”字符,表示单片机向电脑发送“AF”字符成功。串口实验的源程序如下所示:

;这是一个AT89C51单片机实验开发板向PC机的串口单向发送数据AF的演示程序

;采用MAX232专用芯片作RS232/TTL电平转换。

;通讯波特率为4800KBPS,只要按下一次K1(就是P3.6引脚变成低电平)

;就发送一个16进制的AF字符

ORG 0000H

MOV SCON,#50H;设置成串口1方式

MOV TMOD,#20H;波特率发生器T1工作在模式2上

MOV PCON,#80H;波特率翻倍为2400x2=4800BPS

MOV TH1,#0F3H;预置初值(按照波特率2400BPS预置初值)

MOV TL1,#0F3H;预置初值(按照波特率2400BPS预置初值)

SETB TR1;启动定时器T1

;以上完成通讯初始化设置

WRIT:JB P3.6,$;判断K1是否按下,如果没有按下就等待

ACALL DELAY10;延时10毫秒消触点抖动

JB P3.6,WRIT;去除干扰信号

JNB P3.6,$;等待按键松开

MOV A,#0AFH;将16进制的字符AF发送到串口去

MOV SBUF,A;将AF通过串口发送出去

AJMP WRIT

;10毫秒延时子程序

DELAY10:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

END

六、红外线遥控器声光测试器

这里我们要用单片机实验板制作一个红外线遥控器声光测试器,红外线遥控器广泛用于电视机、VCD、音响等家用电器中,经过长时间使用可能会出现一些小故障,用我们制作的测试器可以方便地判断遥控器是否能发射红外信号?各个按键工作是否可靠?这个测试器非常简单,制作也很容易,但是也有一定的实用价值,站长就是用这个小东东帮邻居修了不少遥控器哦~~

首先让我们来完成试验板上的硬件部分,需要再焊接一个一体化红外接收器,一体化红外线接收器是一种集红外线接收和放大于一体,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积又很小巧,它适合于各种红外线遥控和红外线数据传输。再焊上两个滤波电容,可以使接收器工作更可靠

ORG 0000H

START:MOV P0,#0FFH;开机初始化

MOV P1,#0FFH

MOV P2,#11100111B

MOV P3,#0FFH

JB P3.2,$;等待遥控信号出现

MOV P1,#0

MOV p2,#0

JNB P3.2,$;如果是低电平就原地等待,如果出现高电平就退出

AJMP START

END

七、红外线遥控器解码程序

这里我们以红外线遥控编码芯片为LC7461等芯片为例来说明用单片机实现红外遥控解码的详细过程,站长琢磨这个解码程序花了相当多的精力,期间几经修改逐步完善,后来还用它开发了几个小产品,希望能对网友学习单片机有所帮助。

红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。

红外遥控系统

通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。遥控发射器及其编码

遥控发射器专用芯片很多,根据编码格式可以分成脉冲宽度调制和脉冲相位调制两大类,这里我们以运用比较广泛,解码比较容易的脉冲宽度调制来加以说明,现以LC7461组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:

采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”

上述“0”和“1”组成的42位二进制码经38kHz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,7461产生的遥控编码是连续的42位二进制码组,其中前26位为用户识别码,能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。后16位为8位的操作码和8位的操作反码用于核对数据是否接收准确。

当遥控器上任意一个按键按下超过36ms时,LC7461芯片的振荡器使芯片激活,将发射一个特定的同步码头,对于接收端而言就是一个9ms的低电平,和一个4.5ms的高电平,这个同步码头可以使程序知道从这个同步码头以后可以开始接收数据。

解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右即可。

根据红外编码的格式,程序应该等待9ms的起始码和4.5ms的结果码完成后才能读码。

如果邮购我们开发的51单片机试验板和扩展元件的网友,可以获得如上图所示的红外遥控手柄,这种遥控器的编码格式符合上面的描述规律,而且价格低廉,有32个按键,按键外形比较统一,如果用于批量开发,可以把遥控器上贴膜换成你需要的字符,这为开发产品提供了便利。

接收器及解码

LT0038是塑封一体化红外线接收器,它是一种集红外线接收、放大、整形于一体的集成电路,不需要任何外接元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,没有红外遥控信号时为高电平,收到红外信号时为低电平,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。

下面是一个对51实验板配套的红外线遥控器的解码程序,它可以把上图32键的红外遥控器每一个按键的键值读出来,并且通过实验板上P1口的8个LED显示出来,在解码成功的同时并且能发出“嘀嘀嘀”的提示音。

ORG 0000H

AJMP MAIN;转入主程序

ORG 0003H;外部中断P3.2脚INT0入口地址

AJMP INT;转入外部中断服务子程序(解码程序)

;以下为主程序进行CPU中断方式设置

MAIN:SETB EA;打开CPU总中断请求

SETB IT0;设定INT0的触发方式为脉冲负边沿触发

SETB EX0;打开INT0中断请求

;以下对单片机的所有引脚进行初始化,全部设置成高电平

MOV P2,#11100111B

AJMP $

;以下为进入P3.2脚外部中断子程序,也就是解码程序

INT: CLR EA;暂时关闭CPU的所有中断请求

MOV R6,#10

SB: ACALL YS1;调用882微秒延时子程序

JB P3.2,EXIT;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序

DJNZ R6,SB;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序

;以上完成对遥控信号的9000微秒的初始低电平信号的识别。

JNB P3.2,$;等待高电平避开9毫秒低电平引导脉冲

ACALL YS2;延时4.74毫秒避开4.5毫秒的结果码

MOV R7,#26;忽略前26位系统识别码

JJJJA:JNB P3.2,$;等待地址码第一位的高电平信号

LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态

MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中

JNC UUUA;如果为0就跳转到UUUA

LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束

UUUA: DJNZ R7,JJJJA

MOV R1,#1AH;设定1AH为起始RAM区

MOV R2,#2;接收从1AH到1BH的2个内存,用于存放操作码和操作反码

PP: MOV R3,#8;每组数据为8位

JJJJ: JNB P3.2,$;等待地址码第一位的高电平信号

LCALL YS1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态

MOV C,P3.2;将P3.2引脚此时的电平状态0或1存入C中

JNC UUU;如果为0就跳转到UUU

LCALL YS3;检测到高电平1的话延时1毫秒等待脉冲高电平结束

UUU: MOV A,@R1;将R1中地址的给A

RRC A;将C中的值0或1移入A中的最低位

MOV @R1,A;将A中的数暂时存放在R1数值的内存中

DJNZ R3,JJJJ;接收满8位换一个内存

INC R1;对R1中的值加1,换下一个RAM

DJNZ R2,PP;接收完8位数据码和8位数据反码,存放在1AH/1BH中

MOV A,1AH

CPL A;对1AH取反后和1BH比较

CJNE A,1BH,EXIT;如果不等表示接收数据发生错误,放弃

MOV P1,1AH;将按键的键值通过P1口的8个LED显示出来!

CLR P2.5;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功

LCALL YS2

LCALL YS2

LCALL YS2

SETB P2.5;蜂鸣器停止

EXIT: SETB EA;允许中断

RETI;退出解码子程序

YS1: MOV R4,#20;延时子程序1,精确延时882微秒

D1: MOV R5,#20

DJNZ R5,$

DJNZ R4,D1

RET

YS2: MOV R4,#10;延时子程序2,精确延时4740微秒

D2: MOV R5,#235

DJNZ R5,$

DJNZ R4,D2

RET

YS3: MOV R4,#2;延时程序3,精确延时1000微秒

D3:MOV R5,#248

DJNZ R5,$

DJNZ R4,D3

RET

END

这是按照红外遥控器按键的实际位置给出的32个按键的键值(16进制)

八、红外线电脑遥控器

将烧写文件烧录到AT89C51单片机内部后,再将电脑串口连接好带有扩展元件的51实验板,打开51实验板电源后,P1.0端口上的LED就会闪烁,这说明单片机程序已经正常运行了,再把红色的拨码开关的第2、第3位开关打开。

如上图所示就可以接收红外遥控编码了。这时实验板就变成了一个超级的PC遥控器了。当然我们还要借助Grider软件来实现。

1.安装软件

Grider是国外一款很优秀的免费红外遥控软件,支持多种的硬件,如红外键盘鼠标,红外接收器等,软件的功能强大有OSD屏显,名种常用的相关系统操作如开关显示器等等。这里就简单介绍一些简单的用法。首先要安装软件,点击这里下载Grider3.2,也可到www.xiexiebang.comments是注释命令有的,图中2是设定重复按键的等待时间,就是说按下一个键执行命令后,要等多久才能再次响应该键。这样就定义了一个键的命令。软件功能很强大这里也无法一一说明。自已多使用摸索几次就可以轻松上手了。

V

第三篇:单片机课程设计

单片机课程设计

课题: 简易电子琴设计

院:

电气与信息工程学院 专

业:

电子信息工程 姓

名:

李琳琳 学

号:

093411106

指导老师:

田巍

河南城建学院

2014年

01 月

01 日

第四篇:单片机课程设计

课 程 设 计

设计题目: 基于单片机的8*8点阵显示数字设计

学生姓名: 指导教师: 二级学院: 专

业: 班

级: 学

号:

目 录

摘要„„„„„„„„„„„„„„„„„„„„„„„„„„Ⅱ 1 方案选择及总体设计„„„„„„„„„„„„„„„„„„„1 1.1方案确定„„„„„„„„„„„„„„„„„„„„„1 1.1.1功能要求„„„„„„„„„„„„„„„„„„„„1 1.1.2方案确定„„„„„„„„„„„„„„„„„„„„1 1.2器件选择„„„„„„„„„„„„„„„„„„„„„1 2 控制系统设计„„„„„„„„„„„„„„„„„„„„„„2 2.1 控制系统硬件设计„„„„„„„„„„„„„„„„„2 2.1.1整体模块设计„„„„„„„„„„„„„„„„„„2 2.1.2单片机AT89C51„„„„„„„„„„„„„„„„„2 2.1.3单片机最小系统设计„„„„„„„„„„„„„„„5 2.1.3.1晶振电路设计„„„„„„„„„„„„„„„„„5 2.1.3.2复位电路设计„„„„„„„„„„„„„„„„„5 2.1.4驱动电路设计„„„„„„„„„„„„„„„„„„6 2.1.5LED点阵显示设计„„„„„„„„„„„„„„„„9 2.2控制系统软件设计„„„„„„„„„„„„„„„„„11 2.2.1软件设计思想„„„„„„„„„„„„„„„„„„11 2.2.2主程序流程图„„„„„„„„„„„„„„„„„„11 2.2.3子程序流程图„„„„„„„„„„„„„„„„„„13 3 系统仿真及调试„„„„„„„„„„„„„„„„„„„„14 3.1系统调试„„„„„„„„„„„„„„„„„„„„„14 3.2系统仿真„„„„„„„„„„„„„„„„„„„„„14 3.2.1protrus软件仿真„„„„„„„„„„„„„„„„14 3.2.2程序„„„„„„„„„„„„„„„„„„„„„„14 总结„„„„„„„„„„„„„„„„„„„„„„„„„^„17 参考文献„„„„„„„„„„„„„„„„„„„„„„„„18

I

摘 要

现在市场上各类基于LED的显示屏较多,但大部分产品为单一模式的LED显示屏,其在显示内容的更换及显示屏的重组等方面都存在不便之处。但随着信息化社会的迅速发展,LED显示屏正在向显示内容丰富、信息更改方便等方面发展。因此制作一款多功能的LED广告显示屏是非常有意义地。

LED驱动显示采用动态扫描方法,动态扫描方式是逐行轮流点亮,这样扫描驱动电路就可以实现多行的同名列共用一套列驱动器。以8×8点阵为例,把所有同一行的发光管的阳极连在一起,把所有同一列的发光管的阴极连在一起(共阳的接法),先送出对应第1行发光管亮灭的数据并锁存,然后选通第1行使其燃亮一定的时间,然后熄灭;再送出第2行的数据并锁存,然后选通第2行使其燃亮相同的时间,然后熄灭;第8行之后,又重新燃亮第1行,反复轮回。当这样轮回的速度足够快(每秒24次以上),由于人眼的视觉暂留现象,就能看到显示屏上稳定的图形。该方法能驱动较多的LED,控制方式较灵活,而且节省单片机的资源。

本次课程设计的题目为8×8点阵数字显示,设计的任务为使用单片机控制8×8的点阵显示0到9的数字,不仅显示清晰,并且每经过一定时间,显示的数字加一,从0 到 9 循环。以AT89C51单片机为核心,采用串行传输、动态扫描技术,制作一款模块化LED多功能显示屏。

在资料收集方面,主要是参考了《51单片机原理及应用—基于Keil C与Proteus》一书,结合了一些网络资料,以及一些集成块的使用说明书。

在整个工作过程中,根据收集来的资料绘制出大概的原理图,然后通过Proteus仿真,与此同时运用Keil 编程,用Keil 与Proteus进行联调,调试成功后确定了原理图和控制程序。

II

第一章 方案选择及总体设计

1.1 方案确定

1.1.1 功能要求

1、采用STC-51单片机作为微处理器。

2、设计一个8×8点阵LED数码字符显示器。

3、在目测条件下LED显示屏各点亮度均匀、充足、稳定、清晰无串扰。

4、动态显示“0——9”几个字符。

1.1.2 方案确定

采用ST89C51单片机作为微处理器,将共阳极二极管用共阴型接法连接成8×8点阵LED数码字符阵列,通过程序控制,采用动态显示,建立字符库“0——9”。

1.2 器件选择

微处理器采用ST89C51系列单片机,ST89C51单片机是这几年在我国非常流行的单片机,是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)高性能单片机,可擦除只读存储器可以反复擦除100次,具有低功耗、高性能的特点。

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

第二章 控制系统设计

2.1控制系统硬件设计

2.1.1整体模块设计

本设计行、列驱动电路,显示器电路,运用单片机的智能化,系统的将每个功能电路模块连接在一起,总体结构设计如图2-1所示。

点阵显示器行驱动电路PC上位机单片机8×8点阵LED显示器电路点阵显示器列驱动电路

图2-1 硬件系统框图

此次需要实现的功能是利用一个ST89C51,一个8×8LED点阵,动态显示“0——9”10个字,采用PC上位机驱动显示电路。

2.1.2 单片机AT89C51 AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产, 兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机能提供许多高性价比的应用场合,可灵活应用于各种控制领域。

AT89C51单片机引脚图如图2-2所示。

图2-2 AT89C51引脚图

AT89C51管脚说明: VCC:供电电压。GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行

存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下所示: P3口管脚

备选功能: P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:

来自反向振荡器的输出。

2.1.3 单片机最小系统设计

单片机的最小系统是能够让单片机工作的最小硬件电路。除了单片机外,最小系统还包括复位电路和时钟电路。

复位电路:单片机的复位电路接在复位信号RST上,复位电路用于将单片机内部电路的状态恢复到初始值。需要复位时按下按钮即可。

时钟电路:时钟电路为单片机工作提供基本时钟。时钟电路中包含一个晶体振荡器,简称晶振,频率范围是1.2~12MHz。晶体振荡频率越高,系统的时钟频率也越高,单片机的运行速度也就越快

ST89C51单片机最小系统电路由复位电路、晶振电路两部分组成。2.1.3.1 晶振电路设计

ST89C52单片机芯片内部设有一个由反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡电路的的输入端和输出端,时钟可有内部或外部生成,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就会产生自激振荡。系统采用的定时元件为石英晶体和电容组成的并联谐振回路。晶振频率采用12MHZ,C1、C2的电容值取30pF,电容的大小起频率微调的作用。晶振电路图如图2-3所示。

C1XTAL130pFC2XTAL230pF图2-3 晶振电路图

X112MHZ

2.1.3.2 复位电路设计

ST89C51单片机在启动运行时或者出现死机时需要复位,使CPU以及其他功能部件处于一个确定的初始状态,并从这个状态开始工作。单片机有多种复位方式,常用的复位操作有上电复位和手动复位方式。本设计采用最简单的上电复位方式,电路如图2-4所示。上电复位是通过外部复位电路的电容充电来实现的,复位电路产生的复位信号(高电平有效)由RST引脚送入到内部的复位电路,对ST89C51单片机进行复位,复位信号要持续两个机器周期(24个时钟周期)以上,才能使ST89C51单片机可靠复位。当上电时,C1相当于短路,有时碰到干扰时会造成错误复位,可在复位端加个去耦电容,可以取得很好的效果。

ST89C51单片机复位电路如下图所示:

VCCAT89C51VCCC510MF/25VRSTR94.7KVSSR24.7KVSSRSTR1C10MF/25VS5 RSTVCCAT89C51VCC

图2-4 上电复位电路图

图2-5 按键电平复位电路图

复位电路工作原理:

上电瞬间RST引脚的电位与VCC等电位,RST引脚为高电平,随着电容C5充电电流的减少,RST引脚的电位不断下降,可以保持RST引脚在为高电平的时间内完成复位操作。

当单片机已在运行当中时,按下复位键S5后再松开,也能使RST引脚为一段时间的高电平,从而实现ST89C51单片机复位。

2.1.4 驱动电路设计

驱动电路图如图2-6所示。

图2-6 驱动电路图

74LS245引脚图如图2-7所示。

图2-7 74LS245引脚图

引出端符号: A A总线端

B B总线端

/G 三态允许端(低电平有效)DIR 方向控制端

74LS245是用来驱动LED或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。74LS245还具有双向三态功能,既可以输出,也可以输入数据。

如果用89C51的P0口输出到数码管,那就要考虑到数码管的亮度以及P0口带负载的能力,当89C51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。选用74LS245提高驱动能力。P0口的输出经过74LS245提高驱动后,输出到数码管显示电路。

工作原理:

当片选端/CE低电平有效时,DIR=“0”,信号由B向A传输;(接收)DIR=“1”,信号由A向B传输;(发送)当CE为高电平时,A、B均为高阻态。

正向点亮一颗LED,至少也要10~20mA,若电流不够大,则LED不够大。而不管是ST89C51的I/O口,还是TTL、CMOS的输出端,其高态输出电流都不是很高,不过1~2mA而已。因此很难直接高态驱动LED,这时候就需要额外的驱动电路,通常有共阳型与共阴型LED阵列驱动电路,本设计才用共阴型高态扫描信号驱动电路。

共阴型LED阵列驱动电路采用高态扫描,也就是任何时间只有一个高态信号,其它则为低态。一行扫描完成后,再把高态信号转化到近邻的其他行,扫描信号接用一个反向驱动器,ST89C51本身内置一个反向驱动器,本设计将ST89C51作为点矩阵显示控制系统的控制核心,通过点矩阵实时显示并移动字符。

单片机的串口与行驱动器相连,用来发送显示数据信息。P3口与LED阵列的行引脚相连,送出数据、地址以及系统控制信号。输出低态时,最大可吸取0.5A,即500mA,若每个LED取30mA,7个LED同时点亮,需要210mA,完全满足LED点亮的基本条件。

所要显示的信号送入74LS245芯片,然后连接到LED阵列的列阵脚。对于高态的显示信号,将可提供其所连接LED的驱动电流,而这个驱动电流经过LED到输出端,形成正向回路,即可点亮该LED。其中每个晶体管任何时间只需负

责驱动一个LED,所以选择30mA射极电流的晶体管。驱动电路如图2-6所示。

2.1.5 LED点阵显示设计

本设计采用ATMEL公司的AT89C51作矩阵显示控制系统控制核心,12MHZ晶振,88点阵共阳LED显示器。其中,P0口作为字符数据输出口,P3口为字符显示扫描输出口,第31脚(EA)接电源,改变电阻(270×8)的大小可改变显示字符的亮度,驱动用74LS245芯片。

本设计LED矩阵显示器电路选用8×8点阵模块,系统由单片机控制。LED显示屏是将发光二极管按行按列布置的,在扫描驱动方式下可以按行扫描按列控制,也可以按列扫描按行控制。本文就是使用1块8×8点阵,采用按列扫描按行控制控制方式,扫描顺序自左向右,以满足数字显示的要求。8×8点阵LED结构如图2-8所示。

8×8点阵LEDabcdefgh12345678

图2-8 LED数码显示管

8×8 点阵LED的工作原理:LED点阵的显示方式是按显示编码的顺序,一行一行地显示。对于共阳型的点阵来说,当某一点所在的行对应高电平“1”并且其所在的列对应低电平“0”的时候,这一点就会被点亮。将每一行的显示时间进行一定的延时,由于人的视觉暂留现象,就会感觉到8行LED是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。图2-9为8×8点阵LED外观及引脚图,其等效电路如图2-10所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴。一个8×8点阵是由64个发光二极管按规律组成的,如图2-10所示。图中,行接高电平,列接低电平,发光二极管导通发光。

图2-9 8×8点阵LED外观及引脚图

图2-10 8×8点阵LED等效电路

8×8点阵数字显示的编码原理: 8×8点阵数字显示主要应用行扫描动态显示的方法实现,如图2-11所示,将行线依次置零,一次对列线编码,有红色填充部分为1,无填充部分为0。

图2-11 8×8点阵数字显示的编码原理

如此可得到“0”的编码为{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},同理可得到:

{0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00}

//1 {0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00}

//2 {0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00}

//3 {0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00}

//4 {0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00}

//5 {0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00}

//6 {0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00}

//7 {0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00}

//8 {0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}

//9 2.2控制系统软件设计

2.2.1 软件设计思想

主程序先进行设置中断,并启动,再进行键盘扫描载入“0——9”字型,然后判断一组字型是否扫描完,按不同情况进行循环调用子程序。进入子程序后,首先设置相应的程序,反复调用显示子程序,并在显示过程中反复调用键盘扫描子程序进行延时,判断是否退出相应的方式显示子程序。设计过程中,能很好得提高按键响应速度。

2.2.2 主程序流程图

主程序首先设置并启动T0中断,然后调用初始化程序,为后面程序要用到的数据调入,并清零一些用到的数据单元,然后载入“0——9”字型,进行扫描。图2-12为主程序流程图。

图2-12 主程序流程图

2.2.3 子程序流程图(定时中断服务程序)

图11 子程序流程图(定时中断服务程序)

第三章 系统仿真及调试

3.1系统调试

根据硬件电路图核对了元器件的型号、极性,安装是否正确,检查硬件电路连线是否与电路原理图一致,检查电路元器件是否都已经连接好。

通电后,用示波器检测单片机的复位和晶振电路是否有复位信号和振荡信号。

3.2 系统仿真

3.2.1 proteus软件仿真

使用proteus原理及仿真如图3-1所示。

如图3-1 proteus原理及仿真图

3.2.2 程序

#include #include #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]=

{ 0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00,//0 //1 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,//2 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00,//3 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,//4 0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00

};uchar i=0,t=0,Num_Index;//主程序 void main(){ P3=0x80;

Num_Index=0;

//从0开始显示

TMOD=0x00;

//T0方式0 TH0=(8192-2000)/32;//2ms定时

TL0=(8192-2000)%32;IE=0x82;

//允许T0中断

TR0=1;

//启动T0 while(1);}

//T0中断函数

void LED_Screen_Display()interrupt 1 { TH0=(8192-2000)/32;

//恢复初值

TL0=(8192-2000)%32;P0=0xff;

//输出位码和段码

P0=~Table_of_Digits[Num_Index*8+i];P3=_crol_(P3,1);

//P3循环向左一位 //5 //6 //7

//8 //9

}

if(++i==8)i=0;if(++t==250){

} t=0;

//每屏一个数字由8个字节构成 //每个数字刷新显示一段时间

if(++Num_Index==10)Num_Index=0;//显示下一个数字

总结

经过单片机的课程设计,我有了很大的收获。

首先,就是让我加深了对单片机的掌握和理解与应用,知道单片机到底是怎样控制点阵,怎样应用在生活中的。并且让我懂得了要善于思考,追求严谨,认真解决问题,才会有更多的收获。

然后,提高了通过查阅资料解决问题的能力。通过查阅大量的相关资料,详细了解了LED的发光原理和LED显示屏的原理,了解了LED的现状,清楚地了解了LED显示屏与其它显示屏相比较有那些优点,明确了研究目标。并且通过对单片机资料的查阅和应用,更进一步增加了对单片机知识的理解和运用能力。并证实了自己的思路:“查资料→思考总结→运用→找出差错,再查资料和向别人询问→再次运用”的正确性。

最后,本系统能够完成设计任务,能够显示数字0-9,并且显示也较为稳定清晰。本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。在本次课程设计中,主要使用了Proteus和Keil等软件进行硬件电路和控制程序的设计,加深了对这些软件的了解。感到Proteus对电子专业的同学来说是一个很有用的软件。总体来说这次的课程设计很成功,达到了预想的目的:学到了知识,提高了能力,完成了任务。

参考文献

[1] 张靖武,周灵彬 《单片机系统的PROTEUS设计与仿真》北京 电子工业出版社 [2] 吴金戌,沈庆阳,郭庭吉 《8051单片机实践与应用》北京 清华大学出版社 [3] 李群芳,肖看 《单片机原理、接口及应用》北京 清华大学出版社

[4] 张毅刚,彭喜元等 《新编MCS-51单片机应用设计 》黑龙江 哈尔滨工业大学出版社 [5] 李朝青,刘艳玲编著 《单片机原理及接口技术》北京 航空航天大学出版社

第五篇:单片机课程设计

基于单片机的火灾智能报警控制系统的设计

前言

在各种灾害中,火灾是最经常、最普通地威胁公众安全和社会发展的灾害之一。人类能够对火进行利用和控制,是文明进步的一个重要标志。火,给人类带文明进步、光明和温暖。但是,失去控制的火,就给人类造成灾害。据统计,我国 70 年代火灾年平均损失不到 2.5 亿元,80 年代火灾年平均损失不到

3.2 亿元。进入 90 年代,特别是 1993 年以来,火灾造成的直接财产损失上升到年均十几亿元,年均死亡 2000 多人。2010年上海静安区高层住宅着火,导致58人死亡,70余人受伤。2014年1月云南香格里拉大火,烧毁房屋100多栋,直接经济损失1亿多元人民币。火灾事件经常发生,防止火灾事故关系到人民群众的生命财产安全和社会和谐稳定。现在各种电子产品的普及,再加上人们防火意识的不强,这些都给火灾的发生带来了巨大的安全隐患。

对于火灾最关键的问题在于预防,目前防火报警系统趋于智能化、自动化,灵敏程度也越来越高。在这种背景下,基于单片机的火灾智能报警控制系统能突显出其巨大的优越性。目前,国内大多数偏重于商场、宾馆、高级写字楼、大型仓库等大型火灾报警系统的研发和设计。本系统侧重于小型火灾智能报警系统的设计,可在火灾发生初期检测到并且报警,还能够实时显示温度和烟雾浓度。

下载C51单片机自学第一课word格式文档
下载C51单片机自学第一课.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    单片机课程设计

    《单片机技术》课程设计说明书 音乐盒 院、部:电气与信息工程学院 学生姓名:刘亮 指导教师:凌云职称讲师 专业:电子信息工程 班级:电子1302班 学号:1330340220 完成时间: 2016年1......

    单片机实验报告[范文模版]

    实 实 验 验 报 报 告实验课程: 单片机原理及应用班级: 12 自动化 2 班 学号:姓名:教师:张玲 成绩:实 验 日 期 :年 月 日 实验名称: 实验 1-—计数显示器一、实验目得: 学习Prot......

    单片机学习心得

    单片机学习心得 一直想写一个帖子,将自己学习单片机的经历、经验和方法总结一下,今天终于动手写了,呵呵,这是我学习单片机的经验、心得、方法。希望对大家学习单片机有所帮助。......

    单片机学习心得

    篇一:单片机学习心得一直想写一个帖子,将自己学习单片机的经历、经验和方法总结一下,今天终于动手写了,呵呵,这是我学习单片机的经验、心得、方法。希望对大家学习单片机有所帮助......

    单片机英文翻译

    微机发展简史第一台存储程序的计算开始出现于1950前后,它就是1949年夏天在剑桥大学,我们创造的延迟存储自动电子计算机(EDSAC)。 最初实验用的计算机是由象我一样有着广博知识的......

    单片机说课稿

    《单片机》说课稿 一、说教材 1.选用教材及特点 本课程教材选用由人民邮电出版社出版的《单片机典型模块设计实例导航》。该教材以单片机功能为模块,以外围器件、相关电路设计......

    单片机课程设计

    单片机课程设计_报警器 报警器 ORG 0010H START:MOV DPTR,#TAB CLR P3.1 SETB P1 MOV A,P1 CPL A ANL A,#0F0H SWAP A MOV R0,A LCALL DISP1 MOV A,P1 CPL A ANL A,#0FH MOV......

    单片机课程设计

    单片机课程设计 --------- 机电汽车工程学院 同组成员:(机091-1) 姓名(学号):......