1602程序


数字歇后语 2019-10-06 15:57:19 数字歇后语
[摘要]1602程序篇1:单片机学习:lcd1602简介及驱动程序1、简介1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和

【www.shanpow.com--数字歇后语】

1602程序篇1:单片机学习:lcd1602简介及驱动程序

1、简介
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
2、引脚
1602采用标准的16脚接口,其中:
第1脚:VSS为电源地
第2脚:VCC接5V电源正极
第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。
第7~14脚:D0~D7为8位双向数据端。
第15~16脚:空脚或背灯电源。15脚背光正极,16脚背光负极。
3、电路连接图
4、驱动程序(引用金沙滩教程程序)
/*
* 1602
*/
#include
#include
#define uchar unsigned char
sbit RS = P2^7 ;
sbit RW = P2^6 ;
sbit EN = P2^5 ;
sbit BUSY = P0^7;
/**
* 等待繁忙标志
*/
void wait(void)
{
P0 = 0xFF;
do
{
RS = 0;
RW = 1;
EN = 0;
EN = 1;
}while (BUSY == 1);
EN = 0;
}
/**
* 写数据
*/
void w_dat(uchar dat)
{
wait();
EN = 0;
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 写命令
*/
void w_cmd(uchar cmd)
{
wait();
EN = 0;
P0 = cmd;
RS = 0;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 发送字符串到LCD
*/
void w_string(uchar addr_start, uchar *p)
{
w_cmd(addr_start);
while (*p != "\0")
{
w_dat(*p++);
}
}
/**
* 初始化1602
*/
void Init_LCD1602(void)
{
w_cmd(0x38); // 16*2显示,5*7点阵,8位数据接口
w_cmd(0x0C); // 显示器开、光标开、光标允许闪烁
w_cmd(0x06); // 文字不动,光标自动右移
w_cmd(0x01); // 清屏
}
小编整理发布,侵删。希望对大家有帮助。

1602程序篇2:1602显示程序


给你一个我使用的1602操作文件。//LCD1602功能函数// 51 @ 12MHz//elecfun @ 2010-11-6//使用方法: 使用前调用Init_LCD1602()初始化,显示方法LCD1602_DispString(0, 0, "This is a test.");#ifndef _LCD1602_#define _LCD1602_//#define _PORT_REV_            //如果数据端口高低位交换,请去掉此注释#include <intrins.h>            //包含_nop_()指令sbit LCD1602_RS = P2^4;         //控件引脚定义,移植请修改sbit LCD1602_RW = P2^3;sbit LCD1602_E  = P2^2;#define LCD_PORT            P1  //输出数据总线端口定义,移植请修改#define LCD_COMMAND         0       // Command#define LCD_DATA            1       // Data#define LCD_CLEAR_SCREEN    0x01    // 清屏#define LCD_HOMING          0x02    // 光标返回原点#define LCD_SHOW            0x04    //显示开#define LCD_HIDE            0x00    //显示关      #define LCD_CURSOR          0x02    //显示光标#define LCD_NO_CURSOR       0x00    //无光标             #define LCD_FLASH           0x01    //光标闪动#define LCD_NO_FLASH        0x00    //光标不闪动#define LCD_AC_UP           0x02#define LCD_AC_DOWN         0x00    // default#define LCD_MOVE            0x01    // 画面可平移#define LCD_NO_MOVE         0x00    //default/*********************************************************************************************函数名:8位数据高低位交叉互换调  用:uchar = DataReverse(uchar);参  数:输入的端口(0000 0XXX 其中XXX是设置输入端口号,可用十进制0~7表示,0表示P1.0,7表示P1.7)返回值:交换后的8位数据结  果:交换数据高低位D7→D0,D6→D1.....,D0→D7,并返回交换后的结果备  注:/**********************************************************************************************/unsigned char DataReverse(unsigned char datOld){    unsigned char datNew=0,i;    for (i=0; i<8; i++)    {        if (datOld & (1<<i))        //如果某位为1,则或上一个1            datNew |= (0x80>>i);    }    return datNew;}/**********************************************************************************************//*********************************************************************************************函数名:LCD1602等待函数调  用:uchar = LCD_Wait();参  数:无返回值:LCD1602数据总线的值结  果:等待LCD1602内部指令执行完成备  注:返回结果可不用/**********************************************************************************************/unsigned char LCD_Wait(void){    LCD1602_RS = 0;    LCD1602_RW = 1; _nop_();    LCD1602_E = 1;  _nop_();#ifdef _PORT_REV_                       //如果数据线高低位交换,则需要处理数据    while(DataReverse(LCD_PORT)&0x80);    LCD1602_E = 0;    return DataReverse(LCD_PORT);#else                                   //正常情况下不需要交换    while(LCD_PORT&0x80);    LCD1602_E = 0;    return LCD_PORT;#endif}/**********************************************************************************************//*********************************************************************************************函数名:LCD1602数据写函数调  用:LCD_Wait(bit, uchar);参  数:数据类型,数据值返回值:无结  果:将指定数据类型的数据写入1602备  注:数据类型:LCD_COMMAND(0)、LCD_DATA(1)/**********************************************************************************************/void LCD_Write(bit DataStyle, unsigned char DAT){    LCD1602_E = 0;    LCD1602_RS = DataStyle;    LCD1602_RW = 0;     _nop_();#ifdef _PORT_REV_    LCD_PORT = DataReverse(DAT);#else    LCD_PORT = DAT;#endif    _nop_();    LCD1602_E = 1;      _nop_();//注意顺序    LCD1602_E = 0;      _nop_();    LCD_Wait();                 //等待1602内部执行完,Proteus仿真时请注释此句}/**********************************************************************************************//*********************************************************************************************函数名:LCD1602显示设置函数调  用:LCD_SetDisplay(uchar);参  数:显示模式返回值:无结  果:正常设置1602显示模式备  注:内部函数,初始化时调用/**********************************************************************************************/void LCD_SetDisplay(unsigned char DisplayMode){    LCD_Write(LCD_COMMAND, 0x08|DisplayMode);   }/**********************************************************************************************//*********************************************************************************************函数名:LCD1602显示设置函数调  用:LCD_SetInput(uchar);参  数:显示模式返回值:无结  果:正常设置1602显示模式备  注:内部函数,初始化时调用/**********************************************************************************************/void LCD_SetInput(unsigned char InputMode){    LCD_Write(LCD_COMMAND, 0x04|InputMode);}/**********************************************************************************************//*********************************************************************************************函数名:LCD1602初始化函数调  用:Init_LCD1602();参  数:无返回值:无结  果:初始化1602函数备  注:/**********************************************************************************************/void Init_LCD1602(){    LCD_Write(LCD_COMMAND, 0x38);               //8位数据端口,2行显示,5*7点阵    LCD_Write(LCD_COMMAND, 0x38);    LCD_Write(LCD_COMMAND, 0x38);    LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR);   //开启显示, 无光标    LCD_Write(LCD_COMMAND, LCD_CLEAR_SCREEN);   //清屏    LCD_SetInput(LCD_AC_UP | LCD_NO_MOVE);      //AC递增, 画面不动}/**********************************************************************************************//*********************************************************************************************函数名:LCD1602数据写函数调  用:LCD1602_DispString(uchar, uchar, *uchar);参  数:x坐标,y坐标,字符串返回值:无结  果:在指定坐标显示字符串备  注:x: 0~15; y:0、1/**********************************************************************************************/void LCD1602_DispString(unsigned char x, unsigned char y, unsigned char *s){    if(y == 0)        LCD_Write(LCD_COMMAND, 0x80|x);    if(y == 1)        LCD_Write(LCD_COMMAND, 0x80|(x-0x40));    while(*s != "\0")    {        LCD_Write(LCD_DATA, *s);        s++;    }}/**********************************************************************************************/#endif

1602程序篇3:1602液晶显示程序


C语言源程序 /******************************************************************** 1602A液晶屏驱动程序** 晶 振频 率:11.0592M

** 线路-> 单片机 实验开发板A->中国电子进修网******************************************************************/#include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit LCM_E=P3^5;//定义接口sbit LCM_RW=P3^6;sbit LCM_RS=P3^7;#define LCM_Data P1//数据接口void LCM_WritEDAta(uchar WDLCM);void LCM_WriteCommand(uchar WCLCM,BuysC);uchar LCM_ReadData(void);uchar LCM_ReadStatus(void);void LCM_Init(void);void DisplayOneChar(uchar X, uchar Y, uchar DData);void DisplayListChar(uchar X, uchar Y, uchar code *DData);void Delay5Ms(void);void Delay400Ms(void);uchar code uctech[] = {"1602A"};uchar code net[] = {"www.52c51.com"};void main(void){Delay400Ms();//启动等待,等LCM讲入工作状态LCM_Init();//LCM初始化Delay5Ms();//延时片刻(可不要)DisplayListChar(6, 1, uctech);DisplayListChar(0, 0, net);LCM_ReadData();//测试用句无意义LCM_Data=255;while(1);}/****************************1602A写数据函数**************************//*函数原型:void LCM_WriteData(uchar WDLCM)/*函数功能:1602A写数据/*输入参数:要写入的数据/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void LCM_WriteData(uchar WDLCM){LCM_ReadStatus();//检测忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0;//若晶振速度太高可以在这后加小的延时LCM_E = 0;//延时LCM_E = 1;}/****************************1602A写指令函数**************************//*函数原型:void LCM_WriteCommand(uchar WCLCM,BuysC)/*函数功能:1602A写指令/*输入参数:要写入的指令/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void LCM_WriteCommand(uchar WCLCM,BuysC)//BuysC为0时忽略忙检测{if (BuysC) LCM_ReadStatus();//根据需要检测忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;}/****************************1602A读数据函数**************************//*函数原型:uchar LCM_ReadData(void)/*函数功能:1602A读数据/*输入参数:无/*输出参数:1602A返回的数据/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/uchar LCM_ReadData(void){LCM_RS = 1;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;return(LCM_Data);}/****************************1602A读状态函数**************************//*函数原型:uchar LCM_ReadData(void)/*函数功能:1602A读状态/*输入参数:无/*输出参数:1602A返回的状态/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/uchar LCM_ReadStatus(void){LCM_Data = 0xFF;LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & 0x80);//检测忙信号return(LCM_Data);}/****************************1602A初始化函数**************************//*函数原型:void LCM_Init(void)/*函数功能:1602A初始化/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void LCM_Init(void){LCM_Data = 0;LCM_WriteCommand(0x38,0);//三次显示模式设置,不检测忙信号Delay5Ms();LCM_WriteCommand(0x38,0);Delay5Ms();LCM_WriteCommand(0x38,0);Delay5Ms();LCM_WriteCommand(0x38,1);//显示模式设置,开始要求每次检测忙信号LCM_WriteCommand(0x08,1);//关闭显示LCM_WriteCommand(0x01,1);//显示清屏LCM_WriteCommand(0x06,1);// 显示光标移动设置LCM_WriteCommand(0x0C,1);// 显示开及光标设置}/******************1602A按指定位置显示一个字符函数**********************//*函数原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)/*函数功能:1602A按指定位置显示一个字符/*输入参数:X坐标 Y坐标 要显示的字符/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void DisplayOneChar(uchar X, uchar Y, uchar DData){Y &= 0x1;X &= 0xF;//限制X不能大于15,Y不能大于1if (Y) X |= 0x40;//当要显示第二行时地址码+0x40;X |= 0x80;// 算出指令码LCM_WriteCommand(X, 0);//这里不检测忙信号,发送地址码LCM_WriteData(DData);}/*******************1602A按指定位置显示一串字符函数*********************//*函数原型:void DisplayListChar(uchar X, uchar Y, uchar code *DData)/*函数功能:1602A按指定位置显示一个字符/*输入参数:X坐标 Y坐标 要显示字符串的首地址/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void DisplayListChar(uchar X, uchar Y, uchar code *DData){uchar ListLength;ListLength = 0;Y &= 0x1;X &= 0xF;//限制X不能大于15,Y不能大于1while (DData[ListLength]>0x20)//若到达字串尾则退出{if (X <= 0xF)//X坐标应小于0xF{DisplayOneChar(X, Y, DData[ListLength]);//显示单个字符ListLength++;X++;}}}/********************5ms延时函数************************//*函数原型:void Delay5Ms(void)/*函数功能:5ms延时/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void Delay5Ms(void){unsigned int TempCyc = 5552;while(TempCyc--);}/********************400ms延时延时函数************************//*函数原型:void Delay400Ms(void)/*函数功能:400ms延时延时/*输入参数:无/*输出参数:无/*调用模块:/*建立时间:2005/11/14/*作者:站长/**********************************************************************/void Delay400Ms(void){uchar TempCycA = 5;unsigned int TempCycB;while(TempCycA--){TempCycB=7269;while(TempCycB--);};}
汇编语言源程序
LCM_RS EQU P3.7 ;//定义接口LCM_RW EQU P3.6LCM_E EQU P3.5LCM_DATA EQU P1 ;数据接口ORG 0000H ;从0000H处开始SJMP MAIN ;跳转到MAIN处ORG 0030H ;主程序从0030H处开始MAIN: MOV SP,#70H ;堆栈指针指向70HLCALL INITIAL ;调用启动LCM子程序进行初始化LCALL CLS ;调用清除LCM子程序MOV A,#80H;向A送立即数80H设定显示地址为第一行第一列LCALL WRITE_COM ;调用写指令到LCM子程序MOV DPTR,#LINE1 ;将第一行字符串的启始地址送如DPTR中LCALL DISP;调用显示字符串到LCM子程序MOV A,#0C0H ;向A送立即数0C0H设定显示地址为第二行第一列LCALL WRITE_COM ;调用写指令到LCM子程序MOV DPTR,#LINE2 ;将第二行字符串的启始地址送如DPTR中LCALL DISP;调用显示字符串到LCM子程序SJMP $;程序动态停机LINE1:DB " WWW.52C51.COM ",00H;第一行字符串LINE2:DB " 1602A ",00H;第二行字符串INITIAL:MOV A,#38H;启动LCM子程序LCALL WRITE_COMMOV A,#0EHLCALL WRITE_COMMOV A,#06HLCALL WRITE_COMRETCHECK_BUSY: PUSH ACC;查询忙碌信号子程序BUSY_LOOP:CLR LCM_ESETB LCM_RWCLR LCM_RSSETB LCM_EMOV A,LCM_DATACLR LCM_EJB ACC.7,BUSY_LOOPPOP ACCLCALL DELRETWRITE_COM:LCALL CHECK_BUSY;写指令到LCM子程序CLR LCM_ECLR LCM_RSCLR LCM_RWSETB LCM_EMOV LCM_DATA,ACLR LCM_ERETWRITE_DATA: LCALL CHECK_BUSY;写数据到LCM子程序CLR LCM_ESETB LCM_RSCLR LCM_RWSETB LCM_EMOV LCM_DATA,ACLR LCM_ERETCLS:MOV A,#01H;清除LCM子程序LCALL WRITE_COMRETDEL:MOV R6,#5 ;2.7MS延时子程序D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETDISP: PUSH ACC;将A的内容压栈DISP_LOOP:CLR A ;A清零MOVC A,@A+DPTR;查表将字符串内容送入AJZ END_DISP ;若查到的内容为0则终止查表LCALL WRITE_DATA;调用写数据到LCM子程序INC DPTR;DPTR加1指向下一个对象SJMP DISP_LOOP;跳转到DISP_LOOP循环执行END_DISP: POP ACC ;弹出压栈内容至ARETEND ;程序结束

本文来源:https://www.shanpow.com/xhy/480738/

《1602程序.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

相关阅读
  • 1-49数字对应五行_对应关系你要了解 1-49数字对应五行_对应关系你要了解
  • 遇见你的时候所有星星都落到我头上吉他谱 遇见你的时候所有星星都落到我头上吉他谱
  • 2020抗击疫情防控心得体会范本 2020抗击疫情防控心得体会范本
  • 芒种歌曲简谱 芒种歌曲简谱
  • 陈雪燃《无名之辈》钢琴谱 陈雪燃《无名之辈》钢琴谱
  • 2020抗击疫情先进事迹精选心得体会感悟5篇 2020抗击疫情先进事迹精选心得体会感悟5篇
  • 微信报名接龙数字如何排列对齐传递 微信报名接龙数字如何排列对齐传递
  • 表白1到10的数字含义_数字表白暗语1到10 表白1到10的数字含义_数字表白暗语1到10
为您推荐
  • cvv2是什么意思_cvv2是什么
    cvv2是什么意思_cvv2是什么
    什么是信用卡CVV2码?大家创业网精心为大家整理了cvv2是什么,希望对你有帮助。cvv2是什么CVV2是打印在 Visa Master Card 卡签名区的一个数字。它位于信用卡号后的3位数字。我们
  • 股票神奇数字
    股票神奇数字
    一:[股票神奇数字]股票神奇数字我们今天来继续分享学习笔记哈。。 我有个360图书馆,里边放着自己喜欢的宝藏, 我们可以学习和分享,但是不可以标明为自己原创。。 【股票神奇数字】1、在波段的高位股价尾数出现(6, 7 ,8 ,9,0,)是高抛信号,反过来在波段低位是买入信号。 2、 尾数
  • 我的幸运数字是多少
    我的幸运数字是多少
    我的幸运数字是多少篇(1):幸运数字查询,吉祥数字查询每个人都有自己的幸运数字,你知道你的幸运数字是多少吗,幸运数字也叫吉利数字,吉祥数字,用这个数字对自己八字和运势有利,如幸运数字的车号,楼层号,房号,手机号,幸运数字的那一天都是对自己有利的,那么你的幸运数字是什么,今天起名网教你如何手把手查询自
  • 属鸡的今年运气如何
    属鸡的今年运气如何
    第一篇属鸡的今年运气如何:属鸡的人2018年运程,属鸡的今年多大,属鸡的女人,属鸡人出生月的命运,2018属鸡的运程,酉鸡五行分析酉属金本命佛不动尊菩萨吉祥颜色金、啡、啡黄、黄大凶颜色绿、红、蓝、灰幸运数字5、7、8大凶数字1、3、9幸运花剑兰、凤仙花、鸡冠花吉祥方位西、西南、东北方戌
  • ico代币
    ico代币
    一:[ico代币]ICO所谓ICO,全称Initial Coin Offering,意思是“数字货币首次公开募资”,概念拷贝自股票市场的IPO。不同的是,IPO是企业为了发展而向公众筹集资金,ICO是企业为了发展而向公众筹集虚拟货币,将发行的标的物由IPO的证券变成了数字加密货币。ICO发行团队在进
  • 男性右下腹部隐痛的原因
    男性右下腹部隐痛的原因
    (1) [男性右下腹部隐痛的原因]男人右下腹部隐痛,千万别大意,可能是得了这种病!偷偷看:很多没有性常识和性经验的女生都会有疑问,那就是女生第一次是不是都会流血,没有出血就代表不是第一次吗?长按二维码加我了解更多,回复数字193了解详情。腹痛是一种常见的复杂疾病,右下腹指的是与肚脐眼相平的右腹
  • 监控分几种
    监控分几种
    监控分几种篇(1):监控摄像机有哪几种类型目前安防市场上主流的监控摄像机大致分为模拟和数字两大类一、模拟 按照传感器分为:CCD和CMOS两种。 按照是否带红外灯分为:红外相机和非红外相机。 按照分辨率分为:420线,480线,540线,600线,700线,目前700线是主流。  按照外型分为:枪机
  • 穷了一辈子
    穷了一辈子
    穷了一辈子篇一:人生中 注定穷一辈子的四种人摘要【人生中 注定穷一辈子的四种人】赚钱是为了更好地生活,有的人,只知道赚,却不懂得花、不懂得享受。这样的人,金钱对他而言只是一个数字,而没有转换成其他的价值,享受的价值、快乐的价值、给予的价值。拥有再多的钱都不算富有,注定只是赚钱的工具,而成不了钱的主
  • 国家隐瞒的超能力者
    国家隐瞒的超能力者
    国家隐瞒的超能力者篇1:超能力者!!国家不公布的资料这个世界的确有异能者,也有许多难一想像的事,这取决于个人的认知,其实这个世界不像我们看见的那么简单. 每年世界上发现的超能力者都多到近一万 这是一个恐怖的数字 因为证实了超能力者是随着社会进步发达和世界人口的变化取决的,其中一部分异能者具备超强的
  • 小瘪三
    小瘪三
    第一篇小瘪三:牛X,小瘪三竟稀里糊涂混成了皇帝从古至今,在大天朝出现的正统皇帝加起来粗略一算应该总共有611位,如果加上三国时期五代十六国西夏金辽以及少数民族临时政权那些乱七八糟的野鸡皇帝,那数字可就没法算了。这些皇帝有起兵造反上位的,有当太子继位的,也有搞政变阴谋得来的,当然了,还有是被楞推上去当