单片机LCD12864显示系统课程设计

单片机LCD12864显示系统课程设计
单片机LCD12864显示系统课程设计

目录

一、概述 (2)

二、系统总体方案及硬件设计 (2)

系统框图 (3)

单片机最小系统 (4)

显示电路 (6)

按键控制电路 (6)

三、系统软件设计 (9)

软件设计概述 (9)

汉字显示 (10)

上下移屏 (10)

左右移屏 (11)

四、课程设计体会 (13)

五、参考文献 (13)

六、附录 (14)

总电路图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

总程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

一、概述

随着社会的发展,趣来趣多的地方需要应用显示功能,各种数字显示仪器中的显示、广告牌、数码产品等,传统的数码管显示已经远远不能满足各行各业的需求。基于单片机的LCD显示是一种用单片机来控制的一种显示系统,它不仅能显示种各数字、字母、还能显示各种字体的汉字以及一些简单的图象,使用起来极为方便,只要通过对单片机写入一定的程序来控制LCD 的显示即可完成,根据程序的不同而产生不同不效果以满足各种不同需求。

本文围绕设计以单片机作为LCD液晶显示系统控制器为主线,基于单片机AT89S51,采用的液晶显示控制器的芯片是SED1520,主要实现由按键控制的中文显示、图片显示、滚屏以及左右移动功能。同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。本系统是以单片机的C语言来进行软件设计,指令的执行速度快,可读性强。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。使硬件在软件的控制下协调运作。其次阐述了部分程序的流程图和实现过程。本文撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的编写。最后对我所开发的用单片机实现LCD液晶显示器控制原理的设计思想和软、硬件调试作了详细的论述。

二、系统总体方案及硬件设计

系统框图

本系统由电源部分、单片机最小系统部分、LCD12864显示电路部分、按键控制部分组成。其中,单片机最小系统部分包括晶振电路、复位电路。

单片机最小系统

、AT89S52单片机

89S51各引脚功能介绍:

1.VCC:

2.89S51 电源正端输入,接+5V。

3.VSS:

4.电源地端。

5.XTAL1:

6.单芯片系统时钟的反相放大器输入

端。

7.XTAL2:

8.系统时钟的反相放大器输出端,一

般在设计上只要在 XTAL1 和 XTAL2 上接

上一只石英振荡晶体系统就可以动作了,此

外可以在两引脚与地之间加入一 20PF 的

小电容,可以使系统更稳定,避免噪声干扰

而死机。

9.RESET:

A T89S51

10.89S51的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行

程序。

11.EA/Vpp:

12."EA"为英文"External Access"的缩写,表示存取外部程序代码之意,

低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。如果是使用 8751 内部程序空间时,此引脚要接成高电平。此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。

13.ALE/PROG:

14.端口3的管脚设置:

15.:RXD,串行通信输入。

16.:TXD,串行通信输出。

17.:INT0,外部中断0输入。

18.:INT1,外部中断1输入。

19.:T0,计时计数器0输入。

20.:T1,计时计数器1输入。

21.:WR:外部数据存储器的写入信号。

22.:RD,外部数据存储器的读取信号。

复位电路

电路图如下:

上电自动复位是通过外部复位电路的电容充电来实现的。只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。

图单片机复位电路

、时钟电路

时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊的一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的

质量也直接影响单片机系统的稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种为外部时钟方式。本文用的是内部时钟方式。

电路图如下:

图晶振电路

显示电路

管脚名称及功能:

管脚号

管脚

名称

电平管脚功能描述

1VSS0V电源地

2VCC~+5V电源正

3V0-对比度(亮度)调整

4

RS(C

S)H/L

RS=“H”,表示DB7——DB0为显示数据R S=“L”,表示DB7——DB0为显示指令数据

5

R/W

(SID)H/L

R/W=“H”,E=“H”,数据被读到DB7——DB0

R/W=“L”,E=“H→L”, DB7——DB0的数据被写到IR或DR

6

E(SC

LK)

H/L使能信号

7DB0H/L三态数据线

8DB1H/L三态数据线

9DB2H/L三态数据线

10DB3H/L三态数据线

11DB4H/L三态数据线

12DB5H/L三态数据线

13DB6H/L三态数据线

14DB7H/L三态数据线

15PSB H/L H:8位或4位并口方式,L:串口方式(见注释1)

基本指令系统:

模块控制芯片提供两套控制命令,基本指令和扩充指令如下:指指令码功能

R

S

R

/

W

D

7

D

6

D

5

D

4

D

3

D

2

D

1

D

清除显示0000000001

将DDRAM填满"20H",并且设定DDRAM的地

址计数器(AC)到"00H"

地址归位000000001X设定DDRAM的地址计数器(AC)到"00H",并

且将游标移到开头原点位置;这个指令不改变

DDRAM 的内容

显示状态开/关0000001D C B

D=1: 整体显示 ONC=1: 游标ON B=1:游

标位置反白允许

进入点设定00000001I

/

D

S

指定在数据的读取与写入时,设定游标的

移动方向及指定显示的移位

游标或显示移位000001S

/

C

R

/

L

X X

设定游标的移动与显示的移位控制位;这

个指令不改变DDRAM 的内容

、按键控制电路

电路由三个独立按键开关组成,分别与单片机的I/O相连,控制调整电路的加、减以及确定。按键的开关状态通过一定的电路转换为高、

低电平状态。按键闭合过程在相应的I/O端口形成一个负脉冲。闭合和

释放过程都要经过一定的过程才能达到稳定,这一过程是处于高、低电

平之间的一种不稳定状态,称为抖动。抖动持续时间的常长短与开关的

机械特性有关,一般在5-10ms之间。为了避免CPU多次处理按键的一次

闭合,应采用措施消除抖动。本文采用的是独立式按键,直接用I/O口

线构成单个按键电路,每个按键占用一条I/O口线,每个按键的工作状

态不会产生互相影响。

口表示下移功能键,当开关闭合时,控制显示屏内容整体向下滚动。

口表示上移功能键,当开关闭合时,控制显示屏内容整体向上滚动。

口表示右移功能键,当开关闭合时,控制显示屏内容整体向右移动。

口表示左移功能键,当开关闭合时,控制显示屏内容整体向左移动。

按键控制电路

三、软件部分

、软件系统概论

此设计是由单片机控制的LCD显示系统,外设四个按钮来控制显示的方式。对于按钮的工作方式可以是中断也可以是查询,在此设计中所

选用的顺序结构。用单片机的 P3口的低4来作为LCD的显示控制端,

即控制LCD使能端、读写控制揣、数据指令选择端及两个选屏端。对

于此设计课题,因为要求是用128×64的显示器来显示汉字,而汉字及

字符(如空格等)是需要显示代码的。所以,首先是通过一定的软件如

ZIMO等来获取你想要显示的汉字的编码代码。有了这款软件,就方便多

了,只在要软件中打入你想要显示的汉字或是字符,它就会自动生成代

码,使用起来非常方便,而不需要人工去编写相应的代码。

开始——显示图形——检测按键——显示相应内容。

、汉字显示

对于此设计课题,因为要求是用128×64的显示器来显示汉字,而汉字及字符(如空格等)是需要显示代码的。所以,首先是通过一定的

软件如ZIMO等来获取你想要显示的汉字的编码代码。有了这款软件,就

方便多了,只在要软件中打入你想要显示的汉字或是字符,它就会自动

生成代码,使用起来非常方便,而不需要人工去编写相应的代码。

由于此LCD的显示屏是被分为了两部分的,即左半屏和右半屏,分别由CS1和 CS2来控制,两个半屏的内存都分别由X和Y两个地址来

确定,X地址共64位,而Y地址两边各64位,一共128位,所以有的

时候就称其为12864显示器。X地址共有8个值,从0到7,即每个值有

8位,每显示一个字符要2个X值,而Y共128个值,分为两块即左右

两块,分别从0到63,即每个值一位。每显示一个汉字要16个Y值,

每显示一个字符要8个Y值。所以应该对两半屏分别编程取显示地址。

同时还得用一个显示子程序来显示显示地址中保存的显示代码(汉字代

码)。由此LCD的显示时序图可知,在显示过程中还需要一定的延时(不

同的型号,延时时间是不同的)并且在显示前需将一些特定的控制端置

相应的电平,比如说还所有输入之关需先把LCD总使能端打开,即置E

端为高电平,然后应再输入指令代码,对其进行相关的设置。所以还需

要一个适当的延时子程序以及输入数据前的准备程序。除了这些外,还

应写一个初始化程序,用来对中断等一些程序所需要的端口进行初始。

对于开中断,应打开总中断EA以及相应的低级中断EX0和 EX1。再者就

是两个中断程序,对于这两个中断程序比较简单,只需对要执行相关控

制(即常规显示和滚动显示)所需要的每件进行满足即可。最后就是主

函数,它的主要功能就是判断中断是否来临,来临了,然后判断是外部

中断0还是外部中断1,然后根据是0还是1来执行相应的程序,选择

相应的显示方式。当四行全显示完了后,中断失效,即不管你是否还按

键,都不再会对显示造成影响。显示出来的内容将一直保持。

、图片显示

显示图片和显示汉字类似,都是先通过字模软件先取模,然后再显示。

、上下移动

由此可见12864的显示起始行为0xc0,有规律的改变起始行的位置,就可以改实现上下移的效果。代码如下

左右移动

在本设计中,通过循环改变汉字字符在单片机上显示的左右半屏以及在左右半屏上显示的列位,行位不变,达到了左右移屏的效果。

for(i=0;i<64;i++) 片机原理及应用技术,徐州:中国矿业大学出版社,2003

[3] 郭天祥,51单片机C语言教程,电子工业出版社,2009

[4] 徐春辉,单片微机原理及应用,电子工业出版社,2013

六、附录

、附总电路图

、附总程序

取模头文件:

unsigned char code BMP[][64]={/*-- 调入了一幅图像:G:\Users\Administrator\Desktop\ --*/

/*-- 宽度x高度=128x64 --*/

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xE0,

0x00,0x30,0xC0,0x00,0xD8,0x30,0x20,0x48,0x18,0x22,0x04,0x1C,0x00,0x0E,0x2A, 0x00,

0x14,0x24,0x02,0x1C,0x20,0x0C,0x38,0x60,0x08,0xE0,0x10,0x90,0xA0,0x00,0xC0, 0x80,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xB0,0x20,0x68,0x90,0x22,0x1F,0x02,0x84, 0x82,

0x63,0x30,0x90,0xD0,0x48,0x2C,0x2C,0x34,0x12,0x16,0x0A,0x1B,0x09,0x0B,0x0A, 0x0B,

0x09,0x0B,0x0A,0x1B,0x12,0x16,0x34,0x24,0x2C,0x48,0xD9,0xB0,0x20,0xC7,0x80, 0x94,

0x01,0x0D,0x3C,0xC0,0x28,0x60,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0xC0,0x28,0x89,0x0A,0xD6,0x0C,0x03,0x00,0xE0,0x38,0x1C,0x42,0x73, 0x85,

0x66,0xA1,0x41,0xA0,0x40,0x00,0x20,0x20,0xC0,0x20,0xA0,0x60,0x80,0x60,0x80, 0x20,

0x20,0x60,0xE0,0xC0,0x40,0xC0,0xC0,0x80,0x80,0x00,0x00,0x01,0x01,0x02,0x04, 0x1B,

0x26,0xCC,0x38,0xE0,0x00,0x06,0x71,0x94,0x32,0x28,0x80,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0xCC,0x84,0x6D,0x41,0x4C,0x00,0x00,0x50,0xFF,0x01,0xD8,0x00,0x05,0x8A, 0x35,

0x56,0x99,0x26,0x99,0x23,0x8C,0x10,0x02,0xAD,0x02,0xBD,0x02,0xAD,0x1A,0x35, 0x4A,

0xD0,0x00,0x01,0x07,0x2F,0x7D,0xDF,0xFE,0xEB,0xBF,0xFD,0xBE,0xF8,0xB0,0xE0, 0x00,

0x00,0x01,0xDE,0x21,0x5E,0xD0,0x00,0x15,0x63,0xA5,0x1B,0xB0,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x08,0x40,0x4E,0xCB,0x98,0xA0,0x00,0x02,0x3F,0xC0,0x3B,0xC0,0x00,0x00, 0x01,

0x06,0x7A,0xC4,0xAB,0x58,0xA3,0x5C,0xA2,0x68,0x83,0x00,0x39,0xC4,0x39,0xC3, 0x18,

0xD5,0xB5,0xA4,0x00,0x00,0x2B,0xFB,0xDE,0xF7,0x2D,0xFF,0xFE,0xDB,0xF7,0xBD, 0xEF,

0x7C,0xD0,0x02,0xA1,0x5E,0x02,0xC0,0x41,0x85,0xC8,0x5D,0x04,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,

0x00,0x04,0x2C,0x7D,0xFC,0xFC,0xFC,0xFC,0xBC,0xFC,0xFC,0x7F,0x3C,0x73,0xA4, 0xD8,

0x20,0x60,0xC2,0x81,0x00,0x01,0x00,0x01,0x02,0x01,0x00,0x00,0x01,0x02,0x01, 0x02,

0x00,0x01,0x01,0x01,0x00,0x00,0x03,0x01,0x03,0x01,0x81,0x02,0x61,0x91,0xD9, 0xE1,

0xF1,0xFB,0xBF,0x1C,0x7C,0xB8,0xFC,0xFC,0xFC,0xFD,0x3C,0x0C,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x1F,0x3E,0x62,0x78,0xF8,0xFC,0xFA,0xBF, 0xFF,

0xFF,0x3F,0x0E,0x1E,0xFD,0xFD,0xFA,0xFA,0xF4,0xF4,0xF0,0xEC,0xE8,0xE8,0xF8, 0xE0,

0xEC,0xF8,0xF0,0xF4,0xF4,0xF4,0x3A,0xFA,0xFD,0xFD,0xFE,0xFE,0xFF,0x8F,0x3F, 0xFF,

0xBF,0xFF,0xDE,0x7E,0x7E,0x18,0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,0x07, 0x06,

0x0C,0x0D,0x1D,0x1B,0x1F,0x3F,0x3F,0x3F,0x73,0x6F,0x71,0x60,0x6F,0x7B,0x6F, 0x7F,

0x7E,0x7F,0x7F,0x6D,0x77,0x6E,0x30,0x3A,0x35,0x17,0x1F,0x0F,0x0F,0x07,0x07, 0x07,

0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x00

};

unsigned char code yier[]={/*-- 文字: 1 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70, 0x00,

0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30, 0x00};

unsigned char code erban[]={/*-- 文字: 2 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x84,0x84,0xFC,0x84,0x84,0x00,0xF8, 0x00,

0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x10,0x30,0x1F,0x08,0x88,0x42,0x21, 0x18};

unsigned char code dian[]={/*-- 文字: 电 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0xFF,0x88,0x88,0x88,0x88,0xF8,0x00,0x00, 0x00,

0x00,0x00,0x1F,0x08,0x08,0x08,0x08,0x7F,0x88,0x88,0x88,0x88,0x9F,0x80,0xF0, 0x00};

unsigned char code hua[]={/*-- 文字: 化 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x80,0x60,0xF8,0x07,0x00,0x00,0x00,0xFF,0x40,0x20,0x10,0x08,0x04,0x00, 0x00,

0x01,0x00,0x00,0xFF,0x00,0x04,0x02,0x01,0x3F,0x40,0x40,0x40,0x40,0x40,0x78, 0x00};

unsigned char code ban[]={/*-- 文字: 班 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0xFF,0x00,0x84,0x84,0xFC,0x84,0x84,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,

0x07,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00};

unsigned char code deng[]={/*-- 文字: 邓 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x12,0x22,0x42,0x82,0x62,0x1E,0x00,0x00,0xFE,0x02,0x22,0xDA,0x06,0x00, 0x00,

0x20,0x10,0x08,0x06,0x01,0x06,0x18,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00,

0x00};

unsigned char code xiao[]={/*-- 文字: 邱 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0xFC,0x44,0x44,0x44,0xC2,0x42,0x40,0x00,0xFE,0x02,0x22,0xDA,0x06, 0x00,

0x20,0x60,0x3F,0x20,0x20,0x10,0x1F,0x10,0x10,0x00,0xFF,0x08,0x10,0x08,0x07, 0x00};

unsigned char code mao[]={/*-- 文字: 尹 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x20,0x20,0x24,0x24,0x24,0xFC,0x24,0x24,0x24,0x24,0x24,0xFC,0x20,0x20,0x20, 0x00,

0x00,0x80,0x41,0x21,0x19,0x07,0x01,0x01,0x01,0x01,0x01,0x03,0x00,0x00,0x00, 0x00};

unsigned char code dan[]={/*-- 文字: 单 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00, 0x00,

0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10, 0x00};

unsigned char code pian[]={

/*-- 文字: 片 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x00, 0x00,

0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00, 0x00};

unsigned char code ji[]={/*-- 文字: 机 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00, 0x00,

0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78, 0x00};

unsigned char code ke[]={/*-- 文字: 课 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x40,0x42,0xCC,0x00,0x00,0x00,0xFE,0x92,0x92,0xFE,0x92,0x92,0xFE,0x00,0x00, 0x00,

0x00,0x00,0x3F,0x10,0x08,0x22,0x12,0x0A,0x06,0xFF,0x06,0x0A,0x12,0x22,0x20, 0x00};

unsigned char code se[]={/*-- 文字: 设 --*/

/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/

0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9E,0x82,0x82,0x82,0x9E,0xA0,0x20,0x20, 0x00,

0x00,0x00,0x00,0x3F,0x90,0x88,0x40,0x43,0x2C,0x10,0x28,0x46,0x41,0x80,0x80, 0x00};

unsigned char code erling[]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0xE0,0x10,0x08,0x08,0x10 ,0xE0,0x00,

0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F, 0x00};

unsigned char code yiwu[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0 x08,0x00,

0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E, 0x00};

主程序:

#include<>

#include<>

#include<>

#include""

#define uchar unsigned char

#define uint unsigned int

#define LCD_databus P0 //LCD12864的8位数据口

sbit RS=P2^2; //RS为0---命令;1----数据

sbit RW=P2^1; //RW为1---写;0---读

sbit EN=P2^0; //使能端

sbit CS1=P2^4; //片选1低电平有效,控制左半屏

sbit CS2=P2^3; //片选1低电平有效,控制右半屏

sbit KEY1=P3^0;

sbit KEY2=P3^1;

sbit KEY3=P3^2;

sbit KEY4=P3^3; //三个按键控制口

void display(int unm,int num);

void delay(uint i)

{

w hile(--i);

}

void Read_busy()//读“忙”函数-----数据线的最高位DB71则busy {

P0=0x00;

RS=0;

RW=1;

E N=1;

w hile(P0 & 0x80);

E N=0;

}

void write_LCD_command(uchar value) //写命令函数

{

Read_busy(); //对LCD的每次读写都要读忙 RS=0; //选择命令

RW=0; //读操作

LCD_databus=value;

EN=1; //EN由1----0锁存有效数据

_nop_();

_nop_();

EN=0;

}

void write_LCD_data(uchar value)//写数据函数

{

Read_busy();

RS=1; //选择数据

RW=0;

LCD_databus=value;

EN=1; //EN由1----0锁存有效数据

_nop_();

_nop_();

EN=0;

}

uchar Read_LCD(void) //读数据函数

{

u char value;

R ead_busy();

L CD_databus=0xFF; //先进行一次空读操作

R S=1;

R W=1;

E N=1;

_nop_();

_nop_();

E N=0;

L CD_databus=0xFF; //读取真正的数据

R S=1;

R W=1;

E N=1;

v alue=LCD_databus;

_nop_();

_nop_();

E N=0;

r eturn value;

}

void Set_page(uchar page) //设置“页”LCD12864共8页,一页是8行点阵点

{

page=0xb8|page; //页的首地址为0xB8

write_LCD_command(page);

}

void Set_line(uchar startline) //设置显示的起始行

{

startline=0xC0|startline; //起始行地址为0xC0

write_LCD_command(startline); //设置从哪行开始:共0--63;一般从0 行开始显示

}

void Set_column(uchar column) //设置显示的列

{

column=column &0x3f; //列的最大值为64

column= 0x40|column; //列的首地址为0x40

write_LCD_command(column); //规定显示的列的位置

}

void SetOnOff(uchar onoff) //显示开关函数:0x3E是关显示,0x3F是开显示{

o noff=0x3e|onoff; //onoff:1---开显示;0---关显示

write_LCD_command(onoff);

}

void SelectScreen(uchar screen) //选择屏幕

{

switch(screen)

{

case 0: CS1=0;CS2=0;break; //全屏

case 1: CS1=0;CS2=1;break;//左半屏

case 2: CS1=1;CS2=0;break;//右半屏

default:break;

}

}

void ClearScreen(uchar screen) //清屏函数

{

uchar i,j;

SelectScreen(screen); //0--全屏;1---左半屏;2---右半屏for(i=0;i<8;i++) //控制页数0-7,共8页

{

Set_page(i);

Set_column(0);

for(j=0;j<64;j++) //控制列数0-63,共64列{

write_LCD_data(0x00); //写入0,地址指针自加1

}

}

}

void init_LCD() //LCD的初始化

{

S etOnOff(1); //开显示

S electScreen(0);

C learScreen(0); //清屏

S et_line(0); //开始行:0

}

void Draw_dots(uchar x,uchar y,uchar color)

{

u char x_byte;

u char x_bit;

u char Temp_data; //暂时存放从LCD读出的数据

x_byte=(y>>3); //计算出该点属于哪个字节

x_bit=y-(x_byte<<3); //属于字节的哪一位

if(x>63) //x>63则显示在右半屏

单片机课程设计报告模板资料

哈尔滨远东理工学院 课题名称 专业班级 学号 学生姓名 指导教师 2015年10月14日

1、例举设计过程中遇到的问题及其解决方法(至少两例)。答:(1)问题说明: 解决方法: (2)问题说明: 解决方法: 2、教师现场提的问题记录在此(不少于2个问题)。

目录 1 设计任务 (1) 2设计方案 (2) 2.1任务分析 (2) 2.2方案设计 (2) 3 系统硬件设计 (3) 3.1时钟电路设计 (3) 3.2复位电路设计 (3) 3.3 灯控制电路设计 (3) 3.4 倒计时显示电路设计 (4) 3.5 按键控制电路设计 (5) 4 系统软件设计 (6) 4.1 1S定时 (6) 4.2 定时程序流程 (6) 4.3交通灯的设计流程图 (6) 4.4定时器0 及中断响应 (7) 5仿真与性能分析 (8) 6心得体会 (9) 参考文献 (10) 附录1 系统原理图 .......................................................................错误!未定义书签。附录2 系统PCB图 .....................................................................错误!未定义书签。附录3 程序清单 .. (11) II

1 设计任务 支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。如图1.1所示。设东西向为主干道,南北为支干道。 1. 基本要求 (1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 (2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒,支干道每次放行20秒,设立30秒、20秒计时、显示电路。 (3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。黄灯亮时,原红灯按1Hz 的频率闪烁。 (4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。 2. 选做 (1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆禁行而行人通行状态,即主干道和支干道均为红灯亮。 (2) 实现绿波带。所谓‘绿波带’,是指在一定路段,只要按照规定时速,就能一路绿灯畅行无阻。“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。

LCD12864显示程序

本例程为通过用A T89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

LCD12864显示程序

;实验目的:熟悉12864LCD的使用 ;12864LCD带中文字库 ;编程让12864LCD显示公司名称“深圳乾龙盛电子”,公司电话“0975”,公司传真“6”;硬件设置: ;关断所有拨码开关。 #include<> ;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_H S_OSC ;芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 #define RS PORTA,5 ;命令/数据选择 #DEFINE RW PORTA,4 ;读/写选择 #DEFINE E PORTA,3 ;使能信号 #DEFINE PSB PORTA,2 ;并口/串口选择(H/L) #DEFINE RST PORTA,0 ;复位信号 ;----------------------------------------------- LCD_X EQU 30H ;页地址 LCD_Y EQU 31H ;Y地址 COUNT EQU 32H ;循环计数用 COUNT1 EQU 33H ;循环计数用 COUNT2 EQU 34H ;循环计数用 POINT EQU 35H ;查表偏移地址 POINT1 EQU 36H ;查表偏移地址 POINT2 EQU 37H ;查表偏移地址 TEMP EQU 38H ;临时寄存器 TEMP1 EQU 39H ;临时寄存器 ;----------------------------------------------- ORG 0000H ;复位地址 NOP ;ICD需要的空指令 GOTO MAIN ;跳转到主程序 ;**********************主程序************************ MAIN BANKSEL TRISA CLRF TRISA ;A口输出 CLRF TRISD ;D口输出 BANKSEL ADCON1 MOVLW 06H MOVWF ADCON1 ;A口全为数字口 CLRF STATUS

单片机课程设计(温度控制系统)

温度控制系统设计 题目: 基于51单片机的温度控制系统设计姓名: 学院: 电气工程与自动化学院 专业: 电气工程及其自动化 班级: 学号: 指导教师:

2015年5月31日 摘要: (3) 一、系统设计 (3) 1.1 项目概要 (3) 1.2设计任务和要求: (4) 二、硬件设计 (4) 2.1 硬件设计概要 (4) 2.2 信息处理模块 (4) 2.3 温度采集模块 (5) 2.3.1传感器DS18b20简介 (5) 2.3.2实验模拟电路图 (7) 2.3.3程序流程图 (6) 2.4控制调节模块 (9) 2.4.1升温调节系统 (9) 2.4.2温度上下限调节系统 (8) 2.43报警电路系统 (9) 2.5显示模块 (12) 三、两周实习总结 (13) 四、参考文献 (13) 五、附录 (15)

5.1原理图 (15) 摘要: 在现代工业生产中,温度是常用的测量被控因素。本设计是基于51单片机控制,将DS18B20温度传感器实时温度转化,并通过1602液晶对温度实行实时显示,并通过加热片(PWM波,改变其占空比)加热与步进电机降温逐次逼近的方式,将温度保持在设定温度,通过按键调节温度报警区域,实现对温度在0℃-99℃控制的自动化。实验结果表明此结构完全可行,温度偏差可达0.1℃以内。 关键字:AT89C51单片机;温控;DS18b20 一、系统设计 1.1 项目概要 温度控制系统无论是工业生产过程,还是日常生活都起着非常重要的作用,过低或过高的温度环境不仅是一种资源的浪费,同时也会对机器和工作人员的寿命产生严重影响,极有可能造成严重的经济财产损失,给生活生产带来许多利的因素,基于AT89C51的单片机温度控制系统与传统的温度控制相比具有操作方便、价价格便宜、精确度高和开展容易等优点,因此市场前景好。

智能小车单片机课程设计报告

题目: 智能小车设计 打开命令行终端的快捷方式: ctr+al+t:默认的路径在家目录 ctr+shift+n:默认的路径为上一次终端所处在的路径. linux@ubuntu:~$ linux:当前登录用户名. ubuntu:主机名 :和$之间:当前用户所处在的工作路径. windows下的工作路径如C:\Intel\Logs linux下的工作路径是:/.../..../ ~:代表的是/home/linux这个路径.(家目录). ls(list):列出当前路径下的文件名和目录名. ls -a(all):列出当前路径下的所有文件和目录名,包括了隐藏文件. .:当前路径 ..:上一级路径 ls -l:以横排的方式列出文件的详细信息 total 269464(当前这个路径总计所占空间的大小,单位是K) drwxr-xr-x 3 linux linux 4096 Dec 4 19:16 Desktop 第一个位置:代表的是文件的类型. linux系统下的文件类型有以下几种. b:块设备文件 c:字符设备文件 d:directory,目录 -:普通文件. l:连接文件. s:套接字文件. p:管道文件. rwxr-xr-x:权限 r:读权限-:没有相对应的权限 w:写权限

x:可执行权限 修改权限: chmod u-或者+r/w/x 文件名 chmod g-或者+r/w/x 文件名 chmod o-或者+r/w/x 文件名 第一组:用户权限 第二组:用户组的权限 第三组:其他用户的权限. chmod 三个数(权限) 文件名 首先根据你想要的权限生成二进制数,再根据二进制数转换成十进制的三位数 rwxr-x-wx 111101011 7 5 3 chmod 753 文件名 rwx--xr-x 第二个位置上的数字:对应目录下的子文件个数,如果是非目录,则数字是1 第三个位置:用户名(文件创造者). 第四个位置:用户组的名字(前边的用户所处在的用户组的名字). 第五个位置:对应文件所占的空间大小(单位为b) 第六~八个位置:Dec 4 19:16时间戳(最后一次修改文件的时间) 最后一个位置:文件名 操作文件: 1.创建一个普通文件:touch 文件名 2.删除一个文件:rm(remove) 文件名 3.新建一个目录:mkdir(make directory) 目录名 递归创建目录:mkdir -p 目录1/目录2/目录3 4.删除一个目录:rmdir 目录名.//仅删除一个空目录 rm -rf 目录名//删除一个非空目录 5.切换目录(change directory):cd 路径 linux下的路径分两种 相对路径:以.(当前路径)为起点. 绝对路径:以/(根目录)为起点, 用相对路径的方式进入Music:cd ./Music 用绝对路径的方式进入Desktop:cd /home/linux/Desktop 返回上一级:cd ..

玩转12864液晶(1)--显示字符

在我们常用的人机交互显示界面中,除了数码管,LED,以及我们之前已经提到的LCD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KS0108 T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C) 关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。 我们先来了解一下它的并行连接情况。 下面是电路连接图

从上面的图可以看出,液晶模块和单片机的连接除了P0口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W 是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。 通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。 看看并行模式下的写时序图:

根据这个时序图,我们就可以写出写数据或者写命令到LCD12864液晶的子程序。 读时序图如下: 根据这个时序图我们就可以从LCD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。 下面让我们根据这些编写出它的驱动程序吧。 我的硬件测试条件为:STC89C516(11.0592MHz) + OCMJ4X8C 实际显示效果图片如下: 程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。[p][/p] #include "reg52.h" #include "intrins.h" sbit io_LCD12864_RS = P1^0 ;

单片机最小系统课程设计

目录 摘要............................................................................................................................................................. I ABSTRACT .....................................................................................................................................................II 第1章绪论 . (1) 1.1 单片机的概述 (1) 1.2 单片机的基本结构 (1) 第2章单片机最小系统介绍 (4) 2.1单片机最小系统电路介绍 (4) 2.2电路设计方案 (4) 第3章单片机最小系统的硬件设计 (7) 3.1硬件原理图 (7) 3.2系统各组成模块介绍 (8) 3.2.1 振荡电路 (8) 3.2.2 电源电路 (7) 3.2.3 程序下载电路 (9) 3.2.4 外存储电路 (10) 3.2.5 数码管显示电路和矩阵键盘电路 (11) 3.2.6 液晶显示电路 (12) 3.2.7 复位电路 (13) 第4章安装与调试 (15) 4.1调试方法和结果 (15) 4.1.1电源部分安装调试 (15) 4.1.2 STC89C52单片机最小化系统主控制部分安装调试 (15) 4.1.3 程序下载部分电路安装调试 (16) 4.1.4 外存储电路调试 (16) 4.1.5 数码管显示电路和键盘电路调试 (16) 总结和体会 (17) 致谢 (18) 参考文献 (19) 附录 (20)

单片机课程设计报告

课程设计报告 课程名称单片机原理及应用 设计题目电子琴的设计 专业班级自动化1142 姓名周太永 学号1104421242 指导教师蔡长青张卓 起止时间2014.6.23-2014.7.11 成绩评定 考核内容设计 表现 设计 报告 答辩 综合 评定 成绩 电气与信息学院

2013/2014学年第二学期 《单片机控制系统设计与调试》课程设计任务书 指导教师:蔡长青班级:自动化1141、2班 地点:机房、单片机实验室(实训中心415) 课程设计题目:基于单片机原理的电子琴设计 一、课程设计目的 1.灵活运用单片机的基础知识,依据课程设计内容,能够完成从硬件电路图设计, 到PCB制版,再到软件编程及系统调试实现系统功能,完成课程设计,加深对单片机基础知识的理解,并灵活运用,将各门知识综合应用。 2.能够上网查询器件资料,培养对新知识新技术的独立的学习能力和应用能力。 3.独立完成一个小的系统设计,从硬件设计到软件设计,增强分析问题、解决问 题的能力,为日后的毕业设计及科研工作奠定良好的基础。 二、课程设计内容(包括技术指标) 1.焊接。认真、仔细,避免缺焊、漏焊。 2.频率计算。会计算脉冲值与频率的关系。 3.工作过程。开机时,第一步是对定时器T0进行初始化,设定它的工作状态(对 于本系统将T0设定为工作方式0);然后判断是否有键按下,如果没有按键按下,继续判断,如果有按键按下,则判断是哪个键按下;再根据按键的功能将计数初值装入定时器T0中中并启动T0,当T0定时完毕后,重新装入计数初值继续定时并将P3.3取反,再次定时完毕后再一次的装入计数初值 继续定时并将P3.3取反,一直循环此操作直到按键释放为止,按键释放后 停止T0工作并再次判断是否又有按键按下,并继续执行以前的过程。 三、时间安排 1.布置任务、查资料1天 2.硬件电路图设计及PCB制版3天 3.硬件电路图及PCB制版验收、电路板焊接1天 4.软件编程设计3天 5.系统调试3天 6.调试验收1天 7.完成设计报告3天 四、基本要求 1.画出硬件电路图,完成PCB制版; 2.画出软件流程图,编写程序(C51语言/汇编语言); 3.完成系统调试; 4.提交设计报告。

LCD12864写字符串程序及其头文件

/****************************** 2012年5月19日 调试成功 编辑环境:ICCAVR 功能:用LCD12864显示汉字 ********************************/ #include #include #include"LCD_12864.c" /************************************** 端口初始化 **************************************/ void port_init() { DDRA=0XFF; PORTA=0XFF; DDRC=0XFF; PORTC=0XFF; } /****************************************** 主函数 *******************************************/ void main() { uchar i; port_init(); delay(100);// port_init();// LCD_init(); write_string(0,0,"zheng Zunggui"); delay(200); write_string(0,1,"I Love微电子!"); delay(200); write_string(0,2,"Working Hard !"); delay(200); //write_string(0,3,"I Love English!"); //write_string(0,3,"做电子设计大赛!");//包含了汉字字符串中有汉字输入方式/************************************** 此为单独操作汉字字符的方法 ****************************************/ LocateXY(1,3);//单独写汉字时,要一个字节一个字节写入,分开地址不重合 //先高字节后低字节与ASCCII不冲突 write_data(0xD5);// D5C5 D4F6 B9F0

LCD显示程序

本例程为通过用AT89C52芯片操作LCD12864显示的程序,使用的晶振为12M。 /********************************************************** 程序说明:LCD12864显示主程序 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ #include #include"12864.c" void main() { Ini_Lcd(); //液晶初始化子程序 Disp(1,0,6,"莫剑辉"); //显示数据到LCD12864子程序 while(1); } 这里我们通过调用下面的头文件就可以了,这样的做法方便我们以后要用到LCD12864的程序的调用。 /********************************************************** 程序说明:LCD12864显示头文件 程序调试员:莫剑辉 调试时间:2010-6-7 **********************************************************/ //#include #define uchar unsigned char #define uint unsigned int #define DATA P2 //数据输出端0~7 sbit RS=P0^0; //LCD12864 RS端 sbit RW=P0^1; //LCD12864 RW端 sbit E =P0^2; //LCD12864 E 端 sbit PSB =P0^3; /********************************************* 延时子程序 *********************************************/ void Delay_1ms(uint x) { uint j,i; for(j=0;j

单片机课程设计报告模板

单片机系统课程设计报告 专业:自动化 学生姓名: 学号: 指导教师: 完成日期:2011 年 3 月17 日

目录 1 设计任务和性能指标 (3) 1.1设计任务............................................................................ 错误!未定义书签。 2 设计方案 (4) 2.1任务分析 (4) 2.2方案设计 (4) 3 系统硬件设计 (5) 3.1时钟的电路设计 (5) 3.2复位电路设计 (5) 3.3灯控电路设计 (5) 3.4倒计时电路设计 (6) 3.5按键控制电路设计 (7) 4 系统软件设计 (8) 4.11秒定时 (8) 4.2定时程序流程 (8) 4.3交通灯的设计流程图 (9) 4.4定时器0与中断响应 (10) 5 仿真及性能分析 (10) 5.1仿真结果图 (11) 5.2仿真结果与分析 (12) 6 心得体会 (13) 参考文献 (14) 附录1 系统原理图 (15) 附录2 系统PCB图 .................................................................. 错误!未定义书签。附录3 程序清单 (17)

1.1设计任务 利用单片机完成交通信号灯控制器的设计,该交通信号灯控制器由一条主干道和一条支干道汇合成十字路口,在每个入口处设置红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。用红、绿、黄发光二极管作信号灯。如图5.1所示。设东西向为主干道,南北为支干道。 图5.1 交通灯示意图 1. 基本要求 (1) 主干道处于常允许通行的状态,支干道有车来时才允许通行。主干 道亮绿灯时,支干道亮红灯;支干道亮绿灯时,主干道亮红灯。 (2) 主、支干道均有车时,两者交替允许通行,主干道每次放行30秒, 支干道每次放行20秒,设立30秒、20秒计时、显示电路。 (3) 在每次由绿灯亮到红灯亮的转换过程中,要亮5秒黄灯作为过渡。 黄灯亮时,原红灯按1Hz 的频率闪烁。 (4) 要求主支干道通行时间及黄灯亮的时间均可在0~99秒内任意设置。 2. 选做 (1) 可设置紧急按钮,在出现紧急情况时可由交警手动实现全路口车辆 禁行而行人通行状态,即主干道和支干道均为红灯亮。 (2) 实现绿波带。所谓‘绿波带’,是指在一定路段,只要按照规定时速, 就能一路绿灯畅行无阻。“绿波带”将根据道路车辆行驶的速度和路口间的距离,自动设置信号灯的点亮时间差,以保证车辆从遇到第一个绿灯开始,只要按照规定速度行驶,之后遇到的信号灯将全是绿灯。 南 北 东 西

单片机课程设计_排队叫号系统设计

单片机系统 课程设计 成绩评定表 设计课题排队叫号系统设计 学院名称:电气工程学院 专业班级: 学生姓名: 学号: 指导教师: 设计地点: 设计时间: 指导教师意见: 成绩: 签名:年月日

单片机系统课程设计 课程设计名称:排队叫号系统设计 专业班级: 学生姓名: 学号: 指导教师: 课程设计地点: 课程设计时间: 单片机系统课程设计任务书

学生姓名专业班级学号 题目 课题性质工程设计课题来源选题指导教师 主要内容(参数) 利用排队叫号系统,实现以下功能: 1、取票:顾客取一张号票吗,上面有号码、等候人数、时间等 2、休息等待:持号票在休息区休息并留意显示屏音箱叫号 3、按键叫号:工作人员办完一笔业务后按下叫号器上的下一位按钮 4、前去办理:叫号时根据显示屏音箱的信息到指定位置享受一对一的服务。 任务要求(进度) 第1-2天:熟悉课程设计任务及要求,查阅技术资料,确定设计方案。 第3-4天:按照确定的方案设计单元电路。要求画出单元电路图,元件及元件参数选择要有依据,各单元电路的设计要有详细论述。 第5-6天:软件设计,编写程序。 第7-8天:实验室调试。 第9-10天:撰写课程设计报告。要求内容完整、图表清晰、文理流畅、格式规范、方案合理、设计正确,篇幅不少于6000字。 主要参考资料[1] 康万新.毕业设计指导及案例剖析—应用电子技术方向[M].北京:清华大学出版社,2007. [2] 杨连国.医院智能排队叫号系统的设计与实现[D].南京:东南大学,2006. [3] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004. 审查意见 系(教研室)主任签字:年月日

单片机课程设计

《单片机原理及实训教程》 课程设计 设计题目单片机智能流水灯控制器 院系电子电气工程学院 班级 12级电气(一)班 姓名侯东伟学号 2012481015 设计地点实验楼 指导教师翟红程职称副教授 指导教师签字 设计日期 14年6月16——14年6月22

目录 封面-------------------------------1 目录-------------------------------2 前言-------------------------------3 一、设计要求及M C S-51单片机简介-----------4 二、硬件组成-----------------------5 三、电源提供系统-------------------6 四、程序流程图---------------------7 五、晶振延时计算-------------------8 六、源程序-------------------------8 七、元件清单---------------------10 结束语----------------------------11 参考文献---------------------------11

前言 自计算机问世以来,单片机技术在社会各领域中得到了广泛的应用。在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式市发展速度,成为日后此系统中的核心部分。由于单片机具有一些突出的优点:体积小、重量轻、电源单一、功耗低;功能强、价格低;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。 本文主要用的是单片机,课题名称为单片机智能流水灯控制。通过本课题的设计以后,使我了解到了单片机的许多方面的应用。本课程设计介绍了一种由MCS-89C51集成块编程实现的控制电路,它完成了单片机流水灯控制功能,并给出了具体的硬件电路和相应的程序。这种控制电路可靠性,灵活性高,使用范围广,特别适合中小城市的交通灯、霓虹灯等的应用。而且,它对其他类似系统的开发具有一定的借鉴意义。 通过本次实训实习,使我掌握了一定的电子产品设计、制作技能和调试技术,巩固电子技术的理论知识,锻炼和提高自己的动手能力和综合运用知识解决实际问题的能力及实践动手能力。 关键词:LED 单片机控制系统流水灯

单片机课程设计报告书模板

. .. . .. .. 西南科技大学 2011级微机原理与接口技术 课程设计报告 课题名称微机原理与接口技术 姓名 学号 院、系、部制造科学与工程学院 专业 指导教师 2014年月日

目录 一、绪言 (1) 二、系统设计 (1) 2.1系统整体流程图 (1) 2.2日历时钟的控制方案论证 (1) 2.3单片机的选择方案论证 (2) 2.4键盘选择方案论证 (2) 2.5显示模块的选择方案论证 (2) 2.6模块的选择方案论证 (2) 三、硬件电路设计 (2) 3.1日历时钟的控制电路图 (2) 3.2行列式键盘的设计 (3) 3.3数码管显示电路的设计 (3) 3.4蜂鸣器驱动电路的设计 (4)

3.5主要元器件选择 (4) 四、程序流程图 (5) 五、c语言程序设计 (5) 六、日历时钟的控制器仿真 (19) 6.1K e i l调试 (19) 6.2P r o t e u s调试 (19) 七、结束语 (20) 八、参考文献 (21) 1、绪言 近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。电子时钟是现代社会中的主要计时工具之一,广泛应用于手机,电脑,汽车等社会生活需要的各个方面,及对时间有要求的场合。本设计采用AT89C51单片机作为主要核心部件,附以上电复位电路,时钟电路及按键调时电路组成。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。

基于STM32--LCD12864驱动程序

基于STM32--LCD12864驱动程序

STM32 LCD12864驱动程序(头文件)(2012-05-29 21:25:08)转载▼ 标签:杂谈 #ifndef LCD12864_H #define LCD12864_H #define LCD_CONTROL GPIOD //默认LCD12864的控制口在PD口 #define LCD_DATAPORT GPIOD //默认LCD12864的数据口在PD口 #define LCD_RESET_Pin GPIO_Pin_12 //默认LCD12864的复位引脚连接到PD.12 也可不用 #define LCD_RS_Pin GPIO_Pin_13 //默认LCD12864 RS -- PD.13 #define LCD_RW_Pin GPIO_Pin_14 //默认LCD12864 RW -- PD.14 #define LCD_EN_Pin GPIO_Pin_15 //默认LCD12864 E -- PD.15 #define LCD_CONTROL_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的控制口时钟

#define LCD_DATAPORT_CLOCK RCC_APB2Periph_GPIOD //默认LCD12864的数据口时钟 #define LCD_RS_1 LCD_CONTROL->BSRR &=~LCD_RS_Pin;LCD_CONTROL->BSRR |=LCD_RS_Pin //RS置高电平 #define LCD_RS_0 LCD_CONTROL->BRR &=~LCD_RS_Pin;LCD_CONTROL->BRR |=LCD_RS_Pin //RS置低电平 #define LCD_RW_1 LCD_CONTROL->BSRR &=~LCD_RW_Pin;LCD_CONTROL->BSRR |=LCD_RW_Pin //RW置高电平 #define LCD_RW_0 LCD_CONTROL->BRR &=~LCD_RW_Pin;LCD_CONTROL->BRR |=LCD_RW_Pin //RW置低电平 #define LCD_EN_1 LCD_CONTROL->BSRR &=~LCD_EN_Pin;LCD_CONTROL->BSRR |=LCD_EN_Pin //EN置高电平 #define LCD_EN_0 LCD_CONTROL->BRR &=~LCD_EN_Pin;LCD_CONTROL->BRR |=LCD_EN_Pin //EN置低电平

嵌入式系统课程设计题目

嵌入式系统课程设计—选题要求 1、嵌入式系统课程设计时长两星期,学生可以分组进行课程设计,每组学生人数为2~3人,报告雷同超过60%者,成绩记不及格! 2、学生需要在附后的设计题目总表中进行选题,2周完成选题,并开始课程设计工作! 3、1月30日下午进行答辩 均采用S3C2440为CPU,其它元件自选 ADS1.2 C语言编程 流程图/结构图 软件+硬件 智能家居、网络、视频、图像采集与压缩(摄像头+JPEG压缩) 工业仪表及应用 农业应用 交通 机器人 车船定位 智能仪表:示波器(ADC采集+LCD显示)、逻辑分析仪(多路GPIO采集+LCD显示)、频谱仪(ADC采集+FFT分析+LCD显示) 附:嵌入式系统课程设计题目 ARM-Linux 嵌入式系统在农业大棚中的应用(温度、湿度和二氧化碳浓度是影响棚栽农作物生长的3 大要素。为了实现农业大棚中这3 种要素数据的远程实时采集,引入了当前嵌入式应用中较为成熟的ARM9 微处理器和Linux 嵌入式操作系统技术, 采用数字式温度传感器、湿度传感器HM1500 和二氧化碳浓度传感器NAP221A ,设计一种基于TCP/ IP 协议的嵌入式远程实时数据采集系统方案。从硬件设计和软件实现2 方面对该系统进行具体设计。) 1. ARM系统在LED显示屏中的应用(利用ARM系统控制彩色LED显示屏) 2. ARM 嵌入式处理器在智能仪器中的应用(设计一种基于ARM 嵌入式处理器系统的智 能仪器的硬件和软件设计方案, 并结合Linux嵌入式实时操作系统, 给出一套完整的任务调度和管理的方法, 最后用实例说明)【数字示波器?】 3. ARM系统在汽车制动性能测试系统中的应用(采用ARM系统构建一个路试法的汽车制动性能测试系统) 5. 基于ARM系统的公交车多功能终端的设计(完成电子收费、报站、GPS定位等功能)

LCD12864原理与应用(源程序+原理图+proteus仿真)

LCD12864原理与应用 1、LCD12864简介: LCD12864分为两种,带字库的和不带字库的,不带字库的液晶显示汉字的时候可以选择自己喜欢的字体。而带字库的液晶,只能显示GB2312字体,当然也可以显示其他的字体,不过是用图片的形式显示。 下面介绍不带字库的LCD12864,以Proteus中的AMPIRE128×64为例,如下图所示,它的液晶驱动器为KS0108。 与带字库的液晶不同,此块液晶含有两个液晶驱动器,每块驱动器都控制64*64个点,分为左右两个屏幕显示,总共为128*64个点(即有128×64个点)。这就是为什么AMPIRE128*64有CS1和CS2两个片选端的原因。此液晶有8页,一页有8行点阵点,左右各64列,共128列。如下图所示:

2、LCD12864中的几条重要指令 (一)行(line)设置命令: 由此可见显示的起始行地址为0XC0,共64行,有规律地改变起始行号,可以实现滚屏效果。(二)页(page)设置指令: 起始页地址为0XB8,因为液晶有64行点,分为8页,每页就有8行点。 (三)列(column)地址设置指令 每块驱动器的列地址都是从0X40到0X7F,共64列,所以此液晶共有128列点。 (四)读状态指令

3、用LCD12864显示汉字(一) 由于这块液晶不带字库,我们就要自己编写字库,编写字库所用的字模提取软件为Zimo21(软件下载地址https://www.360docs.net/doc/ff12275704.html,/),LCD1602显示自定义字符的时候也是用它。在取模之前我们要进行一些设定,根据此液晶的显示原理,设置为“纵向取模,字节倒序”,如下图所示:(若不是这样,则取模得到的数据不是我们想要的,将会出现乱码,同样可以在https://www.360docs.net/doc/ff12275704.html,/下载到关于字模提取原理文档) 字体选择默认的“宋体,常规,小四号”,小四号为16*16大小,如下图所示:

单片机双机通信系统课程设计

单片机双机通信系统课程设计

一.课程设计的目的及基本要求: 实践课程是使学生融会贯通本课程所学专业理论知识,完成一个较完整的设计计算和安装调试过程,以加深学生对所学理论的理解与应用,认识和熟悉元器件和电子测量仪器的性能指标,了解解决实际问题的一般过程,培养学生综合运用基础理论知识和专业知识去解决实际工程设计问题的能力。通过电子技术的综合性工程训练,使学生达到以下的目的和要求: 1、结合模拟电路、数字电路、可编程逻辑器件、单片机电 子线路CAD等课程中所学的理论知识,按要求独立设计方 案,培养学生独立分析与解决问题的能力; 2、学会查阅相关手册和资料,通过查阅手册和资料,进一 步熟悉常用电子器件的类型和特性,并掌握合理选用的原 则; 3、学会使用常用电子元器件(包括中规模芯片、专用芯片 和可编程器件); 4、掌握基本的现代电子技术设计工具和EDA(Electronic design automation)技术; 5、掌握电子电路的安装与调试技术,进一步熟悉电子仪器 的使用方法; 6、认真撰写总结报告,培养严谨的作风和科学的态度;二.课程设计的主要内容: 课题十九单片机双机通信系统 基本要求:设计两个单片机最小系统,能实现有线通信,一 23

方为发送,另一方为接收。 提高要求:两个单片机最小系统能相互通信,并能实现校验。 三.具体要求和时间安排: 每一个学生在教师指导下,独立完成一个应用系统。工作量如下: 1、电路原理图(A3幅面)1张,要求Protel软件绘制; 2、pcb版图(A3及以上幅面)1张; 3、设计说明书(20-30页)1本,内含能编译通过的源程序(有必要的注释)。 23

(完整word版)51单片机课程设计实验报告

51单片机课程设计报告 学院: 专业班级: 姓名: 指导教师: 设计时间:

51单片机课程设计 一、设计任务与要求 1.任务:制作并调试51单片机学习板 2.要求: (1)了解并能识别学习板上的各种元器件,会读元器件标示; (2)会看电路原理图; (3)制作51单片机学习板; (4)学会使用Keil C软件下载调试程序; 用调试程序将51单片机学习板调试成功。 二、总原理图及元器件清单 1.总原理图 2.元件清单 三、模块电路分析 1. 最小系统: 单片机最小系统电路分为振荡电路和复位电路, 振荡电路选用12MHz 高精度晶振, 振荡电容选用22p和30p 独石电容;

图 1 图 2 复位电路使用RC 电路,使用普通的电解电容与金属膜电阻即可; 图 3 当单片机上电瞬间由于电容电压不能突变会使电容两边的电位相同,此时RST 为高电平,之后随着时间推移电源负极通过电阻对电容放电,放完电时RST 为低电平。正常工作为低电平,高电平复位。 2. 显示模块: 分析发光二极管显示电路: 图 4 发光二极管显示电路分析:它是半导体二极管的一种,可以把电能转化成光能,常简写为

LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。当给发光二极管加上正向电压后,产生自发辐射的荧光。图中一共有五个发光二极管其中一个为电源指示灯,当学习板通电时会发光以指示状态。其余四个为功能状态指示灯,实际作用与学习板有关 分析数码管显示电路 图 5 数码管显示电路分析:数码管按段数分为七段数码管和八段数码管,图中所用为八段数码管(比七段管多了一个小数点显示位),按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管.共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。数码管主要用来显示经电路板处理后的程序的运行结果。图中使用了八个八段数码管,可以显示八个0-15的数字。使用数码管可以直观的得到程序运行所显示的结果.也可以显示预置在学习板上的程序,主要通过16个开关来控制。 四、硬件调试 1、是否短路 用万用表检查P2两端是短路。电阻为0,则短路,电阻为一适值,电路正常。 2、焊接顺序 焊接的顺序很重要,按功能划分的器件进行焊接,顺序是功能部件的焊接--调试--另一功能部件的焊接,这样容易找到问题的所在。 3、器件功能 1)检查原理图连接是否正确 2)检查原理图与PCB图是否一致 3)检查原理图与器件的DATASHEET上引脚是否一致 4)用万用表检查是否有虚焊,引脚短路现象 5)查询器件的DATASHEET,分析一下时序是否一致,同时分析一下命令字是否正确 6)通过示波器对芯片各个引脚进行检查,检查地址线是否有信号的 7)飞线。用别的的口线进行控制,看看能不能对其进行正常操作,多试验,才能找到问题出现在什么地方。 1、详细描述硬件安装过程中出现的故障现象,并作故障分析,及解决方法。 六、软件调试

相关文档
最新文档