51单片机基础知识点(精选8篇)
51单片机基础知识点 篇1
51单片机知识点总结
第二章:
存储器空间组成,各区间特点及访问方式,工作寄存器区的设定,程序状态字的位结构及其功能,堆栈的操作,P0-P3各端口的功能,特点,使用方法,单片机复位信号的产生及复位之后的状态,振荡周期、状态周期、机器周期及指令周期的关系及计算方法。第三章:
寻址方式,各类指令(如一般传送类指令五种操作数之间的数据传递,特殊传送类指令的使用方法,算术运算类指令对PSW各标志位的影响,逻辑运算类指令的功能及其使用,控制转移类指令的转移范围等),简单程序的编写与识读(如数据块的搬移,延时程序的实现及如何设定循环次数,查表程序),包括简单C语言程序的识读(如数据传送,数据排序等)。第四章:
中断系统:包括中断源有哪些,如何进行中断允许控制,中断优先级控制,各自的中断入口地址是多少,中断得到CPU服务(即中断响应)的基本条件,中断响应延迟的原因。
定时器:定时器的各种工作方式及其使用方法,定时器的初始化,如何使用定时器实现周期信号的输出。以及相应的简单编程。
串行口:串行口的各工作方式及其使用,接收如何使能,多机通信 第五章:
三总线结构及其实现,片外扩展芯片的编址方式及其特点,片外程序及数据存储器的扩展实现并分析其地址区间,片外IO扩展的实现及其器件编址,简单编程。第六章:
键盘,主要是行列式编码键盘的实现方法,识别方法,扫描法的工作原理,按键去抖动。LED段码实现方法,动态LED显示与静态LED显示的比较。
51单片机基础知识点 篇2
计算机中的数制。数制是以表示数值所用的数字符号的个数来命名的, 并按一定进位规则进行计数的方法。有二进制、八进制、十进制、十六进制。
二进制 (Binary) 的数字符号为0、1, 基数为2, 进 (借) 位规则为逢二进一 (借一为二) , 区分符为B。八进制 (Octal) 的数字符号为0、1、2、3、4、5、6、7, 基数为8, 进 (借) 位规则为逢八进一 (借一为八) , 区分符为O。十进制 (Decimal) 的数字符号为0、1、2、3、4、5、6、7、8、9, 基数为10, 进 (借) 位规则为逢十进一 (借一为十) , 区分符为D或不加。十六进制 (Hexadecimal) 的数字符号为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F, 基数为16, 进 (借) 位规则为逢十六进一 (借一为十六) , 区分符为H。要熟练掌握各进制之间的转换。
R进制转换为十进制。在R进位计数中, 任意一个数值均可以表示为如下形式:
上述数值对应的十进制数 (设为S) 为:
十进制转换为二进制。整数部分的转换:除2取余, 至商为零;所得的余数倒序排列。小数部分的转换:乘2取整, 达到精度为止;乘积的整数部分顺序排列。
二进制和八进制间的转换。二进制转换为八进制:三位二进制取代一位八进制。八进制转换为二进制:一位八进制用三位二进制数代替。
二进制和十六进制之间的转换。二进制转换为十六进制:四位二进制取代一位十六进制。
十六进制转换为二进制:一位十六进制用四位二进制数代替。
位、字节和字。位 (bit、比特) :位是数据存储、传送的最小单位, 是指一位二进制数。通常所说的8位机一般是将二进制数每8位作为一个整体进行存储和传送的, 特殊情况下, 也允许按位进行操作。字节 (Byte) :字节是计算机中用来表示存储空间大小的最基本的容量单位。如计算机的内存容量、磁盘的容量等都是以字节为单位表示的。1个字节由8个二进制数位组成。字 (Word) :字长是字的长度, 是在同一时间中处理二进制数的位数, 它是计算机性能的重要标志。通常处理字长为8位数据的CPU叫8位CPU, 32位CPU就是在同一时间内处理字长为32位的二进制数据。
电平。电平指电压的高低。单片机中只有两种电平:高电平和低电平。如果所用的单片机的电源电压为+5v, 那么高电平为+5v。如果所用的单片机的电源电压为+3.3v, 那么高电平为+3.3v。单片机中的低电平为0v。如果, 单片机输出1, 其实就是某个管脚输出高电平。我们给某个管脚输入高电平, 就是向单片机输入了1。
数和码的区别。在计算机世界中, 一切都用二进制表示。数:是指事物的多少、数量关系。看到的和其真实意思一致。码:是用二进制表示文字、符号、指令及其他进制数。看到的和其真实意思不一致。比如张三的学号为13, “13”此时不是一个数, 而是一个码, 代表张三。生活中码的应用有电话号码、电报码、门牌号码, 都是码, 不是数。计算机中码的应用有指令码、ASCII码、BCD码。
计算机语言。计算机语言的种类总的来说可以分成机器语言、汇编语言、高级语言三大类。机器语言用机器指令 (0和1) 编写, 计算机能看懂并执行。汇编语言的指令采用了英文缩写的标识符, 比机器语言更容易识别和记忆。但其一般比较冗长、复杂、容易出错。高级语言是目前绝大多数编程者的选择, 和汇编语言相比, 它不但将许多相关的机器指令合成为单条指令并且去掉了与具体操作有关但与完成工k k m ma Ra=+++Ra RR----- (43) 221作无关的细节, 例如使用堆栈、寄存器等, 这样就大大简化了程序中的指令。单片机常用的高级语言为C语言。
用接近人类习惯的自然语言和数学语言编写单片机程序, 人类适合, 但计算机看不懂, 那就需要编译和编译器。编译是指在应用源程序执行之前, 就将程序源代码“翻译”成目标代码 (机器语言) , 因此其目标程序可以脱离其语言环境独立执行, 使用比较方便、效率较高。单片机汇编语言和C语言都需要编译。
综上所述, 学好单片机还需要更多的努力和实践, 掌握以上几点知识, 使单片机学习入门变的容易了, 提高了学习者对单片机学习的兴趣。
参考文献
[1]刘守义.单片机应用技术[M].西安电子科技大学出版社.
[2]王迎旭.单片机原理与应用[M].机械工业出版社.
单片机基础知识简述 篇3
关键词:单片机 归纳 总结
1、单片机的概念
将计算机的基本部件集成到一块芯片上,包括CPU、ROM、RAM、并行口、串行口、定时器/计数器、中断系统、系统时钟及系统总线等。单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
2、单片机各组成部分的功能
2.1、中央处理器(CPU)
中央处理器(CPU)是整个单片机的核心。它主要是完成数据运算,逻辑判断,控制和协调其他组成部件一同工作。通俗的说,就是大脑,是司令部,是指挥中心。
2.2、随即数据存储器(RAM)
随即数据存储器(RAM)是用来存储可读可写数据的,这些数据有些是用来运算的,有些是运算的结果。RAM的特点是可读,也可写,但是断电后立即消失,所以,它只是为CPU存储的数据临时所在地。
2.3、只读数据存储器(ROM)
只读数据存储器(ROM)主要是用于存储用户的程序的。另外有些程序中用到的原始数据,计算中用到的固定不变的常数,还有就是固定的数据表格,都可以储存在ROM中。他的特点是只能读出数据,不能写入数据,而且断电后数据不会丢失。对于初学者,还有一点要提醒的是,我们自己编出出来的应用程序,也是一种数据,它就是我们所说的机器码,按照一定的顺序存放在ROM中,CPU依次读出这些机器码,而且CPU认识的这些机器码,会根据这些机器码依次完成相应的处理。这就是CPU的工作过程。
2.4、定时器/计数器(T/C)
我很多微型计算机或单片机的应用系统中,需要定时,或者需要计数。比如我们需要定时地做某个控制动作,我们在编写程序时就可以利用单片机内部的定时器了;再如我们根据单片机外部的事件进行计数控制,那我们在在编写程序时就可以利用单片机内部的计数器来实现。此外,定时器/计数器(T/C)可以产生中断,从而控制程序的转向。总之,定时器/计数器(T/C)在编写程序中经常用到,而且十分有用,一定要熟练掌握。
2.5、输入/输出(I/O)口
输入/输出(I/O)口是单片机外部沟通的通道。单片机外部的数据通过输入(I)口输入到单片机内部;另一方面,单片机内部数据(通常是运算结果),通过输出口(Out Port)输出到外部,以实现各种控制功能。
3、单片机的优点
3.1、单片机集成度高。单片机包括CPU、4KB容量的ROM(8031 无)、128 B容量的RAM、2个16位定时/计数器、4个8位并行口、全双工串口行口。
3.2、系统结构简单,使用方便,实现模块化;
3.3、单片机可靠性高,可工作到106 -107小时无故障;
4、单片机最小系统基本电路
所谓单片机最小系统,是指能满足单片机基本应用的最简单而又是必不可少的基本电路。从图中可以认识到,一个单片机最小应用系统中最简单也要包括三部分的内容:电源模块电路、复位电路和时钟振荡电路。
单片机最小系统基本电路,是一个单片机应用系统所必需的最小电路资源,上述的三种基本电路在单片机应用系统中缺一不可,任何一个其他更大的单片机系统只不过是在这个最小系统的基础上增加一些其他的电路而已。
参考文献:
[1]李晓.浅谈对单片机的了解[J].科技创新,2004,9.
51单片机常用语句 篇4
1、定时器中断
{TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;} void time()interrupt 1
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
}
2、延时子程序
void delay(int z);
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
3、数码管显示数字表
[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
4、数码管位选兼&LED左至右
[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
显示子程序
4位数
void dispaly(ints);
{从
for(shu=9999;shu>0;shu--){{qian=shu/1000;bai=shu%1000/100;shi=shu%100/10;ge=shu%10;}for(i=0;i<278;i++)
}
{}} duan=1;P0=duanxuan[qian];duan=0;P0=0xff;wei=1;P0=0xef;wei=0;delay(1);duan=1;P0=duanxuan[bai];duan=0;P0=0xff;wei=1;P0=0xdf;wei=0;delay(1);duan=1;P0=duanxuan[shi];duan=0;P0=0xff;wei=1;P0=0xbf;wei=0;delay(1);duan=1;P0=duanxuan[ge];duan=0;P0=0xff;wei=1;P0=0x7f;wei=0;delay(1);
八位数
void display(long s)
{
for(shu=s;shu>0;shu--)
{
{qianwan=shu/10000000;baiwan=shu%10000000/1000000;shiwan=shu%1000000/100000;wan=shu%100000/10000;qian=shu%10000/1000;bai=shu%1000/100;shi=shu%100/10;ge=shu%10;}
for(i=0;i<10;i++){duan=1;P0=duanxuan[qianwan];duan=0;P0=0xff;wei=1;P0=0xfe;wei=0;delay(1);duan=1;P0=duanxuan[baiwan];duan=0;P0=0xff;wei=1;P0=0xfd;wei=0;delay(1);duan=1;P0=duanxuan[shiwan];duan=0;P0=0xff;wei=1;P0=0xfb;wei=0;delay(1);duan=1;P0=duanxuan[wan];duan=0;P0=0xff;wei=1;
51单片机结课感想 篇5
记得自己第一次知道有单片机这个名词时,还是大一的时候听一个学长说的,当时有一个优秀学长报告会,学长们介绍自己的学习经历还有自己的参赛过程,他们中的很多人都拿到了省级或者国家级大奖,当时感到很震撼,像他们这么既能把学习搞好又能参加各种科技创新类的比赛,我认为他们绝对的是一个优秀人才。他们介绍到自己的各种机电产品作品都是利用单片机来做的,还介绍到单片机目前渗透到我们生活的各个领域,从导弹的导航装置,飞机上各种仪表的的控制,工业自动化过程的实时控制和数据处理,到家用全自动洗衣机的控制,我们用的MP4等等,让我感受到了单片机的无限魅力,受到学长的影响,我想自己也不能就这么平平庸庸的度过这大学四年,于是我也想在课下学习一下单片机,这样可以拓宽一下自己的知识面。于是大二自己在课下学习了一段时间的单片机,可是事情没有这么简单,刚开始还能看懂一点,谁知后来越来越对一些概念名词不理解,到最后坚持了一个月后自己就把这事放在了一边,后来在这学期选修课时我又选了单片机,我想自己更进一步的能够学习单片机,很兴奋的是自己又借到了一个锐志开发板,事实证明我的选择没有错。
在第一次单片机课上自己感到很兴奋,韩老师的讲课方式很幽默而且很好,自己感觉还能接受当堂课的内容。自己首先对微型计算机有了一个比较清晰的认识,微型计算机即将微处理器cpu,存储器(ram、Rom),基本输入输出接口电路和总结线等组装在一块主板再加上软件系统,就构成了一台完整的微型计算机。我们在课上主要讲的是MCS-51单片机,c-51的基本语句有if、while、for、switch、case、do while等,当学到这个地方的时候,感到很熟悉因为我们原来已经学过了c语言,但唯一感到比较遗憾的是没有用c语言讲,讲的是汇编语言,刚开始自己对汇编语言感到很陌生,不过后来渐渐好了一点,正如任何一个系统正常工作都必须满足一些条件那样,单片机最小系统能够运行起来也必须满足一些条件即电源、晶振、负位电路。
当第一次编程时兴奋并且感觉对这些语句似乎越来越有感觉,但结果却没有自己没有自己想的这么简单,第一个语句是 Mov DPTR,#70H ; Mov A,@DPTR;自己当时对这个语句的理解是:第一句把70H的内容放入DPTR中,然后再把DPTR中的内容放入A中,Movx是用来访问外部数据存储器,Movx A,@DPTR;此句是用来读外部数据的,而Move @DPTR,A;则是用来写外部数据的,自己此时对自己也进行了进一步的反思,也许学新东西没有像自己想的那么难,按照记忆规律来说,我们大脑要接受新鲜事物必须对一个事物渐渐熟悉之后才能记得更加清楚,我们在学习的时候应该反复只有这样才能学的更好,正如韩老师所说学习单片机应该多练习只有这样,我们才能学的更好。
最近几次课时讲到定时器还有计数器,我对比如电子表等的定时作用有了一个联想,16位的计数器有DPTR、T1、T2,但是T1、T2不能用作16位计数器,TMOD用来设定工作方式既T1、T2用来做定时器还是计数器,而且在赋值时把低八位的值赋给TLI、TL2,把高八位的值赋给TL1、TL2。自己记得比较深的一个例子是MOV TMOD #16H;MOV TL0 #0FFH;MOV TH0 #0FFH;MOV TL1 #0ECH;MOV
TL1 #78H;SETB TR0 SETB TR1老师讲完后自己反思了一下,觉得是那么回事,可是自己却不能够很好的掌握不能自己独立的编写出来,自己还是缺乏对程序的理解以及掌握还有没能及时的练习,并且自己对自己也做了一个检讨,自己的学习效率相比之下感觉到比较低,也曾想改过但努力后还是失败了,有些已经成为习惯的东西比如思维习惯感觉到改,有点难。
51单片机基础知识点 篇6
单片机课程设计
题目:用51单片机实现电子时钟
院 部 物理与电子信息工程学院 专 业 名 称 电子信息科学与技术 班 级 1111 姓 名 杨庆月 学 号 2011111136 指 导 教 师 李刚
2013年12月09日
目录
摘要------------------------------1 1 单片机的相关知识------------1 1.1 单片机的简介--------------------1 1.2 单片机的特点--------------------1 1.3 89C52单片机的基本特点------------2 2 电子时钟--------------------3 2.1电子时钟的基本特点----------------3 2.2电子时钟的原理-------------------4 控制系统的硬件设计---------4 3.1单片机型号的选择-----------------4 3.2 lcd1602工作的原理---------------4 3.3 键盘电路的设计------------------6 3.4 复位电路设计-------------------------6
3.5 时钟电路设计-------------------7 3.6 整体电路原理图-----------------7 控制系统的软件的设计------8 4.1程序的设计----------------------8 4.2程序源代码----------------------8 5 仿真结果和实物图---------------19 5.1仿真结果------------------------------19 5.2实物图-19 6 总结--20
参考文献------------------------21
摘要:单片计算机即单片微型计算机。由 RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而 51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。
本设计主要设计了一个基于 AT89C52单片机的电子时钟。并在 1602上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。
具有时钟和日历的功能,年限显示范围是2013-2099(可修改),且具有闰年自动修正功能
关键字:单片机;子时钟;键盘控制;LCD1602。单片机识的相关知识 1.1 单片机简介
MCS-51是 INTEL公司在成功推广的 MCS-48单片机基础上加以改进而成的 8位单片机。
这种单片机大约是上世纪 70年代末推出的,内部程序可重写的为 8751,外扩程序的是 8031,一次性生产,不可改变程序的是 8051。外形一般为 DIP40封装。不久又推出了增强型的 8052,其资源更加丰富。以后又采用 CHMOS技术推出了 80c51,耗电大大降低。到了 90年代,INTEL公司把精力放到更赚钱的计算机上,将 51单片机技术转让给了一此其它公司,如 ATMEL Philips等半导体制造公司,使 51系列单片机的市场份额不断扩大。
尽管十多年前就有人认为 51单片机会很快淘汰,但事实证明 51单片机经过不断的改进后,由于技术成熟,使用方便,至今在 8位单片机市场仍然拥有庞大的用户。特别是 MCS-51技术的 20年专利期限到期后,大量的兼容型号不断推出。从上世纪 90年代后期开始,美国 ATMEL公司在掌握快速擦写的存储器后,推出了 AT89C系列,此系列在中国获得了广泛的应用。
在此之前,由于可擦写的 8751价格昂贵,国内长时间采用 8031+27C64这样的外扩存程序储器方式。
51单片机最初只有 DIP40这种很古老的封装,后来推出了 CHMOS工艺的80C51后开始有了 PLCC44这种相对较小的方形封装。AT89C系列中开始有 20脚的 DIP20的精简型封装,这极大方便了在一些相对简单的单片机应用,缩小了 PCB的体积。20脚的有 AT89C1051、AT89C1051、AT89C1051,对应程序存储器分别为 1K、2K、4K。
标准的 51为 4K程序空间,128字节的 RAM,32条端口,5个中断,2个定时/计数器,12个时钟周期执行一条基本指令,最长的除法为 48个周期。52为 8K程序空间,256字节的 RAM,32条端口,6个中断,3个定时/计数器。AT89S51是可在板上直接下载程序的改进型号,并增加了看门狗功能,AT89C51只能在编程器下写入程序,所以经常会有人在 PCB上安装 IC插座,以便取下来编程更新程序。
AT的 51系列后来也推出了单周期的 51,但价格没什么优势,国内很少使用。最近几年宏晶在国内大量推广 STC51系列单片机,最近又推出不少所谓 1T的单
片机,价格较低
STC采用串口直接下载程序,写入程序很方便。
1.2 单片机的特点.单片机的存储器ROM 和RAM 时严格区分的。ROM 称为程序存储器,只存放 程序,固定常数,及数据表格。RAM 则为数据存储器,用作工作区及存放用户数 据。2.采用面向控制的指令系统。为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。.单片机的I/O 口通常时多功能的。由于单片机芯片上引脚数目有限,为了 解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于 何种功能,可由指令来设置或由机器状态来区分。.单片机的外部扩展能力很强。在内部的各种功能部件不能满足应用的需求 时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带 来了很大的方便。
1.3 89C52单片机介绍
P0 口:P0 口为一个8 位漏级开路双向I/O 口,每脚可吸收8TTL 门电流。当 P1 口的管脚第一次写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 口也可作为AT89C52 的一些特殊功能口,如下表所示: 口管脚备选功能
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)。电子时钟
2.1 电子时钟的基本特点
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英 钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要 经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用用液晶显 示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示 时间的功能,还可以进行时和分的校对,片选的灵活性好。
2.2 电子时钟的原理
该电子时钟由89C52,1602 液晶等构成,采用晶振电路作为驱动电路,由延时程序和循环程序达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。而电路中有四个控制按键,一个是选择,一个进行加数,一个进行减数,还有一个保存。例如按下选择键,然后1602显示光标,此时可以用加或减来进行调节,在按下选择键,光标移到不同的单位上,同理进行调节,最后待日期时间调节好后,按下保存键,时钟开始计时。控制系统的硬件设计 3.1 单片机型号的选择
通过对51单片机的学习,认为STC89C52 是最理想的电子时钟开发芯片。STC89C52,最终认为89C52是一种带8K 字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用高密度非易失存储器制造技术制造,与工业标准的MCS-52指令集和输出引脚相兼容。还有一点重要原因,就是采用AT89C52时不能用开发板进行程序的下载,所以最终选用STC89C52进行设计。
3.2 1602 工作原理及显示电路
字符型LCD 通常有14 条引脚线或16 条引脚线的LCD,多出来的2 条线是背 光电源线VCC(15 脚)和地线GND(16 脚),其控制原理与14 脚的LCD 完全一样 1602液晶的基本的操作分为以下四种:
状态字读操作:输入RS=低、RW=高、EP=高; 输出:DB0~7 读出为状态字; 数据读出操作:输入RS=高、RW=高、EP=高; 输出:DB0~7 读出为数据; 指令写入操作:输入RS=低、RW=低、EP=上升沿; 输出:无; 数据写入操作:输入RS=高、RW=低、EP=上升沿; 输出:无。
如图 1602模块的引脚
LCD1602正面
LCD1602背面
1602与单片机连接图 3.3 键盘电路设计
本时钟采用四个按键控制,一个(实物图蓝色线24号引脚)是选择,一个进行加数(实物图紫色线25号引脚),一个进行减数(实物图灰色线26号引脚),还有一个保存(实物图白色线27号引脚)。例如按下选择键,然后1602显示光标,此时可以用加或减来进行调节,在按下选择键,光标移到不同的单位上,同理进行调节,最后待日期时间调节好后,按下保存键,时钟开始计时。
3.4 复位电路设计
单片机复位有上电复位和手动复位两种方式,上电复位是接通电源后利用RC充电来实现复位。手动复位是通过人为干预,强制系统复位。
连接至9号复位引脚
复位电路如图所示,可以实现上电复位和手动复位功能。
3.5 时钟电路设计
系统时钟源由内部时钟方式产生,时钟电路由12MH晶振和两个30PF瓷片电容组成,构成自激振荡,形成振荡源提供给单片机。电容可在5PF到30PF之间选择,电容的大小对振荡频率有微小影响,可起频率微调作用。
3.6整体电路原理图 控制系统的软件设计 4.1 程序设计
由于C 语言程序设计较汇编可读性强,可移植性,且可以大大降低编程的难 度和缩短开发周期,本系统程序采用c 语言设计。
4.2 程序源代码
#include
//包含单片机寄存器的头文件 #include
#define uchar unsigned char #define uint unsigned int
sbit RS=P2^0;
//寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P2^1;
//读写选择位,将RW位定义为P2.1引脚 sbit E=P2^2;
//使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7;
//忙碌标志位,将BF位定义为P0.7引脚
uchar code table[]=“2013-12-07 WEEK6”;
//初始化液晶显示 16 uchar code table1[]=“TIME: 19-27-50”;
//14
uchar count,s1num;char second,minute,hour,day,month,year,week;
sbit s1=P2^3;
//功能键
sbit s2=P2^4;
//加键 sbit s3=P2^5;
//减键
sbit s4=P2^6;
//保存并退出
/*
延时若干毫秒
*/ void delay(uchar n){ uchar i,a,b;for(i=0;i for(b=199;b>0;b--) for(a=1;a>0;a--);} /*********************************************** 函数功能:判断液晶模块的忙碌状态 返回值:result。result=1,忙碌;result=0,不忙 ************************************************/ uchar BusyTest(void){ bit result;RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1;E=1; //E=1,才允许读写 _nop_(); //空操作 _nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间 result=BF;//将忙碌标志电平赋给result E=0; //将E恢复低电平 return result;} /******************************************** 函数功能:写指令 入口参数:dictate *********************************************/ void WriteInstruction(uchar dictate){ while(BusyTest()==1); //如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置“0” _nop_(); _nop_(); //空操作两个机器周期,给硬件反应时间 P0=dictate; //将数据送入P0口,即写入指令或地址 _nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令 } /********************************************* 函数功能:写数据 入口参数:y(为字符常量)**********************************************/ void WriteData(uchar y){ while(BusyTest()==1);RS=1; //RS为高电平,RW为低电平时,可以写入数据 RW=0;E=0; //E置低电平(根据表8-6,写指令时,E为高脉冲,//就是让E从0到1发生正跳变,所以应先置“0” P0=y;//将数据送入P0口,即将数据写入液晶模块 _nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间 E=1; //E置高电平 _nop_();_nop_();_nop_();_nop_(); //空操作四个机器周期,给硬件反应时间 E=0; //当E由高电平跳变成低电平时,液晶模块开始执行命令 } /****************************************** 函数功能:对LCD的显示模式进行初始化设置 *******************************************/ void LcdInitiate(void){ uchar num; second=50;minute=27;hour=19;week=6;day=7;month=12;year=13;count=0;s1num=0;E=0;delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38);//显示模式设置:16×2显示,//5×7点阵,8位数据接口 delay(5);//延时5ms?,给硬件一点反应时间 WriteInstruction(0x38);delay(5);WriteInstruction(0x38);//连续三次,确保初始化成功 delay(5);WriteInstruction(0x0c);//显示模式设置:显示开,无光标,//光标不闪烁 delay(5);WriteInstruction(0x06);//显示模式设置:光标右移,字符不移 delay(5);WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delay(5);WriteInstruction(0x80);for(num=0;num<16;num++)//让液晶显示日期 { WriteData(table[num]);delay(5);} WriteInstruction(0x80+0x40);for(num=0;num<14;num++)//让液晶显示时间 { WriteData(table1[num]);delay(5);} TMOD=0x01; //定时器中断初始化 TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1; ET0=1;TR0=1;} //-------写年月日---------------void write_nyr(uchar add,uchar date){ uchar i,j;i=date/10;j=date%10;WriteInstruction(0x80+add);WriteData(0x30+i);WriteData(0x30+j);} //--------写时分秒---------------void write_sfm(uchar add,uchar date){ uchar i,j;i=date/10;j=date%10;WriteInstruction(0x80+0x40+add);WriteData(0x30+i);WriteData(0x30+j);} //-------------写星期-------------void write_week(uchar add,uchar date){ WriteInstruction(0x80+add);WriteData(0x30+date);} //---------该年是否是闰年-------------bit leap_year(){ int leap;if((year%4==0&&year%100!=0)||year%400==0) leap=1; //是闰年 else leap=0; //非闰年 return leap;} //----------键盘扫描--------------------void keyscan(){ if(s1==0) //第一个键是否按下 { delay(5); if(s1==0) { while(!s1); s1num++; if(s1num>7) s1num=1; if(s1num==1) //第一个键被按一次 { TR0=0; WriteInstruction(0x80+0x40+13); WriteInstruction(0x0f); } if(s1num==2) { WriteInstruction(0x80+0x40+10); } if(s1num==3) { WriteInstruction(0x80+0x40+7); } if(s1num==4) { WriteInstruction(0x80+9); } if(s1num==5) { WriteInstruction(0x80+6); } if(s1num==6) { WriteInstruction(0x80+3); } if(s1num==7) { WriteInstruction(0x80+15); } } } if(s1num!=0) //如果功能键被按下 { if(s2==0)//第二个按下 { delay(5); if(s2==0) { while(!s2); if(s1num==1) //第一个键被按一次,秒钟加一 { second++; if(second==60) second=0; write_sfm(12,second); WriteInstruction(0x80+0x40+13); } if(s1num==2) //第一个键被按二次,分钟加一 { minute++; if(minute==60) minute=0; write_sfm(9,minute); WriteInstruction(0x80+0x40+10); } if(s1num==3) //第一个键被按三次,时钟加一 { hour++; if(hour==24) hour=0; write_sfm(6,hour); WriteInstruction(0x80+0x40+7); } if(s1num==4) //日期加一 { day++; if(day==32) day=1; write_nyr(8,day); WriteInstruction(0x80+9); } if(s1num==5) //月加一 { month++; if(month==13) month=1; write_nyr(5,month); WriteInstruction(0x80+6); } if(s1num==6) //年加一 { year++; if(year==99) year=0; write_nyr(2,year); WriteInstruction(0x80+3); } if(s1num==7) //星期加一 { week++; if(week==8) week=1; write_week(15,week); WriteInstruction(0x80+15); } } } if(s3==0) //第三个键被按下 { delay(5);if(s3==0){ while(!s3); if(s1num==1) //秒减一 { second--; if(second==-1) second=59; write_sfm(12,second); WriteInstruction(0x80+0x40+13); } if(s1num==2) //分减一 { minute--; if(minute==-1) minute=59; write_sfm(9,minute); WriteInstruction(0x80+0x40+10); } if(s1num==3) //时减一 { hour--; if(hour==-1) hour=23; write_sfm(6,hour); WriteInstruction(0x80+0x40+7);} if(s1num==4) //日减一 { day--; if(day==0) day=31; write_nyr(8,day); WriteInstruction(0x80+9);} if(s1num==5) //月减一 { month--; if(month==0) month=12; write_nyr(5,month); WriteInstruction(0x80+6);} if(s1num==6) //年减一 { year--; if(year==-1) year=99; write_nyr(2,year); WriteInstruction(0x80+3);} if(s1num==7) //日期减一 { week--; if(week==0) week=7; write_week(15,week); WriteInstruction(0x80+15); } } } if(s4==0) //保存并退出 { s1num=0; WriteInstruction(0x0c); TR0=1; } } } /****************************************** main function *******************************************/ void main(void){ uchar k=0;LcdInitiate(); //调用LCD初始化函数 while(1){ keyscan(); k=1;} } /***************************************** 函数功能:定时器T0的中断服务函数 ******************************************/ void timer0()interrupt 1 { count++;if(count==13){ count=0; second++; if(second==60) //秒计满60,秒归0,分+1 { second=0; minute++; if(minute==60)//分计满60,分归0,时+1 { minute=0; hour++; if(hour==24)//时计满24,时归0,星期+1,日+1 { hour=0; week++; day++; if(week==8) week=1;//星期计满7,星期归1 if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)//大月三十一天 { if(day==32) //大月天数计满31,日归1,月+1 { day=1; month++; } } if(month==4||month==6||month==9||month==11)//小月三十天 { if(day==31) { //小月天数计满30,日归1,月+1 day=1; month++; } } if(month==2) { if(leap_year()) { if(day==30)//闰年二月29天??计满,日归1,月+1 { day=1; month++; } } else { if(day==29)//非闰年二月28天 计满,日归1,月+1 { day=1; month++; } } } if(month==13)//月计满12,月归1,年+1 { month=1; year++; } if(year==99)//年计满99,年归0 { year=0; } write_nyr(2,year); } write_nyr(5,month); } write_nyr(8,day); write_week(15,week); } write_sfm(6,hour); } write_sfm(9,minute);} write_sfm(12,second);5 仿真结果和实物图 5.1 仿真结果 5.2 实物图 总结: 说句实话,这个时钟在硬件上没有什么太多的技术含量,只有一个单片机的最小系统和一个显示电路,其实它们可以结合在一起,但是为了以后的方便,我还是将它们设计了两个部分,方便以后最小系统的其他方面的应用。还有就是程序,这个时钟程序如果让我自己写的话那我肯定不能再规定时间内完成,所以还是靠外界力量的帮忙。也正是如此,我找到我学习单片机的弱点,那就是程序的编写,记得室友百度开玩笑说:“程序是单片机的灵魂”,想想当时很搞笑,但仔 细一想,那还真是个恰当的比喻,如果说单片机没有程序的输入,那么它不能完成任何事情。虽然本学期的单片机课程即将结束,但是我学习单片机的过程还没有结束,以后还是要在程序的编写上多多下工夫。 此次的电子时钟设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应于以后的竞争。当遇到不会或是设计不出来的地方,我们就会在QQ 群里讨论或者是同学之间相互帮助。团结就是力量,无论在现在的学习中还是在以后的工作中,团结都是至关重要的,有了团结会有更多的理念、更多的思维、更多的情感。 参考文献 关键词:单片机,温度传感器,模/数转换器 单片机具有体积小、功能强、成本低、应用面广等优点, 可以说, 智能控制与自动控制的核心就是单片机。目前, 一个学习与应用单片机的高潮在全社会大规模地兴起。学习单片机的最有效方法就是理论与实践并重, 用80C51单片机自制了一个温度控制系统, 重点介绍了该系统的硬件结构及编程方法。 1 单片机温度控制系统的组成及工作原理 在工业生产和日常生活中, 对温度控制系统的要求, 主要是保证温度在一定温度范围内变化, 稳定性好, 不振荡, 对系统的快速性要求不高。以下简单分析了单片机温度控制系统设计过程及实现方法。现场温度经温度传感器采样后变换为模拟电压信号, 经低通滤波滤掉干扰信号后送放大器, 信号放大后送模/数转换器转换为数字信号送单片机, 单片机根据输入的温度控制范围通过继电器控制加热设备完成温度的控制。本系统的测温范围为0℃~99℃, 启动单片机温度控制系统后首先按下第一个按键开始最低温度的设置, 这时数码管显示温度数值, 每隔一秒温度数值增加一度, 当满足用户温度设置最低值时再按一下第一个按键完成最低温度的设置, 依次类推通过第二个按键完成最高温度的设置。然后温度检测系统根据用户设定的温度范围完成一定范围的温度控制。 2 温度检测的设计 系统测温采用AD590温度传感器, AD590是美国模拟器件公司生产的单片集成两端感温电流源。它的主要特性如下: 2.1 流过器件的电流 (m A) 等于器件所处环境的热力学温度 (开尔文) 度数;即式中:Ir-流过器件 (AD590) 的电流, 单位为m A;T-热力学温度, 单位为K。 2.2 AD590的测温范围为-55℃~+150℃; 2.3 AD590的电源电压范围为4V~30V; 2.4 输出电阻为710MW; 2.5 精度高。 AD590温度传感器输出信号经放大电路放大10倍, 再送入模/数转换器ADC0804, 转换后送单片机。根据AD590温度传感器特性以及放大10倍后的电压值与现场温度的比较发现, 实际温度转换后送入单片机的值与按键输入数值之间有一定的差值, 模/数转换器送入单片机的数值是按键输入值得2.5倍。由于单片机不能进行小数乘法运算, 所以先对按键输入进行乘5, 然后根据运算结果及程序状态字的状态再进行循环右移一位, 如果溢出标志位为低电平时直接对累加器进行一次带进位循环右移, 如果溢出标志位为高电平时, 先对进位标准位CY位置为高电平, 然后再进行一次带进位循环右移, 通过上述操作使按键输入的温度值与模/数转换器送入单片机的温度值相统一。 3 结论 给出了用单片机在0℃~99℃之间, 通过用户设置温度上限、下限值来实现一定范围内温度的控制;给出了温度控制系统的硬件连接电路以及软件程序, 此系统温度控制只是单片机广泛应用于各行各业中的一例, 相信通过大家的聪明才智和努力, 一定会使单片机的应用更加广泛化。 参考文献 [1]李广弟, 朱月秀, 王秀山.单片机基础[M].北京:北京航空航天大学出版社, 2001, 7. 关键词:AT89C51单片机;LCD;Proteus 中图分类号:TN702 文献标识码:A 文章编号:1674-7712 (2012) 12-0046-02 一、引言 亮丽实用的广告牌可以给我们的生活添加光彩、可以给店铺招揽生意。传统的广告牌都是固定的汉字,并且时间长了会掉色,使汉字模糊难认,这给我们的生活带来很多的不便。尤其是到了晚上传统的广告牌就失去了作用。因此我们需要一种造价低廉、使用方便、可以发光、可以方便改变汉字且比较耐用的电子显示广告牌。 二、设计过程及工艺要求 (一)基本功能 1.可以发光; 2.可以滚动; 3.可以用电脑改变汉字。 (二)主要技术参数 1.单片机选择AT89C51; 2.LCD显示器选择SMG12864A或AMPIRE128×64; 3.晶振选择12MHz; 4.两个输出电容选择30pF; 5.两个外围电阻选用10K和100Ω。 本设计的主要任务是显示标语,因此在硬件安装方面需要有适当的面积来安装电子显示屏,并且还要通过数据线把电子显示屏和电脑连起来。 三、系统的总体设计 (一)系统设计 本设计是基于51单片机的LCD汉字滚动显示,该设计是以AT89C51基本系统为核心的一套应用系统,其中包括单片机、复位电路、外围电路、显示电路、系统软件等部分的设计【1】。 (二)芯片AT89C51介绍 AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器, 该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C51的实物图如图所示。 AT89C51具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89C51可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止【2】。 (三) LCD显示屏介绍 LCD 液晶显示器是 Liquid Crystal Display 的简称,LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。比CRT要好的多,但是价钱较其稍贵。LCD主要应用于电脑的显示屏,随着电子技术的发展越来越多的手写手机也大量使用LCD做显示屏,还有一些广告牌、标语栏等也都用LCD来显示。 液晶显示屏(LCD)用于数字型钟表和许多便携式计算机的一种显示器类型。LCD显示使用了两片极化材料,在它们之间是液体水晶溶液。电流通过该液体时会使水晶重新排列,以使光线无法透过它们。因此,每个水晶就像百叶窗,既能允许光线穿过又能挡住光线。液晶显示器(LCD)目前科技信息产品都朝着轻、薄、短、小的目标发展,在计算机周边中拥有悠久历史的显示器产品当然也不例外。在便于携带与搬运为前提之下,传统的显示方式如CRT映像管显示器及LED显示板等等,皆受制于体积过大或耗电量甚巨等因素,无法达成使用者的实际需求。而液晶显示技术的发展正好切合目前信息产品的潮流,无论是直角显示、低耗电量、体积小、还是零辐射等优 点,都能让使用者享受最佳的视觉环境。 液晶显示器,依驱动方式来分类可分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)以及主动矩阵驱动(Active Matrix)三种。其中,被动矩阵型又可分为扭转式向列型(Twisted Nematic;TN)、超扭转式向列型(Super Twisted Nematic;STN)及其它被动矩阵驱动液晶显示器;而主动矩阵型大致可区分为薄膜式晶体管型(Thin Film Transistor;TFT)及二端子二极管型(Metal/Insulator/Metal;MIM)二种方式。 TN、STN及TFT型液晶显示器因其利用液晶分子扭转原理之不同, 液晶显示屏在视角、彩色、对比及动画显示品质上有高低程次之差别,使其在产品的应用范围分类亦有明显区隔。以目前液晶显示技术所应用的范围以及层次而言,主动式矩阵驱动技术是以薄膜式晶体管型(TFT)为主流,多应用于笔记型计算机及动画、影像处理产品。而单纯矩阵驱动技术目前则以扭转向列(TN)、以及超扭转向列(STN)为主,目前的应用多以文书处理器以及消费性产品为主。在这之中,TFT液晶显示器所需的资金投入以及技术需求较高,而TN及STN所需的技术及资金需求则相对较低。 (四)LCD的主要参数如下 1.对比度 液晶显示器的对比度实际上就是亮度的比值,定义是:在暗室中,白色画面(最亮时)下的亮度除以黑色画面(最暗时)下的亮度。更精准地说,对比度就是把白色信号在100%和0%的饱和度相减,再除以用Lux(光照度,即勒克斯,每平方米的流明值)为计量单位下0%的白色值(0%的白色信号实际上就是黑色),所得到的数值。对比度是最黑与最白亮度单位的相除值。因此白色越亮、黑色越暗,对比度就越高。对比度是液晶显示器的一个重要参数,在合理的亮度值下,对比度越高,其所能显示的色彩层次越丰富。 nlc202309011129 2.亮度 LCD是一种介于固态与液态之间的物质,本身是不能发光的,需借助要额外的光源才行。因此,灯管数目关系着液晶显示器亮度。最早的液晶显示器只有上下两个灯管,发展到现在,普及型的最低也是四灯,高端的是六灯。四灯管设计分为三种摆放形式:一种是四个边各有一个灯管,但缺点是中间会出现黑影,解决的方法就是由上到下四个灯管平排列的方式,最后一种是“U”型的摆放形式,其实是两灯变相产生的两根灯管。六灯管设计实际使用的是三根灯管,厂商将三根灯管都弯成“U”型,然后平行放置,以达到六根灯管的效果。 3.信号响应时间 响应时间指的是液晶显示器对于输入信号的反应速度,也就是液晶由暗转亮或由亮转暗的反应时间,通常是以毫秒(ms)为单位。要说清这一点我们还要从人眼对动态图像的感知谈起。人眼存在“视觉残留”的现象,高速运动的画面在人脑中会形成短暂的印象。动画片、电影等一直到现在最新的游戏正是应用了视觉残留的原理,让一系列渐变的图像在人眼前快速连续显示,便形成动态的影像。人能够接受的画面显示速度一般为每秒24张,这也是电影每秒24帧播放速度的由来,如果显示速度低于这一标准,人就会明显感到画面的停顿和不适。按照这一指标计算,每张画面显示的时间需要小于40ms。这样,对于液晶显示器来说,响应时间40ms就成了一道坎,低于40ms的显示器便会出现明显的画面闪烁现象,让人感觉眼花。要是想让图像画面达到不闪的程度,则就最好要达到每秒60帧的速度。 4.可视角度 LCD的可视角度都是左右对称的,但上下可就不一定了。而且,常常是上下角度小于左右角度。当然了,可视角是愈大愈好。然而,大家必须要了解的是可视角的定义。当我们说可视角是左右80度时,表示站在始于屏幕法线80度的位置时仍可清晰看见屏幕图像,但每个人的视力不同;因此我们以对比度为准。在最大可视角时所量到的对比愈大愈好。一般而言,业界有CR3 10及CR3 5两种标准【3】。 四、系统调试 (一)硬件的设计 打开Proteus ISIS,在Proteus ISIS 编辑窗口中单击元件列表之上的“P”按钮,添加元件,画出电路图。硬件电路制作完成并调试好后,便可将程序编译好下载到单片机试运行。根据实际情况可以修改汉字的内容、大小以及滚动方向。源程序可以使用汇编语言也可以使用C语言,本文使用了汇编语言。 (二)程序的调试与运行 1.HEX文件的生成 (1)打开单片机软件开发系统Keil μVision,单击“μVision”菜单中的“Project”,在此下拉菜单中单击“New Project”选项后,弹出“Create New Project”对话框,键入新建项目名称。 (2)键入新建项目名并单击“确定”按钮后,在弹出的“Select Device”对话框中选择合适的单片机型号,选择AT89C51。 (3)单击“μVision”菜单中的“File”,在此下拉菜单中选择“New”后,打开一个空的文本编辑窗口,在此窗口中键入程序,创建新的源程序“汉字式LCD滚动显示.ASM”文件。 (4)在左边的“Project”窗口的文件页中单击文件组,再单击鼠标右键后,再弹出的窗口中选中“Add Files to Group ‘Source Group 1”选项,将“汉字式LCD滚动显示.ASM”程序导入到“Source Group1”中。 (5)在“Project”下拉菜单中,选择“Rebuild all Target Files”项。若程序编译成功,将生成“汉字式LCD滚动显示.HEX”文件【4】。 2.调试与仿真 (1)在Proteus ISIS 编辑窗口中,单击鼠标右键将AT89C51单片机选中并单击鼠标左键,弹出“Edit Component”对话框,在此对话框的“Clock Frequency”栏中设置单片机晶振频率为12MHz,在“Program File”栏中单击新建图标,选择先前用Keil μVision 2生成的“汉字式LCD滚动显示.DSN”文件。 (2)更改程序中汉字库的内容可显示不同的汉字。本设计系统采用了美国ATMEL公司生产的单片机AT89C51芯片。以及其它常用芯片如:SMG12864A、AMPIRE128×64等来设计LCD汉字滚动显示电路,实现了汉字的滚动和显示。本系统具有易安装检测、软件功能完善,工作可靠、准确度高等优点。 参考文献: [1]张鑫.单片机原理及应用[M].电子工业出版社,2010 [2]张元良.单片机开发技术实例教程[M].机械工业出版社,2011 [3]韩雪涛.液晶显示器加工工艺[M].机械工业出版社,2011 [4]周润景.PROTEUS入门实用教程[M].机械工业出版社,2007 [作者简介]胡立波,教师,助教,江苏省南通商贸高等职业学校。 【51单片机基础知识点】推荐阅读: 51系列单片机10-04 51单片机期末考试试卷09-03 51单片机课程设计作业10-06 重邮51单片机课程设计报告10-05 89C51单片机07-04 基于51单片机的智能小车设计06-09 AT89S51单片机09-07 单片机TA89C5110-26 89C51单片机时钟程序05-27 51单片机设计多功能低频函数信号发生器08-2851单片机温度控制系统设计 篇7
51单片机基础知识点 篇8