版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
例如:LCD1602液晶模块应用要求:LCD1602字符型液晶显示实验。在屏幕的第一行显示“224166320@qq”,第二行那么显示“Tel:1308645xxxx”[实验原理——LCD根底知识]LCD显示器是一种利用液晶的扭曲/向列效应制成的新型显示器。具有体积小、重量轻、功耗低、抗干扰能力强等优点,因而在单片机系统中被广泛应用。[实验原理——LCD结构及工作原理]LCD本身不发光,是通过借助外界光线照射液晶材料而实现显示的被动显示器件。向列型液晶材料被封装在上、下两片导电玻璃电极之间,液晶分子平行排列,上下扭曲90度,外部入射光线通过上偏振片后形成偏振光,该偏振光通过平行排列的液晶材料后被旋转90度,再通过与上偏振片垂直的下偏振片,被反射极反射过来,呈透明状态。假设在上、下电极之间加一定电压,在电场的作用下迫使加在电极局部的液晶分子转成垂直排列,其旋光作用也随之消失,致使从上偏振片入射的偏振光不旋转,光无法通过下偏振片返回,呈黑色。去掉电压后,液晶分子又恢复其扭转结构。实验原理——SMC1602A液晶模块引脚功能实验原理——液晶控制器接口说明实验原理——液晶控制器接口说明实验原理——液晶控制器接口说明实验原理——液晶控制器接口说明实验原理——1602液晶控制器自带标准字库每一个字符都有一个固定的代码,比方“A”的代码是41H,显示时模块把41H中的点阵字符图形显示出来,就能看到字母“A”。#include<AT89x52.h>#include<INTRINS.h>#defineucharunsignedchar#defineuintunsignedint#defineDOUTP0sbitrs=P2^0;sbitrw=P2^1;sbite=P2^7;codeuchartab1[]={0x32,0x32,0x34,0x31,0x36,0x36,0x33,0x32,0x30,0x40,0x71,0x71,0x2e,0x63,0x6f,0x6d,0xff,};codeuchartab2[]={0x54,0x65,0x6c,0x3a,0x20, 0X31,0X33,0x30,0x38,0x36,0x34,0x35,0x78,0x78,0x78,0x78,0xff,};//延时函数voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}参考例如程序〔程序写在一个C文件中〕//以下为读忙状态的时序程序unsignedcharread_status(void){unsignedcharLCD_Status;DOUT=0xff;rs=0;rw=1;e=1;delayms(1);LCD_Status=DOUT;e=0;returnLCD_Status;}//以下为写命令的时序程序voidwrite_com(unsignedcharcmd){while((read_status()&0x80)==0x80);rs=0;rw=0;e=0;P0=cmd;e=1;delayms(1);e=0;}//以下为液晶初始化程序voidlcd_ini(void){write_com(0x38);delayms(1);write_com(0x01);delayms(1);write_com(0x06);delayms(1);write_com(0x0c);delayms(1);}//以下为写数据的时序程序voidwrite_dat(unsignedchardat){while((read_status()&0x80)==0x80);rs=1;rw=0;e=0;P0=dat;e=1;delayms(1);e=0;}//以下为主函数voidmain(void){uchari=0;lcd_ini();write_com(0x80);//设置第一行数据地址指针,为80H+地址码
delayms(1);while(tab1[i]!=0xff){write_dat(tab1[i]);i++;delayms(1);}i=0;write_com(0xc0);//设置第二行数据地址指针,为80H+地址码
delayms(1);while(tab2[i]!=0xff){write_dat(tab2[i]);i++;delayms(1);}i=0;while(1);}参考程序://LCD1602.C//液晶控制与显示程序#include<reg51.h>#include<intrins.h>sbitRS=P2^0;//存放器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitEN=P2^2;//使能信号位,将E位定义为P2.2引脚//延时函数voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}程序可作如下修改,写法如下://忙检测函数unsignedcharbusy_check(void){unsignedcharLCD_Status;//定义忙状态变量
RS=0;RW=1;EN=1;delayms(1);LCD_Status=P0;//读取忙状态
EN=0;returnLCD_Status;//返回忙状态}//写命令voidwrite_LCD_Command(unsignedcharcmd){while((busy_check()&0x80)==0x80);//等待忙状态结束
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayms(1);EN=0;}//写数据voidwrite_LCD_data(unsignedchardat){while((busy_check()&0x80)==0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;delayms(1);EN=0;}//初始化voidinit_LCD(void){write_LCD_Command(0x38);//显示模式设置
delayms(1);write_LCD_Command(0x01);//清屏
delayms(1);write_LCD_Command(0x06);//字符进入模式:屏幕不动,字符后移
delayms(1);write_LCD_Command(0x0c);//显示开,关光标
delayms(1);}//显示字符串voidShowString(unsignedcharx,unsignedchary,unsignedchar*str){unsignedchari=0;//设置起始位置if(y==0){write_LCD_Command(0x80|x);}if(y==1){write_LCD_Command(0xc0|x);}//输出字符串for(i=0;i<16;i++){write_LCD_data(str[i]);}}//主函数voidmain(void){init_LCD();ShowString(0,0,"224166320@qq");ShowString(0,1,"Tel:1308645xxxx");while(1);}根本思路:将一个文件的程序按照其模块功能划分为两个或两个以上的文件,每个文件表示系统实现特定的功能。如本程序可分为主函数C文件、液晶显示C文件、液晶显示头文件、includes头文件。//main.c:#include"includes.h"voidmain(void){init_LCD();ShowString(0,0,"224166320@qq");ShowString(0,1,"Tel:1308645xxxx");while(1);}大型模块化程序的肇始〔LCD16023.0版〕//lcd1602test.c:#include<reg51.h>#include<LCD1602.h>voidShowString(unsignedcharx,unsignedchary,unsignedchar*str){unsignedchari=0;if(y==0){write_LCD_Command(0x80|x);}if(y==1){write_LCD_Command(0xc0|x);}
for(i=0;i<16;i++){write_LCD_data(str[i]);}}大型模块化程序的肇始〔LCD16023.0版〕//includes.h:#ifndef__INCLUDES_H__#define__INCLUDES_H__#include<reg51.h>#include<intrins.h>voidShowString(unsignedcharx,unsignedchary,unsignedchar*str);init_LCD();#endif大型模块化程序的肇始〔LCD16023.0版〕//lcd1602.h:#ifndefLCD_CHAR_1602_2010_11_8#defineLCD_CHAR_1602_2010_11_8sbitRS=P2^0;//存放器选择位,将RS位定义为P2.0引脚sbitRW=P2^1;//读写选择位,将RW位定义为P2.1引脚sbitEN=P2^2;//使能信号位,将E位定义为P2.2引脚voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}大型模块化程序的肇始〔LCD16023.0版〕接上页://忙检测函数unsignedcharbusy_check(void){unsignedcharLCD_Status;//定义忙状态变量
RS=0;RW=1;EN=1;delayms(1);LCD_Status=P0;//读取忙状态
EN=0;returnLCD_Status;//返回忙状态}//写命令voidwrite_LCD_Command(unsignedcharcmd){while((busy_check()&0x80)==0x80);//等待忙状态结束
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayms(1);EN=0;}接上页://写数据voidwrite_LCD_data(unsignedchardat){while((busy_check()&0x80)==0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;delayms(1);EN=0;}//初始化voidinit_LCD(void){write_LCD_Command(0x38);//显示模式设置
delayms(1);write_LCD_Command(0x01);//清屏
delayms(1);write_LCD_Command(0x06);//字符进入模式:屏幕不动,字符后移
delayms(1);write_LCD_Command(0x0c);//显示开,关光标
delayms(1);}#endif上面这个模块化程序的缺陷:1、将大量实质性函数代码写入到lcd1602.h这个头文件里面,混淆了头文件区别于C语言源文件的功能——头文件应为一份接口描述文件,其文件内部不应包含实质性函数代码,它就是一份说明书,说明的内容就是模块对外的接口函数或接口变量,同时包含很重要的宏定义及一些结构体的信息,离开这些信息就无法正常使用接口接口变量。2、includes.h这个头文件将程序用到的所有头文件都包含进去,不要在这个文件中再写入象函数声明这样的语句;而要在这个头文件中再声明函数,本身说明模块化程序的不标准。思路:将此程序按照其模块功能划分为主函数C文件、初始化函数C文件、液晶显示C文件、includes头文件、液晶显示C文件的头文件、初始化函数C文件的头文件,共6个文件,其中lcd1602.h和init.h实现lcd1602test.c和init.c两个文件和其他文件的连接。//main.c:#include"includes.h"voidmain(void){init_LCD();ShowString(0,0,"224166320@qq");ShowString(0,1,"Tel:1308645xxxx");while(1);}程序修改如下:对3.0版本程序的修正#include<includes.h>//初始化voidinit_LCD(void){write_LCD_Command(0x38);//显示模式设置
delayms(1);write_LCD_Command(0x01);//清屏
delayms(1);write_LCD_Command(0x06);//字符进入模式:屏幕不动,字符后移
delayms(1);write_LCD_Command(0x0c);//显示开,关光标
delayms(1);}//init.c:#include<includes.h>//延时函数voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}//lcd1602test.c:接上页://忙检测函数unsignedcharbusy_check(void){unsignedcharLCD_Status;//定义忙状态变量
RS=0;RW=1;EN=1;delayms(1);LCD_Status=P0;//读取忙状态
EN=0;returnLCD_Status;//返回忙状态}//写命令voidwrite_LCD_Command(unsignedcharcmd){while((busy_check()&0x80)==0x80);//等待忙状态结束
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayms(1);EN=0;}接上页://写数据voidwrite_LCD_data(unsignedchardat){while((busy_check()&0x80)==0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;delayms(1);EN=0;}//显示字符串voidShowString(unsignedcharx,unsignedchary,unsignedchar*str){unsignedchari=0;//设置起始位置if(y==0){write_L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山核桃承包协议书
- 展厅展示合同范本
- 宾馆预订合同范本
- 颍上网签合同范本
- 装饰订购合同范本
- 英文修理协议书
- 影视节目协议书
- 内墙抹灰合同协议
- 兼职薪酬合同范本
- 幼儿活动协议书
- 标准-医院免陪照护服务安全管理规范(送审稿)
- 英语试题卷参考答案山东省九五高中协作体2026届高三年级12月质量检测(九五联考)(12.17-12.18)
- 2025年潮州眼科医院面试题库及答案
- 2025辽宁葫芦岛市总工会招聘工会社会工作者5人参考笔试题库及答案解析
- 江苏省无锡市金桥双语实验学校2025-2026学年上学期九年级12月英语月考试题(含答案无听力部分)
- 战伤休克早期识别与处理
- 2025年度数据中心基础设施建设及运维服务合同范本3篇
- 【八年级上册地理】一课一练2.2 世界的气候类型 同步练习
- 筋膜刀的临床应用
- 中国石化《炼油工艺防腐蚀管理规定》实施细则(最终版)
- GB/T 70.3-2023降低承载能力内六角沉头螺钉
评论
0/150
提交评论