C51单片机应用设计与技能训练(第2版)课件 任务6 交通信号灯控制系统的设计与制作_第1页
C51单片机应用设计与技能训练(第2版)课件 任务6 交通信号灯控制系统的设计与制作_第2页
C51单片机应用设计与技能训练(第2版)课件 任务6 交通信号灯控制系统的设计与制作_第3页
C51单片机应用设计与技能训练(第2版)课件 任务6 交通信号灯控制系统的设计与制作_第4页
C51单片机应用设计与技能训练(第2版)课件 任务6 交通信号灯控制系统的设计与制作_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机最小系统一、单片机复位电路1.复位工作方式复位操作就是使单片机内部的一些部件恢复到某

种预先确定的状态。>

复位状态:●除以下SFR外,其余SFR

都被硬件自动写入0◆口锁存器PO~P3:OFFH◆堆栈指针SP:

07HSBUF:

不定●内部RAM

不受复位操作的影响,但在单片机接通电源时,

RAM中的内容不定。SFR复位值SFR复位值PC0000HTMOD00HACC00HTCON00HB00HTHO00HPSW00HTLO00HSP07HTH100HDPTR0000HTL100HP0~P3FFHTH2(52子系列)00HIP(51子系列)××

×

00000BTL2(52子系列)00HIP(52子系列)××

000000BRCAP2H(52子系列)00HIE(51子系列)0××00000BRCAP2L(52子系列)00HIE(52子系列)0×000000BSCON00HSBUF不定PC

ON(HMOS工艺)PCON(CHMOS工艺)0×××××××B0×××0000BSFR复

值)单片机进入复位状态的条件■

在内部振荡器运行时,使复位输入端RESET至少保持两个机器周期(24个振荡周期)为

高电平,由CPU采样复位信号,启动复位时序,完成复位操作。毫秒。振荡器起振时间取决于振荡器频率,10

MHz起振时间一般为1ms;

1MHz

起振时间一般为10ms。■如果器件上电时不能正常复位,那

么片内SFR,

特别是程序计数器PC可能没有进入初始化状态,使CPU

从不定地址开始执行程序,从而影2.上电复位电路■RESET

脚必须保持足够时间的高电

平以使振荡器起振并持续两个机器

周期以上的时间。■上电时VCC

的上升时间应小于几十MCS-5110μFRST10kQVSS上电复位电路当VCC接通电

源时,即

实现单片机的上电复位VVCC响程序的正确执行。3.

按钮复位电路VCCvccMCS-511QF1kQRST10k2vss按钮复位电路二、单片机最小系统维持单片机运行的最基本的配置系统,构成单片机最小应用系统。对于8051

8751片内有RAM、EPROM的系统来讲,

单片机与晶振电路及开关、电阻、电

容等构成的复位电路组成单片机最小

应用系统10P3.0

RDP3.1

TDP3.21NT0P3.3

JNT1P3.4

T0P3.5

T1P3.6WRP3.7PDXTAL28051XTAL1RSTE五P0.0P0.1P0.2

P0.3

P0.4

P05P06P07P20P2.1P2.2FE.3F2.4P2.5P2.6P2.7P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7393811371236351234331432152116221723241825262720123A5678051单片机最小系统单片机的显示控制一、单片机的显示控制段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。发光二极管LED(Light

Emitting

Diode)显示器液晶LCD(Liquid

Crystal

Display)显示器CRT显示器(一

)

LED显示器结构■LED显示器内部由多个发光二极管组成。符号和引脚共阴极共阳极R×8+5VD7D6D5D4D3D2D1DO字dpgfedCba011000000111111001023110010001001100410011001510010010610000010711111000810000000910010000《二

)显示字形与字段码关系e

d

GNDc

dp显示字形共阳极字段

码共阴极字段

码显示字形共阳极字段

码共阴极字段

码0COH3FH990H6FH1F9H06HA88H77H2A4H5BHb83H7CH3BOH4FHCC6H39H499H66HdA1H5EH592H6DHE86H79H682H7DHF8EH71H7F8H07H“

熄灭

”FFH00H880H7FHLED数码管显示字形与字段码关系R×8P1.0

aP1.1P1.2

C8051

P1.3P1.4-

eP1.5

fP1.6

gP1.7数码管与P1口接口连接电路P1=0x3F(共阴极)|agddpP1=0xC0

(共阳极)(三)

LED数码显示方式及电路1.

静态显示方式:■特点:每个数码管必须接一个8位锁存器用来锁

存待显示的字形码。送入一次字形码显示字形一

直保持,直到送入新字形码为止。■优点:占用CPU时间少,显示便于监测和控制。■缺点:硬件电路比较复杂,成本较高。静态显示

接口电路有许多种,吕

8B吉

8

5位选线并行口静态显示电路字段码岩出■特点:将所有数码管的段选线并联在一起,通过控

制位选信号来控制数码管的点亮。数码管采用动态

扫描显

。■动态显示的亮度比静态显示要差一些,所以在选择

限流电阻时应略小于静态显示电路中的限流电阻。轮流向各位数码管送出字形

码和相应的位选,利用发光

管的余辉和人眼视觉暂留作

用,使人的感觉好像各位数码管同时都在显示。(2

)

动态显示R81DkD15R103

D105

D126

D13

7

D148

D15

D16

二4位LED动态显示电路U1PD几ADD

PD.18D1

PO2AD2

PO3AD3

PD.4AD4

PO5AD5

PD6AD6

PO.7AD7P2几P8

P2.1899

P22A10

P23811

P2.4812

P25A13

P26814

P2.7815P3DRXD

P3.1/TXDP321NTD

P3.31NT1

P3.#/TDP35T1P3600R

P3.7RDAT89C51一R7

R1Q7

Q1NPNCRVSTALC3XTAL2RSTPSEN1P1.1

P12

P1.3

P1.4

P15

P16

P1.7R3Q3NPNR6Q6NPNR5Q5NPNR4Q4NPNR2Q2NPNE

Z10131918D16D15P1635.2.4

应用实例■一维数组大量用在查表程序中。由于单片机的数据处

理能力有限,因此对一些复杂的、高精度的数学运算

往往无能为力,这时候就可以把数组作为一个表格,

预先存储在存储器中,需要的时候可以通过查找数组

元素快速地获得其中的数据。■对于这些运行时无需修改的数组,通常将其定义为code存储器类型,将其存放在程序存储器中以节省数据存储器的空间。·U1·

.

·

·.

B1C2丰1C1.19XTAL1

PoDYAn□PO.17AD1

POZYADZXTALZ

Po3YAD□PO.4AD4

POSADSPO6'AD6RST

PO.71AD7PzwEPZ.1089P

Z

7

Y

A

口P8B

PZ3YA11ALE

P

Z

.

4

A

亿E

P

z

S

A

口PZ6A14

PZ.72AP10

P3DYFDP1.1

P3.1/TDP12P3ZLIP13P33T1P14

P3.4TDP15

P35T1P16

P36MRP17

P3.7/FI歪申·CRYSTAL

183万

C4

·C31DJ935

B34

B工

B至21空1

口1112仁1411617R8YDk盈311三mATB2K9T051例

一只数码管静态显示案例47三□56·例

一只数码管静态显示案例#include<reg51.h>unsigned

char

seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};main(){unsigned

int

i,j;while(1){for(i=0;i<10;i++){P0=seg[i];for(j=50000;j>0;j--);}}例

多只数码管静态显示案例PODAD0PO2/AD2

PO3A.D3PD4AD4

PD5AD5PO78D7P2DABP22010P2.4812P25A13P27815P3DRXDP3.1/TXDP3.31NT1P3600RP37PU1XTAL1XTAL2P11P1.1P12P13P1.4P15P1.7AT₈9C51X1CRYSTALC3101R1吕

8

8

8

8

8

8

574LS373吕

8

8B

8

8

5

岩出

3*35*35*34二2331

坦39第a3吕8B8885

吕8B宫

8

5出868888858588885U274LS373U374LS373*32输入输出OELEDQLHHHLHLLLLQ不变HX高阻态74LS373功能表#include<reg51.h>unsigned

charseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void

main(){unsignedinti,ctr=0xfe;P2=0xff;for(i=0;i<3;i++)PO=seg[i];P2&=ctr;ctr<<=1;while(1);例多只数码管静态显示案例012D1D15D16□D10D11D12D13D11D15D16二4例

数码管动态显示案例R8R10P2几8

P2.19

P22810

P23811

P2.4812

P25813

P26814

P27815P3DRXDP3.1/TXDP32INTUP3.3ANT1

P3.M/TDP35T1P3640RP3.7RDAT₈9C51

一CRYSTAL4C3

101P13P14P15P16R7Q7NPNPSENALEP1口P1.1

P12P1.3

P1.4

P15P16P1.7U1PDDADO

PD.18D1

PD28D2

PD3A.D3

PD.4AD4

PD5AD5R4Q4NPNR5Q5NPNR62Q6NPNR3Q3NPNR1Q1NPN2125101315R2Q2NPNXTAL1XTAL2PD.78D7

RST1918P16395例数码管动态显示#include<reg51.h>unsigned

charseg[10]={0x3f,0x06,0x5b,Ox4f,0x66,0x6d,0x7d,0x07,0x7f,0x70};char

con[4]={0xfe,Oxfd,0xfb,Oxf7};int

i=0;

void

isr

time0(interrupt

1{TMOD=2;THO=6;TLO=6;EA=1;ET0=1;TRO=1;

while(1);P2=con[i];P1=seg[i];i++;if(i==4)i=0;unsignedunsigned

main()案例

设计计时器#include<reg51.h>unsignedcharseg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsignedcharcon[6]={0x1,0x2,0x4,0x8,0x10,0x20};

unsigned

char

mm=0;unsigned

char

ss=0;unsignedchar

hh=0;unsigned

char

count=100;main(){TMOD=1;THO=-10000>>8;TLO=-10000;EA=1;ET0=1;TRO=1;while(1);案例

设计计时器time[0]=hh/10;time[1]=hh%10;time[2]=mm/10;time[3]=mm%10;time[4]=ss/10;time[5]=ss%10;for(i=0;i<6;i++){P2=con[i];if(i==1|li==3)P1=seg[time[i]]&0x7f;else

P1=seg[time[i]];for(j=100;j>0;j--);}}void

isr

time0()interrupt

1{unsigned

int

i=0,j;unsignedchar

time[6];THO=-10000>>8;TLO=-10000;count--;if(count==0){

count=100;Ss++;if(ss==60){ss=0;mm++;if(mm==60){mm=0;hh++;if(hh==24)hh=0■在现代工业控制和一些智能化仪器仪表中,越来越多的

场所需要用点阵图形显示器显示数字、字母或汉字,例

如日常生活中经常见到的电梯楼层的显示与一些户外广

告,都是用LED点阵作为显示器。

LED点阵中要用到的一

个典型数据结构就是二维数组。■不论显示图形还是文字,都是控制与组成这些图形或文

字的各个点所在位置相对应的LED器件发光。通常事先

把需要显示的图形文字转换成点阵图形,再按照显示控

制的要求以一定的格式形成显示数据。■对于只控制通断的图文显示屏来说,每个LED发光器件

占据数据中的1位

(lbit),

在需要该LED器件发光的数

据中相应的位填1,否则填0。当然,根据控制电路的安

排,相反的定义同样是可行的。LED点阵的显示LED点阵的显示■这样依照所需显示的图形文字,按显示屏的各行各列

逐点填写显示数据,就可以构成一个显示数据文件。

显示图形的数据文件,其格式相对自由,只要能够满

足显示控制的要求即可,例如,可以用一个5×7(5

列7行)的LED点阵显示数字“1”或“2”把同一列发光管的阳极连接在一起

,把所有同一行的阴极连在一起。■先送出对应第1列发光管亮灭的数据,然后选通第1列使其点亮一段

时间后熄灭;再送出第2列的数据

,然后选通第2列使其点亮相同的

时间后熄灭;第5列之后又重新点

亮第1列,这样反复轮回,当这样

轮回的速度足够快时(每秒24次以

上),由于人眼的视觉暂留现象就

能看到显示屏上稳定的显示了。LED点阵的显示LED点阵的显示■

设用P1的低7位控制行的显示

(最低位对应最上端的LED)

,用(P3的低5位控制列的显

示。可以看出从左到右每一

列的显示数据依次为0x00,0x42,0x7f,0x40,0x00。因此可以用下面的数组表示

“1”:■{0x00,0x42,0x7f,0x40,0x00}■

同理,可以用下面的数组表

示“2”:■

{0x42,0x61,0x51,0x49,0x46cI

C

C4{0x3e,0x41,0x41,0x41,0x3e},//0

{0x00,0x42,0x7f,0x40,0x00},//1

{0x42,0x61,0x51,0x49,0x46},//2

{0x22,0x41,0x49,0x49,0x36},//3

{0x18,0x14,0x12,0x7f,Ox10},//4

{0x27,0x45,0x45,0x45,0x39},//5

{0x3c,0x4a,0x49,0x49,0x30},//6

{0x01,0x71,0x09,0x05,0x36},//7

{0x36,0x49,0x49,0x49,0x36},//8

{0x06,0x49,0x49,0x29,0x1e}//9

};LED点阵的显示unsignedcharcodedigit_code[10][5]=unsigned

char

code

digit_code[10][5]={0x41,0x3e,0x3e,0x3e,0x41},//0{0x7f,0x3d,Ox00,0x3f,0x7f},//1

{0x3d,0x1e,0x2e,0x36,0x39

},//2

{0x5d,0x3e,0x36,0x36,0x49},//3

{0x67,0x6b,Ox6d,0x00,0x6f},//4

{0x58,0x3a,0x3a,0x3a,0x46},//5

{0x43,0x35,0x36,0x36,0x4f},//6

{0x7e,0x0e,0x76,0x7a,0x7d},//7

{0x49,0x36,0x36,0x36,0x49},//8

{0x79,0x36,0x36,0x56,0x61}//9

};LED点阵的显示■5×7LED点阵的控制电路如

右图所示。由于LED点阵中

发光管的数量较多,单片初

本身的端口达不到控制的要

求,因此对于LED点阵的控

制一般要对单片机的端口进

行扩展。但本例主要介绍二

维数组的应用,故对这些枝

节问题没有过多地考虑,仍

直接用单片机端作为列驱动LED点阵的显示LED点阵的显示■在程序中定义了一个delay()函数,该函数是一个延时,确定了轮流显示字符时每个字符显示的时间;定时器0初始化为24MHz下的4ms中断,这个4ms是显示某个字符时每一列显示的持续时间,5列循环显示

,直到上述的delav()所确定的时间段耗完,转去显

示下一个字符。用二维数组实现LED点阵的显示#include<reg51.h>unsigned

char

code

digit_code[10][5]={

{0x41,0x3e,0x3e,0x3e,0x41},//0{0x7f,0x3d,0x00,0x3f,0x7f},//1{0x3d,0x1e,0x2e,0x36,0x39},//2{0x5d,0x3e,0x36,0x36,0x49},//3{0x67,0x6b,0x6d,0x00,0x6f},//4{0x58,0x3a,0x3a,0x3a,0x46},1/5{0x43,0x35,0x36,0x36,0x4f},//6{0x7e,0x0e,0x76,0x7a,0x7d},1/7{0x49,0x36,0x36,0x36,0x49},//8{0x79,0x36,0x36,0x56,0x61}//9};void

main({init

time0();while(1){delay();number=(number+1)%10;void

delay({unsigned

int

i,j;for(i=0;i<1000;i++)for(j=0;j<500;j++);unsigned

char

number=0;

unsignedcharcolumn=0;

void

delay();void

init

time0();用二维数组实现LED点阵的显示LED点阵的显示案例void

init

time0()TMOD=(TMOD&0xfO)|0x01;

TLO=-8000;THO=(-8000)>>8;

EA=1;ETO=1;TRO=1;void

isr

time0(interrupt

1{TLO=-8000;THO=(-8000>>8;column=(column+1)%5;P1=digit

code[number][column];

P3=(0x01<<column);单片机与液晶显示器的连接電子工業出版社PUBLISHINGHOUSE

OF

ELECTRONICS

INDUSTRY電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY单片机与液晶显示器的连接LCD(Liquid

Crystal

Display)

是液晶显示器的缩写,液晶显示器是一种被动式的显示器,即液晶本身并不发光

,而是利用液晶经过处理后能改变光线通过方向的特性,

而达到白底黑字或黑底白字显示的目的。液晶显示器具有

功耗低、抗干扰能力强等优点,因此被广泛应用。例如我

们在手机、BP机、笔记本电脑和计算器上看到的都是液晶

显示屏幕。由于LCD

的控制必须使用专用的驱动电路,且

LCD面板的接线需要采用特殊技巧,再加上LCD面板十分脆

弱,因此一般不会单独使用,而是将LCD面板、驱动与控

制电路组合成LCM模块

(LiquidCrystalDisplayMould

,LCM)

一起使用。LCM的种类繁多,可以根据不同的场合、不同的需要选择

不同类型的LCM,本书主要介绍1602字符型LCM

(即两行显

示,每行可显示16个字符)。一

、1602字符型LCM

的特性及引脚功能1.

字符型LCM的特性■(1)具有字符发生器ROM(Character

GenerateROM,CG

ROM),可显示192个5×7点阵字符,LCM显示的数字和字母部分的码值,刚好与ACSII码表中的

数字和字母相同,所以在需要显示数字和字母时,只需要向LCM送入ASCII码即可。■

(2)具有64B的自定义字符RAM(CharacterGenerate

RAM,CG

RAM),

可自行定义8个5×7点阵

。■

(3)具有80B的数据显示存储器(Data

Display

RAM,DD

RAM)。電子工業出版社

·PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY1602型LCM接口引脚功能引脚号符号状态功能备注1VSS电源地2VDD+5V逻辑电源3VO液晶驱动电源(用于调节对比度)4RS输入寄存器选择(1:数据;0:指令)5R/W输入读、写操作选择(1:读;0:写)6E输入使能信号,数据读写操作控制位,向LCM发送一个脉冲,LCM与单片机之间将进行

一次数据交换7~14DB0~DB7三态数据总线(最低位DB0、最高位DB7),

可用8位连接,也可以只用高4位连接15E1背光电源线(通常为+5V,并串联一个电

位器,可调节亮度)14引脚的没有这两个引脚16E2背光电源地线2.

字符型LCM

的引脚功能字符型LCM通常有16个引脚,也有14个引脚,当选用14个引脚

的LCM时,该LCM没有背光。電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRYPUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY二、1602字特型LCM与单片机的连接1.

直接访问方式连接■

该连接是由单片机的读(—RD

引脚)、写(

—W

R引

脚)和高位地址线共同控制LCM的E端,由高位地址

线其中的两条分别与RS端和R/W端相连,由单片机的

PO口LCM的DB0-DB7相连

.这样就构成了三总线(数

据DB、地址总线AB和控制总线CB)

的连接方式,

图所示。由于构成了三总线的结构,所以在软件控

制上比较简单,用通过访问外部地址的方式就能访

问LCM。但是,在使用这种连接方式时需要注意单片

机的控制总线时序和地址总线时序必须要与LCM所需

要的时序相匹配,否则将无法访问。電子工業出版社

·2.

间接控制方式连接是利用HD44780所具有的4位数据总线的功能,简化

电路接口的一种连接方式,如图8-2所示。直接访问

方式连接电路中需要增加与非门和反相器,从原理

图上看很简单,但在实际焊接时,增加两个器件就

增加了很多麻烦,另外增加器件也意味着增加了故

障点,所以在实际使用时并不采用此电路。在图中

,省去了4位数据线,电路连接十分简单,也没有多

余的器件,对于参加比赛来说非常方便。電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY2.

间接控制方式连接但是由于LCM本身为速度较慢的器件,每一次数据传

输大概需要几十微秒至几毫秒的时间,如果采用间

接控制方式访问,每传送一个字节的数据需要访问

两次LCM,

这将占用大量的时间,使CPU变得很繁忙

,甚至影响CPU处理其他数据的传输速度。所以在实

际的硬件电路连接中常采用如图8-3所示的电路。

用这种连接方式不能构成三总线的结构,所以不能

通过地址的形式直接访问,而是需要按照LCM的方式

进行数据的传输,同时由于数据总线使用了8条,所

以在数据传输的时间上与直接访问的时间相同,速

度较间接控制方式提高了一倍,缩短了CPU对LCM的

访问时间。電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY功

能控制线数据线执行时

间(ms)功能说明RSR/WD7D6D5D4D3D2D1D0清屏00000000011.64清屏,光标归位(清DDRAM和AC值)光标归位000000001*1.64设地址计数器AC清零,DRAM数据不变,

光标移到左上角输入方式设置00000001I/DS0.04设置字符进入时的屏幕移位方式显示开关

控制0000001DCB0.04设置显示开关、光标开关、闪烁开关显示光标

移位000001S/RR/L**0.04设置字符与光标移动功能设置00001DLNF**0.04工作方式设置(初始化命令)CGRAM地址

设置0001CGRAM地址0.04设置6位的QRAM地址以读/写数据DRAM地址设置001DDRAM地址0.04设置7位的DDRAM地址以读/写数据

第1行:80H~8FH;第2行:COH~CFH忙标志/地

址计数器01BF由最后写入的DDRAM/CGRAM地址设置指

令设置的DRAM/OGRAM地址0.04读忙标志及地址计数器AC值BF=1:忙;BF=0:不忙,准备好写数据10写入1B数据,需要先设置RAM地址0.04向ORAM/DRAM写入1字节数据读数据11读取1B数据,需要先设置RAM地址0.04从QGRAM/DRAM读取1字节数据三、1602字符型LCM

的指令集表8-21602字符型LCM指令集電子工業出版社PUBLSHNGHOUSEOFELECTRONICS

NDUSTRY提

示■

(

1

)

对LCM操作主要是4种基本操作:写命令、写数据、读状态和读数

据。■

(

2)在进行写命令、写数据和读数据三种操作之前,必须先查询忙标

志,当忙状态BF为0时,才能进行这三种操作。■

(3)LCM

上电时,都必须按照一定时序对LCM进行初始化操作,主要分

以下四步:●

①设置LCM工作方式

·

②设置显示状态●

③清屏:将光标设置为第1行第1列●④设置输入方式:设置光标移动方向并确定整体显示是否移动■

(

4)当写一个显示字符后,如果没有再给光标重新定位,则DDRAM地址

会自动加1或减1。■

(5

)对LCM的读写操作必须符合读写操作时序,并要有一定的延时。●①读操作时,先设置RS和R/W状态,再设置E信号为高,这时从数据口读取数据,然后将E信号置低。●②写操作时,先设置RS和R/W状态,再设置数据,然后产生E的脉冲吕88B

5RV1C1RP124F3636R12P2n8P2.189P22810P23A11P2.4812P25813P25A14P27815P1□P1.1P12P13P1.4P15P16P3.7RDAT₈9C₅1

一案例英文字符的液晶显示控制利用基于HD44780控制芯片的1602液晶显示两行字符"Welcome

you!"和

“Guang

Zhou,2010”。電子工業出版社

·PUBLSHNGHOUSEOFELECTRONICS

NDUSTRYPODA.DO

PD.1AD1P2AD2P□3AD3

PD.AAD4PD5AD5PD6AD6

PD78D7P3DRXDP3.1/TXD

P32ANTD

P33ANT1P3.4/TD

P35/T1P3600RELCDXTAL2U1PSENRST1512電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY//液晶显示器判忙函数unsigned

char

busy()unsigned

char

lcd_status;rs=0;//

寄存器选择rw=1;//

读状态寄存器en=1;//

开始读delay(100);lcd_status=P0;en=0;return

lcd_status;源程序

(lcd.c)I/液晶控制与显示程序#include<reg51.h>unsigned

char

count;sbit

rs=P2^0;sbit

rw=P2^1;sbit

en=P2^2;void

delay(unsigned

int

dely)unsigned

char

dely1;for(;dely>0;dely--)for(dely1=10;dely1>0;dely1--

);}//向液晶显示器写数据函数void

WR_Data(unsignedchar

dat)while((busy()&0x80)==0x80);//向液晶显示器写数据rs=1;rw=0;P0=dat;en=1;en=0;//向液晶显示器写命令函数void

WR_Com(unsigned

char

temp)//忙等待while((busy(&0x80)==0x80);rs=0;//

选择命令寄存器

rw=0;//

写P0=temp;en=1;en=0;源程序

(lcd.c)電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY//向液晶显示器写入显示数据函数//入口条件:液晶显示器行首地址(指示第一行还是第二行)

和待显示数组的首地址void

disp_lcd(unsigned

char

addr,unsigned

char*pstr)unsigned

char

i;WR_Com(addr);delay(100);for(i=0;i<16;i++){WR_Data(pstr[i]);delay(100);源程序

(lcd.c)電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRYI/液晶显示器初始化函数void

Icd_init()WR_Com(0x38);//

设置数据长度为8位、双行显示、5×7点

阵字符delay(100);WR_Com(0x01);//

清屏delay(100);WR_Com(0x06);//字符进入模式:屏幕不动,字符后移delay(100);WR_Com(0x0c);//显示开,光标关delay(100);源程序

(lcd.c)電子工業出版社PUBLSHNGHOUSE

OF

ELECTRONICS

NDUSTRY源程序(主程序main.c)//main.c

主程序unsigned

char

welcome[16]="Welcome

you!";unsigned

char

addr[16]="Guang

Zhou,2010";void

Icd_init();//函数原型说明void

disp_lcd(unsigned

char,unsigned

char*);//函数原型说明

void

main(){int

i=0;lcd

init();

disp_lcd(0xc0,addr+i);disp_Icd(Ox82,welcome);

i++

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论