单片机测试程序_第1页
单片机测试程序_第2页
单片机测试程序_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、本单片机最小系统是以AT89S51单片机为控制核心,由驱动芯片ZLG7289与16键的键 盘矩阵实现对两个4位一体共阴数码管LED的驱动显示,由LCD1602实现液晶显示,再通过 电平转换芯片MAX232并连接到232接口实现串口通信,系统还包含有蜂鸣器,USB及适配器供电接口,JTAG程序下载接口,总线扩展等。首先,用 protel99se软件制作硬件电路原 理图及绘制PCE板;其次,安装焊接单片机最小系统开发板及下载线,并且进行电路调试; 再次,在Keil uVision2软件环境下调试单片机汇编程序或 C语言程序,用单片机下载软件 ISPLAY或STC-ISP V31实现程序下载,从而用

2、编程实现最小系统的基本功能;最后,编写 综合程序以实现系统功能的综合以及拓展功能,其中串口通信用到电脑自带的超级终端或 AccessPort 软件。单片机最小系统板焊接首先对照元件清单和电路图,检查器件是否完整,型号、规格、安装是否正确。然后将 各器件根据焊接规则焊接到电路板上, 其中对于器件的摆放方向和位置需十分注意。 先焊发 热器件电阻和较低的电容,再焊较大的器件,焊接JTAG线,JTAG线里面的芯片电阻,电阻电容均为贴片封装,焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照其对应的顺序 进行焊接,焊接结束后,自行组装。检查已经焊好的电路板和 JTAG下载线是否无误:先用万用表检查电路板

3、焊接是否都 正确。当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是否亮, 是否有器件过热, 有可能二极管或三极管会在焊接的过程中被烧坏, 那样的话就要重新焊器 件。再用Keil软件给板子拷正确的程序,检查是否能按功能正常工作。单片机系统的硬 件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和纠正的。软件设计在 Keil 软件环境下对照相关资料编写单片机最小系统开发板的有用程序,使设计好的 程序编译无误,得到 hex 格式文件,用程序下载软件加载到单片机芯片中,实现仿真电路, 在板上得出效果。设计工具:电脑, Keil 软件, Isplay 软件, STC-ISP

4、 V31 软件 蜂鸣器调试主要是检验程序能否下载到芯片, 蜂鸣器能正常工作, 掌握程序的编译下载到芯片的方 法。在Keil环境中用C语言编写简单是蜂鸣器程序或音乐播放程序。对Keil软件和程序下载软件进行相关配置设置。将编译产生的 hex 文件下载到芯片,检测其工作是否正常,若工作不正常,则从软件及硬 件两方面进行检查。 有用的报警声程序见附录 4串口通信调试实现计算机与单片机之间相互通讯功能将编写的串口调试程序经过编译,下载到单片机。 串口实现功能为在计算机上能显示单片机的输出。 检测串口是否能正常工作, 此阶段需用 到串口软件及串口线。若不能正常工作,则需从软件和硬件两方面进行检查。正确功

5、能为在电脑超级终端不停显示输出内容,与预期相同,工作正常。液晶显示调试保证液晶屏LCD能正常工作,输出效果有所扩展。在编写程序前,认真阅读LCD液晶屏资料,掌握LCD1602及 1602液晶模块数据手册(中 文)中的液晶的使用和编程方法,了解其工作时序,及各个指令及初始化。对照电路图中LCD连接情况,编写LCD1602移动显示程序,经编译下载至单片机,检测输出,若无输出,则调整电位器,若仍无输出则从软件及硬件两方面进行检查,找出错误 原因,直至液晶屏能正常工作。在程序编写时应时刻注意各个指令间的延时控制。以保证液晶屏呈现效果移动循环显示, 液晶屏工作正常。之后也可用LCD做数字钟,这将在综合程

6、序里被用到,液晶移屏显示程序见附录 6数码管及键盘控制调试 保证数码管能正常显示,以及按键能控制数码管的显示 .在编写程序前,应认真阅读LED和 ZLG7289A资料,了解和掌握其工作时序,及各个指令 及初始化,在程序编写时应时刻注意各个指令间的延时控制。对照电路图中ZLG7289模块的连接情况,编写程序,经过编译,然后下载到单片机,检测 展现效果,是否与程序预期相同。实现效果逐个闪烁,逐个消隐,键盘控制改变数据并移动,与预期相同,工作状态正常。 、再利用单片机内部时钟中断,编写数码管时钟程序,使数码管能够实现计时功能,键盘能 够控制时分秒。系统综合功能设计 综合单片机开发板上的各个功能模块,

7、以实现一个完整的系统功能 :根据前面对各模块功能的理解和程序编写, 结合各个模块实现一个整体系统, 把各模块功 能综合起来。设计一综合系统,使数码管实现数字钟且可右移、闪烁,液晶屏实现时间、日期的显示且 可移屏,键盘能够控制系统,蜂鸣器与键盘且可整点报时,可实现串口通信功能。鸣器调试程序 本程序根据蜂鸣器与单片机口相连设计,可以验证单片机及下载功能的正确 .#include <>#include <>sbitbuz = P3A3;unsigned char flag;void delayms(unsigned char ms)/* 延时子程序 */unsigned ch

8、ar i; while(ms-) for(i = 0; i < 120; i+);/* 主程序 */main()TMOD = 0x01;flag = 0x00;TH0 = 0x00;TL0 = 0xff;TR0 = 1;IE = 0x82;while(1)flag+;delayms(1);/* 中断控制 */void timer0() interrupt 1 using 1TH0 = 0xfe;TL0 = frq;buz= buz;串口通信调试程序(单片机到PC机)此为串口通信程序, 可在电脑上的超级终端显示相关语句, 实现单片机与电脑的相互通 信。遇到的问题:在进行单片机传信息到电脑终

9、端时,可是利用宏文件,直接调用 printf. 但是在实际的运用中占用大量的空间资源,而且容易出现错误,让程序的工作不正常,因此 我们改用字节的传送,利用串口一个字节一个字节的传送, 这样就大大增加了程序的可读性。 #include <> /* special function register declarations */* for the intended 8051 derivative*/#include <> /* prototype declarations for I/O functions*/#ifdef MONITOR51 /* Debugging w

10、ith Monitor-51 needs*/char code reserve 3 _at_ 0x23; /* space for serial interrupt if */#endif /* Stop Exection with Serial Intr. is enabled */*The main C function. Program execution startshere after stack initialization.*/void main (void) /*Setup the serial port for 1200 baud at 12MHz.*/#ifndef MON

11、ITOR51SCON = 0x50;/* SCON: mode 1, 8-bit UART, enable rcvr */TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */TH1 = 0xe6; /* TH1: reload value for 1200 baud 12MHz */TR1 = 1; /* TR1: timer 1 run*/TI = 1; /* TI: set TI to send first char of UART*/ #endif/*Note that an embedded program never exit

12、s (becausethere is no operating system to return to). Itmust loop and execute forever.*/while (1) printf (" liu jing longn"); /* Print " liu jing long " */串口通信调试程序(PC机到单片机)#include<>#include<>#include<>#define uchar unsigned char#define uint unsigned intUchar da

13、ta ReceiveBuffer16=0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20;/ 设置 16字节的串行通信接收缓冲区 uchar data BufferPointer=0;/ 串行通信接收缓冲区指针,初始为 0 bit data OnReceive=0;/ 串行通信接收事件标志位 void Send(uchar data dat);/* 以下为串行通信接收中断处理函数 */void serialport(void) interrupt 4 using 2uchar data

14、 c,i;if(RI)c=SBUF;/ 读取接收到的数据if(BufferPointer<16)ReceiveBufferBufferPointer=c;/将接收到的数据存入接收缓冲区BufferPointer+;elsefor(i=0;i<15;i+)ReceiveBufferi=ReceiveBufferi+1;/ 将缓冲区数据左移ReceiveBuffer15=c;/ 将接收到的数据存入接收缓冲区RI=0;/ 清空接收标志Send(c);/ 发送接收到的数据,以便回显OnReceive=1;/ 接收事标志位置 1/* 以下为串口初始化函数 */void Initserialp

15、ort(void)TMOD=0x20;SCON=0x50;TH1 = 0xe6; /* TH1: reload value for 1200 baud 16MHz */ES=1; / 允许串口中断EA=1;TR1 = 1; /* TR1: timer 1 run */void Send(uchar data dat) SBUF=dat; while(TI=0);TI=0;void main(void) / 主函数 uchar data i;LcdReset();/ 初始化 LCD Initserialport();/ 初始化串口 DisplayListChar(0,0,"Receiv

16、e Data:",13);while(1) if(OnReceive) for(i=0;i<16;i+) / 接收显示 DispOneChar(i,1,ReceiveBufferi); OnReceive=0; 液晶移屏显示程序实现LCD1602勺基本显示功能,以及使其能够实现移屏功能 #include <>#define uchar unsigned char#define uint unsigned int uchar code dispcode1="happy new year!" uchar code dispcode2="th

17、anks everyday!"sbit RS=P2A0;sbit RW=P2A1;sbit E=P2A2;void delay(uint t) uint k,l;for(k=t;k>0;k-) for(l=0;l<=10;l+);void wcom()RS=0;RW=0;E=0;delay(1000);E=1;void wdata()RS=1;RW=0;E=0;delay(1000);E=1;void init() / 初始化子程序/ for(i=0;i<20;i+)P0=0x38;wcom(); /P0=0x0c;wcom(); /P0=0x06;wcom();

18、/P0=0x01;wcom(); / uint i;指令码设置16X 2显示,8位数据接口 开显示,不显示光标,不闪烁光标 读或写一个字符后地址累加器加一,光标加一 清屏void main() / 主函数显示uchar i;init();P0=0x80;wcom();for(i=0;i<=15;i+)P0=dispcode1i;wdata();P0=0xC0; wcom(); for(i=0;i<=15;i+) P0=dispcode2i;wdata();for(i=0;i<=40;i+)P0=0x1c;wcom();delay(100);ZLG7289控制键盘及数码管显示程

19、序本程序根据ZLG7289芯片资料,来实现其对数码管和键盘的控制。 首先在数码管上显示 0-7八位数,然后循环左右各移八次,再分别左移右移各两次,而后实现闪烁、消隐功能, 再是按键时可以在数码管显示按键值, 如没有按键则显示时钟, 而且可用键盘对时钟的时分 秒进行校对。#include <>#include <> #include <>#define uchar unsigned char#define uint unsigned int/* 端口定义 */sbit CS=P1A0;sbit CLK=PM1;sbit DIO=P1A2;sbit KEY=P3

20、A2;/需要在INT区把KEY用跳线冒跳到INTO,其余四个跳到VCC/这样, P3A2 就相当于直接连接到 keybdata uchar com_data;/ 定义 8 位数据 datasbit mos_bit=com_dataA7;sbit low_bit=com_dataAO;/* 变量定义 */uchar half_hign;uchar half_low;uchar sl,sh,ml,mh,hh,hl;uchar second=O;uchar minute=O;uchar hour=12;uint s_cnt,key;/* 延时子程序 */void delay_8us()uchar i

21、;for (i=O; i<1; i+);void delay_5Ous()uchar i;for (i=O; i<6; i+);void delay_5Oms()uchar i,j;for(j=O;j<5O;j+)for(i=O;i<125;i+);void delay_1s()uchar i = 2O;while(i-)delay_5Oms();void delay_2s()uchar i = 4O;while(i-)delay_5Oms();void delay_5s()uchar i = 100;while(i-)delay_50ms();/* 发送单字节指令 *

22、/void send(uchar sebuf)uchar i;com_data=sebuf;CLK=0;CS=0;delay_50us();for(i=0;i<8;i+)delay_8us(); DIO=mos_bit;CLK=1;delay_8us(); com_data=com_data<<1; CLK=0;DIO=0;/* 接收数据 */uchar receive(void)uchar i,rebuf;CLK=1;delay_50us();for(i=0;i<8;i+) com_data=com_data<<1; low_bit=DIO;CLK=1;

23、delay_8us();CLK=0; delay_8us();rebuf=com_data;DIO =1;CS=1;return rebuf;/* 复位 */void reset(void)DIO=1;delay_50ms();send(0xa4);CS=1;/*7289 数码管显示, addr 为显示位置 范围 07,dat 为现实内容 */ void display(uchar addr,uchar dat)if(addr<0 | addr >7)return;send(0xc8 + addr);delay_50us();send(dat);CS=1;/*功能:执行ZLG728

24、9屯指令参数:cmd命令字*/void ZLG(uchar t)CS = 0;delay_50us();send(t);CS = 1;delay_50us();/* 发送双字节命令 */void sendcommand(uchar addr,uchar dat)send(addr);delay_50us();send(dat);CS=1;/* 获取键盘的位置码 */uchar getkeycode(uchar dat)uchar key;switch(dat)case 0x00: key = 0x00;break;case 0x01: key = 0x01;break;case 0x02: k

25、ey = 0x02;break;case 0x03: key = 0x03;break;case 0x04: key = 0x04;break;case 0x05: key = 0x05;break;case 0x06: key = 0x06;break;case 0x07: key = 0x07;break;case 0x08: key = 0x08;break;case 0x09: key = 0x09;break;case 0x0a: key = 0x10;break;case 0x0b: key = 0x11;break;case 0x0c: key = 0x12;break;case

26、 0x0d: key = 0x13;break; case 0x0e: key = 0x14;break; case 0x0f: key = 0x15;break; default: key = 0xee;break; return key;/*7289 按键指令 */ZLG7289_Key()uchar key,dat; send(0x15); delay_50us(); dat = receive(); delay_50us(); key = getkeycode(dat);/* 按键设定时分加一 */void Set_time(void) / 设定时间 if(key=0x00) / 按键

27、 0, 控制时 delay_50ms(); if(key=0x00)hour+; if(hour=24)hour=0;hl=hour%10; hh=hour/10;if(key=0x01) / 按键 1, 控制分 delay_50ms(); if(key=0x01)minute+;if(minute=60)minute=0;ml=minute%10;mh=minute/10;if(key=0x02) / 按键 2, 控制秒delay_50ms();if(key=0x02)second+;if(second=60)second=0;sl=second%10; sh=second/10;hh=ho

28、ur/10; hl=hour%10; mh=minute/10;ml=minute%10; sh=second/10;sl=second%10; /* 定时器中断初始化 */void Init(void) / 初始化子程序IP=0x02;EX0=1;TMOD=0x02; /TH0=0x06;TL0=0x06;EA=1;ET0=1;TR0=1;/* 中断控制 */void service_int0() interrupt 0EX0=0;TR0=0;key= ZLG7289_Key();Set_time();delay_1s();EX0=1;TR0=1;/* 中断控制 */void time0()

29、 interrupt 1 s_cnt+;if(s_cnt=400)/1s s_cnt=0; second+; if(second=60)second=0;minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0;/* 时钟显示 */void Disp_time(void)do hh=hour/10;hl=hour%10;mh=minute/10;ml=minute%10; sh=second/10;sl=second%10;sendcommand(0x81,0x0a); / 显示“” sendcommand(0x86,0x0a);di

30、splay(3,sl);delay_50ms();display(2,sh);delay_50ms();display(0,ml);delay_50ms(); display(7,mh);delay_50ms();display(5,hl);delay_50ms(); display(4,hh);delay_50ms(); while(1);/* 主函数 */ main() uchar half_high;测试指令 */禁止闪烁 */uchar half_low; uchar dat,key,n; reset();send(0xbf); /*CS=1;delay_5s(); sendcomma

31、nd(0x88,0xff);/* 显示 01234567*/ display(0,0x04); display(1,0x05); display(2,0x06); display(3,0x07); display(4,0x00); display(5,0x01); display(6,0x02); display(7,0x03);delay_5s();delay_2s();/* 循环左移 */ for ( n=0; n<=7; n+ ) ZLG(0xA3); delay_2s();delay_2s();/* 循环右移 */ for ( n=0; n<=7; n+ ) ZLG(0xA

32、2); delay_2s();/* 左移 2 位*/ for ( n=0; n<=1; n+ ) ZLG(0xA1); delay_5s();/* 右移 2 位*/ for ( n=0; n<=1; n+ ) ZLG(0xA0); delay_5s();/* 闪烁控制 */dat = 0xFE;for ( n=0; n<8; n+ )/ 逐位闪烁 sendcommand(0x88,dat); dat <<= 1; dat+; / 数据 0xFE 循环左移 delay_2s();sendcommand(0x88,0x00); / 八位同时闪烁 delay_5s();

33、delay_5s();sendcommand(0x88,0xFF); / 停止闪烁 delay_5s();/* 消隐控制 */dat = 0xFE;for ( n=0; n<8; n+ ) sendcommand(0x98,dat); dat <<= 1; dat+; / 数据 0xFE 循环左移 delay_2s();sendcommand(0x98,0xFF); / 停止消隐 delay_5s();/* 复位 */reset();delay_5s();reset(); display(0,0); display(1,0); display(2,0); display(3,

34、0); display(4,0); display(5,0); display(6,0); display(7,0); delay_5s(); delay_5s();while(1) while(KEY); /* 判断是否有按键按下 */ send(0x15); / 读键盘数据指令 delay_50us(); dat = receive(); delay_50us(); key = getkeycode(dat);half_high = key >> 4;half_low = key & 0x0f;/* 显示键盘的位置码 */display(0,half_high);dis

35、play(1,half_low);display(2,half_high);display(3,half_low);display(4,half_high);display(5,half_low);display(6,half_high);display(7,half_low);delay_2s();while(!KEY); / 当没有键按下后显示时钟delay_50us();reset();delay_50us();Init();delay_50ms();Disp_time();系统综合设计程序将LCD led蜂鸣器,串口通信的综合程序。实现了单片机的总体功能。使数码管和液 晶第一行显示年月

36、日, 并且可是实现整点报和闹钟时间到的刷屏显示, 第二行显示由单片机 控制的闹钟设定,并且可是显示接收到的由电脑发送的数据。按键分别能对年月日,时分秒 进行调整,开启串口通信,转换显示等功能;蜂鸣器在每次按键时都有提示,而且能够实现 整点报时功能;串口通信使电脑超级终端。#include <>#include <>#include <>#include <>#include <>#include <>Uchar data ReceiveBuffer16=0x20,0x20,0x20,0x20,0x20,0x20,0x20,

37、0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20;/ 设置 16 字节的串行通信接收缓冲区 uchar data BufferPointer=0;/ 串行通信接收缓冲区指针,初始为 0bit data OnReceive=0; / 串行通信接收事件标志位#define uint unsigned int#define uchar unsigned charsbit buz=P3W; 蜂鸣器口定义uchar code dispcode1="Date :2010-00-00"/ 显示字符串uchar code dispcode3=&qu

38、ot; zheng dian bao "uchar sl,sh,ml,mh,hh,hl,moh,mol,dh,dl;uchar temp,t,s;uint second=0;uint minute=0;uint hour=12;uchar dat,key,k;uint s_cnt,i;uint year=2010;uint month=0;uint day=0;void riqi();void Init();void Disp_time();void Sendy(uchar data dat);/* 以下为串行通信接收中断处理函数 */void serialport(void) in

39、terrupt 4 using 2uchar data c,i;if(RI)c=SBUF;/ 读取接收到的数据 if(BufferPointer<16)ReceiveBufferBufferPointer=c;/ 将接收到的数据存入接收缓冲区 BufferPointer+;elsefor(i=0;i<15;i+)ReceiveBufferi=ReceiveBufferi+1;/ 将缓冲区数据左移ReceiveBuffer15=c;/ 将接收到的数据存入接收缓冲区RI=0;/ 清空接收标志Sendy(c);/ 发送接收到的数据,以便回显OnReceive=1;/ 接收事标志位置 1v

40、oid Sendy(uchar data dat)SBUF=dat; while(TI=0);TI=0;void Init(void)/ 定时器初始化DisplayListChar(0, 0, dispcode1,16); delay(100);IP=0x02;TMOD=0x22; / 定时器初始化 , TH0=0x06;TL0=0x06;SCON=0x50;TH1=0xe6;EA=1;ET0=1;TR0=1;TR1=1;ES=1;void time0() interrupt 1 / 定时器中断服务程序计时 s_cnt+; if(s_cnt=4000) /1ss_cnt=0; second+;

41、 if(second=60)second=0;minute+; if(minute=60) minute=0; hour+; if(hour=24) hour=0;day+; if(day=31) day=0; if(month>=12) year+;month=1; if(year>=2012)year=2010; void Disp_time(void) / 显示时间dh=day/10;dl=day%10;hh=hour/10;hl=hour%10;mh=minute/10;ml=minute%10;sh=second/10;sl=second%10; if(sl=0&

42、&sh=0&&ml=0&&mh=0)buz=0;delay(10000);buz=1;DisplayListChar(0, 0, dispcode3,16);delay(20000);DisplayListChar(0, 0, dispcode1,16);delay(1000);sendcommand(0x81,0x0a);/ 数码管显示 sendcommand(0x86,0x0a); display(3,sl);delay_50ms(); display(2,sh);delay_50ms(); / 秒 display(0,ml);delay_50ms(

43、); display(7,mh);delay_50ms();/ 分display(5,hl);delay_50ms(); display(4,hh);delay_50ms();/ 时/ 液晶DispOneChar(6,0,(year/1000)%10+0x30);/ 年 DispOneChar(7,0,(year/100)%10+0x30);DispOneChar(8,0,(year/10)%10+0x30);DispOneChar(9,0,(year/1)%10+0x30);DispOneChar(10,0,'-');DispOneChar(11,0,moh+0x30); /

44、 月DispOneChar(12,0,mol+0x30);DispOneChar(13,0,'-');DispOneChar(14,0,dh+0x30); / 日DispOneChar(15,0,dl+0x30);void riqi() / 日期选择显示display(3,dl);delay_50ms(); display(2,dh);delay_50ms(); display(1,mol);delay_50ms(); display(0,moh);delay_50ms(); display(5,temp=(year/100)%10);delay_50ms(); display

45、(4,temp=(year/1000)%10);delay_50ms();display(6,temp=(year/10)%10);delay_50ms; display(7,temp=(year/1)%10);delay_50ms;void main(void)/ 主函数LcdReset();Init(); delay(100);while(1) / 读键盘 Disp_time();if(!KEY=1)key= ZLG7289_Key(); switch(key) case 0x00:if(minute=60)minute=0;else minute+; ml=minute%10; mh=m

46、inute/10;display(0,ml);delay_50ms(); display(7,mh);delay_50ms(); / 分 ;break;case 0x01:if(hour=24)hour=0;else hour+; hl=hour%10; hh=hour/10;display(5,hl);delay_50ms(); display(4,hh);delay_50ms(); / 时 break;case 0x04:if(day=32)day=1;/ 校日else day+;dh=day/10; dl=day%10; DispOneChar(15,0,dl+0x30); DispOn

47、eChar(14,0,dh+0x30); break;case 0x05:if(month=12)month=1; / 较月 else month+;moh=month/10; mol=month%10; DispOneChar(12,0,mol+0x30); DispOneChar(11,0,moh+0x30);break;case 0x06:if(year=2012) year=2010; /较年else year+;temp=(year/1000)%10; DispOneChar(6,0,temp+0x30);temp=(year/100)%10; DispOneChar(7,0,tem

48、p+0x30);temp=(year/10)%10; DispOneChar(8,0,temp+0x30);temp=(year/1)%10; DispOneChar(9,0,temp+0x30); break;case 0x08:riqi();break; / 转换显示年月日 case 0x09: dh=day/10;dl=day%10; hh=hour/10;hl=hour%10; mh=minute/10;ml=minute%10;Sendy(' ');Sendy('t');Sendy('i');Sendy('m');Sen

49、dy('e');Sendy(':');Sendy(hh+0x30);Sendy(hl+0x30);Sendy(':');Sendy(mh+0x30);Sendy(ml+0x30);Sendy(':');Sendy(sh+0x30);Sendy(sl+0x30); break;default:break; while(!KEY);if(OnReceive) / 显示接收数据 for(i=0;i<16;i+)DispOneChar(i,1,ReceiveBufferi);OnReceive=0; 使用的头文件#define la

50、taport P0 #define buly 0x80sbit rs=P2A0;sbit rw=P2A1;液晶显示程序 */简易延时函数 */sbit e =P2A2;/*void delay(unsigned int j) /*for(j;j>0;j-);/* 延时 */void Lcddelay(unsigned char MS)unsigned char i, j;while(MS!=0) j = 4;while(j!=0)i=0xf0;while(i!=0)i-;j-;MS-;/* 检测 lcd 状态 */void WaitForEnable(void)lataport=0xff

51、; rs=0;rw=1;Lcddelay(5);_nop_();e=1;_nop_();_nop_(); while(lataport&buly);e=0;/* 写控制字 */void LcdWriteCommand(unsigned char CMD,unsigned char AttribC) if(AttribC) WaitForEnable();rs=0;rw=0;_nop_();lataport=CMD; Lcddelay(5);_nop_();e=1;_nop_();_nop_();e=0;/* 显示光标定位 */ void LocateXY(char polx,char

52、poly) unsigned char temp;temp=polx&0xf;poly&=0x1; if(poly) temp|=0x40; temp|=0x80;LcdWriteCommand(temp,0);写字符void LcdWriteLata(char lataW)WaitForEnable(); rs=1;rw=0;_nop_(); lataport=lataW;Lcddelay(5);_nop_(); e=1;_nop_();_nop_();e=0;/* 在指定位置显示字符 */ void DispOneChar(unsigned char x,unsigned

53、char y,unsigned char Wlata) LocateXY(x,y);LcdWriteLata(Wlata);初始化void LcdReset(void)LcdWriteCommand(0x38,0);Lcddelay(5);LcdWriteCommand(0x38,0);Lcddelay(5);LcdWriteCommand(0x38,0);Lcddelay(5);LcdWriteCommand(0x38,1);/ 清屏LcdWriteCommand(0x08,1);LcdWriteCommand(0x01,1);LcdWriteCommand(0x06,1);LcdWriteCommand(0x0c,1);codevoid DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DLata,unsigned char L)unsigned char i;for(i=0;i<L;i+)DispOneChar(X+,Y,DLatai)

温馨提示

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

评论

0/150

提交评论