版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本单片机最小系统是以 AT89S51单片机为控制核心,由驱动芯片 ZLG7289与16键 的键盘矩阵实现对两个4位一体共阴数码管LED的驱动显示,由LCD1602实现液晶显示, 再通过电平转换芯片MAX232并连接到232接口实现串口通信,系统还包含有蜂鸣器,USB 及适配器供电接口,JTAG程序下载接口,总线扩展等。首先,用protel99se软件制作硬 件电路原理图及绘制PCB板;其次,安装焊接单片机最小系统开发板及下载线,并且进 行电路调试;再次,在 Keil uVisi on2 软件环境下调试单片机汇编程序或 C语言程序, 用单片机下载软件ISPLAY或 STC-ISP V31实现程序
2、下载,从而用编程实现最小系统的基 本功能;最后,编写综合程序以实现系统功能的综合以及拓展功能,其中串口通信用到 电脑自带的超级终端或 AccessPort 软件。单片机最小系统板焊接首先对照元件清单和电路图,检查器件是否完整,型号、规格、安装是否正确。然 后将各器件根据焊接规则焊接到电路板上, 其中对于器件的摆放方向和位置需十分注意。 先焊发热器件电阻和较低的电容, 再焊较大的器件,焊接JTAG线,JTAG线里面的芯片电 阻,电阻电容均为贴片封装,焊接时需小心谨慎,对于各条线引的焊接也需谨慎,按照 其对应的顺序进行焊接,焊接结束后,自行组装。检查已经焊好的电路板和JTAG下载线是否无误:先用万
3、用表检查电路板焊接是否 都正确。当检查没有短路,断路,虚焊,漏焊等错误后,给电路板供电,看二极管是 否亮,是否有器件过热,有可能二极管或三极管会在焊接的过程中被烧坏,那样的话就 要重新焊器件。 再用 Keil 软件给板子拷正确的程序,检查是否能按功能正常工作。单 片机系统的硬件调试和软件调试是不能分开的,许多硬件错误是在软件调试中被发现和 纠正的。软件设计在 Keil 软件环境下对照相关资料编写单片机最小系统开发板的有用程序, 使设计好 的程序编译无误,得到 hex 格式文件,用程序下载软件加载到单片机芯片中,实现仿真 电路,在板上得出效果。设计工具:电脑, Keil 软件, Isplay 软
4、件, STC-ISP V31 软件 蜂鸣器调试主要是检验程序能否下载到芯片,蜂鸣器能正常工作,掌握程序的编译下载到芯片 的方法。在Keil环境中用C语言编写简单是蜂鸣器程序或音乐播放程序。对Keil软件和程序下载软件进行相关配置设置。 将编译产生的 hex 文件下载到芯片,检测其工作是否正常,若工作不正常,则从软件 及硬件两方面进行检查。 有用的报警声程序见附录 4串口通信调试实现计算机与单片机之间相互通讯功能将编写的串口调试程序经过编译,下载到单片机。串口实现功能为在计算机上能显示单片机的输出。检测串口是否能正常工作,此阶段 需用到串口软件及串口线。若不能正常工作,则需从软件和硬件两方面进行
5、检查。正确功能为在电脑超级终端不停显示输出内容,与预期相同,工作正常。液晶显示调试保证液晶屏LCD能正常工作,输出效果有所扩展。在编写程序前,认真阅读LCD液晶屏资料,掌握LCD1602及 1602液晶模块数据手册(中文)中的液晶的使用和编程方法,了解其工作时序,及各个指令及初始化。对照电路图中LCD连接情况,编写LCD1602移动显示程序,经编译下载至单片机,检 测输出,若无输出,则调整电位器,若仍无输出则从软件及硬件两方面进行检查,找 出错误原因,直至液晶屏能正常工作。在程序编写时应时刻注意各个指令间的延时控制。以保证液晶屏呈现效果移动循环显 示,液晶屏工作正常。之后也可用 LCD做数字钟
6、,这将在综合程序里被用到,液晶移 屏显示程序见附录 6数码管及键盘控制调试 保证数码管能正常显示,以及按键能控制数码管的显示 .在编写程序前,应认真阅读LED和 ZLG7289A资料,了解和掌握其工作时序,及各个指 令及初始化,在程序编写时应时刻注意各个指令间的延时控制。对照电路图中ZLG7289模块的连接情况,编写程序,经过编译,然后下载到单片机, 检测展现效果,是否与程序预期相同。实现效果逐个闪烁,逐个消隐,键盘控制改变数据并移动,与预期相同,工作状态正 常。、再利用单片机内部时钟中断,编写数码管时钟程序,使数码管能够实现计时功能, 键盘能够控制时分秒。系统综合功能设计 综合单片机开发板上
7、的各个功能模块,以实现一个完整的系统功能 :根据前面对各模块功能的理解和程序编写,结合各个模块实现一个整体系统,把各模 块功能综合起来。设计一综合系统,使数码管实现数字钟且可右移、闪烁,液晶屏实现时间、日期的显 示且可移屏, 键盘能够控制系统, 蜂鸣器与键盘且可整点报时, 可实现串口通信功能 鸣器调试程序 本程序根据蜂鸣器与单片机口相连设计,可以验证单片机及下载功能的正确 .#include <>#include <>sbit buz = P3A3;unsigned char flag;void delayms(unsigned char ms)/* 延时子程序 */u
8、nsigned char 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 /* Debug
10、ging with 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.*/#ifnde
11、f MONITOR51SCON = 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
12、exits (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 int
13、 Uchar data 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 2u
14、char data c,i;if(RI)c=SBUF;/ 读取接收到的数据 if(BufferPointer<16) ReceiveBufferBufferPointer=c;/ 将接收到的数据存入接收缓冲区 BufferPointer+; else for(i=0;i<15;i+) ReceiveBufferi=ReceiveBufferi+1;/ 将缓冲区数据左移ReceiveBuffer15=c;/ 将接收到的数据存入接收缓冲区RI=0;/ 清空接收标志Send(c);/ 发送接收到的数据,以便回显 OnReceive=1;/ 接收事标志位置 1/* 以下为串口初始化函数 *
15、/void Initserialport(void)TMOD=0x20;SCON=0x50;TH1 = 0xe6; /* TH1: reload value for 1200 baud 16MHz */ES=1; / 允许串口中断EA=1;1 runTR1 = 1; /* TR1: timer */void Send(uchar data dat)SBUF=dat;while(TI=0);TI=0;void main(void) / 主函数uchar data i;LcdReset();/ 初始化 LCDInitserialport();/ 初始化串口DisplayListChar(0,0,&
16、quot;Receive 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 dispco
17、de2="thanks 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;
18、wcom();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 K
20、EY=P3A2;/需要在INT区把KEY用跳线冒跳到INTO,其余四个跳到VCC/这样,P3A2就相当于直接连接到keybdata uchar com_data;/ 定义 8 位数据 datasbit mos_bit=com_dataA7;sbit low_bit=com_dataA0;/* 变量定义 */uchar half_hign;uchar half_low;uchar sl,sh,ml,mh,hh,hl;uchar second=0;uchar minute=0;uchar hour=12;uint s_cnt,key;/* 延时子程序 */void delay_8us()uchar
21、 i;for (i=0; i<1; i+);void delay_50us()uchar i;for (i=0; i<6; i+);void delay_50ms()uchar i,j;for(j=0;j<50;j+)for(i=0;i<125;i+); void delay_1s()uchar i = 20;while(i-) delay_50ms(); void delay_2s()uchar i = 40;while(i-) delay_50ms();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
23、=DIO; CLK=1; 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
24、=1;/*功能:执行ZLG7289屯指令参数: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
25、= 0x01;break; case 0x02: key = 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;bre
26、ak; case 0x0c: key = 0x12;break; case 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
27、 Set_time(void) / 设定时间 if(key=0x00) / 按键 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
28、=0;sl=second%10; sh=second/10;hh=hour/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 0 EX0=0;TR0=0;key= ZLG7289_Key();Set_time();delay_1s(
29、);EX0=1;TR0=1;/* 中断控制 */void time0() interrupt 1s_cnt+;if(s_cnt=400)/1ss_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);
30、 / 显示“” sendcommand(0x86,0x0a);display(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
31、=1;delay_5s();sendcommand(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();/* 循环右移 */
32、for ( n=0; n<=7; n+ )ZLG(0xA2);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+; / 数据 OxFE循环左移 delay_2s();sendcommand(Ox88,OxOO)
33、;/ 八位同时闪烁delay_5s();delay_5s();sendcommand(Ox88,OxFF); / 停止闪烁 delay_5s();/* 消隐控制 */dat = OxFE;for ( n=O; n<8; n+ )sendcommand(Ox98,dat);dat <<= 1; dat+; / 数据 OxFE循环左移 delay_2s();sendcommand(Ox98,OxFF);/ 停止消隐delay_5s();/* 复位 */reset();delay_5s();reset();display(0,0);display(1,0);display(2,0)
34、;display(3,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);
35、 display(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,0x2
37、0,0x20,0x20, 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20;/ 设置 16字节的串行通信接收缓冲区 uchar data BufferPointer=0;/ 串行通信接收缓冲区指针,初始为 0 bit data OnReceive=0; / 串行通信接收事件标志位#define uint unsigned int#define uchar unsigned charsbit buz=P3A3;/ 蜂鸣器口定义uchar code dispcode1="Date :2010-00-00"/ 显示字符串uchar code disp
38、code3=" 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
39、(void) interrupt 4 using 2uchar data c,i;if(RI)c=SBUF;/ 读取接收到的数据if(BufferPointer<16)ReceiveBufferBufferPointer=c;/BufferPointer+;将接收到的数据存入接收缓冲区else for(i=0;i<15;i+)ReceiveBufferi=ReceiveBufferi+1;/ 将缓冲区数据左移 ReceiveBuffer15=c;/ 将接收到的数据存入接收缓冲区RI=0;/ 清空接收标志Sendy(c);/ 发送接收到的数据,以便回显 OnReceive=1;/ 接
40、收事标志位置 1void 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; s
41、econd+; 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&am
42、p;&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_5
43、0ms(); 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(); disp
45、lay(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=min
46、ute/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);DispOneChar
47、(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,temp+0x30);
48、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');Sendy('e
49、9;);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 lataport P0#defi
50、ne 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; rs=0;rw=1;L
51、cddelay(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 poly) unsigned
52、 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 char y,unsigned
53、 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);#define uchar unsigned chars
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年四川省彭州市高三生物上册期末考试模拟卷及答案
- 2026年湖南省浏阳市高三生物下册期末考试模拟检测卷(含答案)
- 2026年山东省莱阳市高一历史下册期末考试测试卷及参考答案【满分必刷】
- 2026年浙江省建德市高一化学上册期末考试测试卷附参考答案(综合卷)
- 2026年山西邮政人员招聘笔试备考题库及详细答案解析
- 2027年社区工作者招聘数量关系数学运算全真模拟卷
- 2026年社会工作师社会工作法规与政策通关试卷
- 2026年申能集团有限公司人员招聘考试备考题库及详细答案解析
- 2026年黑龙江旅游集团有限公司人员招聘考试参考试题及详细答案解析
- 孕妇保健知识宣教指导总结
- 2025年人工智能训练师职业技能认证模拟试卷及答案(金融数据标注规范)
- 2025年职业病诊断医师资格考试(职业性化学中毒)历年参考题库含答案详解(5卷)
- 管道完整性管理课件
- 黄石住房公积金管理办法
- 外委班组等同化管理办法
- 公路工程预算定额
- CJ/T 156-2001沟槽式管接头
- T/CECS 10214-2022钢面镁质复合风管
- JJF(新) 128-2024 热量表配对铂热电阻校准规范
- 黑洞课件教学课件
- 甲方工程管理手册
评论
0/150
提交评论