关于1602显示数字程序设计
- 格式:doc
- 大小:28.50 KB
- 文档页数:3
1//1602液晶显示程序, TX-1B实验板上的1602LCD的R/W读写端接地, 即始终只写, 不读数据2//使用1602LCD显示DS18B20转换的温度值3#include <reg52.H>4#include <intrins.H>5#include <math.H>67#define uchar unsigned char8#define uint unsigned int9sbit dula = P2^6;10sbit wela = P2^7;11sbit RS = P3^5; //数据/命令选择端(H/L)13sbit LCDEN = P3^4; //使能端14void delayUs()16{17 _nop_();18}1920void delayMs(uint a)21{22uint i, j;23for(i = a; i > 0; i--)24for(j = 100; j > 0; j--);25}2627//第一行开始地址为0x80, 第二行开始地址为0xc0;28//写命令:RS=0, RW=0;29void writeComm(uchar comm)30{31 RS = 0;32 P0 = comm;33 LCDEN = 1;34 delayUs();35 LCDEN = 0;36 delayMs(1);37}3839//写数据:RS=1, RW=0;40void writeData(uchar dat)41{42 RS = 1;43 P0 = dat;44 LCDEN = 1;45 delayUs();46 LCDEN = 0;47 delayMs(1);48}4950//初始化51//显示模式, 固定指令为00111000=0x38, 16*2显示, 5*7点阵,8位数据接口52//显示开/关及光标设置53//指令1: 00001DCB : D:开显示/关显示(H/L); C:显示光标/不显示(H/L), B:光标闪烁/不闪烁(H/L)54//指令2: 000001NS :55//N=1, 当读/写一个字符后地址指针加1, 且光标也加1; N=0则相反56//S=1, 当写一个字符, 整屏显示左移(N=1)或右移(N=0), 但光标不移动; S=0, 整屏不移动57void init()58{59//先关闭数码管, 使两个锁存器锁存, 因开了数码管, USB电压驱动不够, 将无法使LC D正常工作60 dula = wela = 0;61 writeComm(0x38); //显示模式62 writeComm(0x0c); //开显示, 关光标63 writeComm(0x06); //写字符后地址加1, 光标加164 writeComm(0x01); //清屏65}6667void writeString(uchar * str, uchar length)68{69 uchar i;70for(i = 0; i < length; i++)71 {72 writeData(str[i]);73 }74}7576/*****************************DS18B20*********************** ********/77sbit ds = P2^2;78//初始化DS18B2079//让DS18B20一段相对长时间低电平, 然后一段相对非常短时间高电平, 即可启动80void dsInit()81{82//对于11.0592MHz时钟, unsigned int型的i, 作一个i++操作的时间大于为8us83 unsigned int i;84 ds = 0;85 i = 100; //拉低约800us, 符合协议要求的480us以上86while(i>0) i--;87 ds = 1; //产生一个上升沿, 进入等待应答状态88 i = 4;89while(i>0) i--;90}9192void dsWait()93{94 unsigned int i;95while(ds);96while(~ds); //检测到应答脉冲97 i = 4;98while(i > 0) i--;99}100101//向DS18B20读取一位数据102//读一位, 让DS18B20一小周期低电平, 然后两小周期高电平,103//之后DS18B20则会输出持续一段时间的一位数据104bit readBit()105{106 unsigned int i;107 bit b;108 ds = 0;109 i++; //延时约8us, 符合协议要求至少保持1us111 i++; i++; //延时约16us, 符合协议要求的至少延时15us以上112 b = ds;113 i = 8;114while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求115return b;116}117118//读取一字节数据, 通过调用readBit()来实现119unsigned char readByte()120{121 unsigned int i;122 unsigned char j, dat;123 dat = 0;124for(i=0; i<8; i++)125 {126 j = readBit();127//最先读出的是最低位数据128 dat = (j << 7) | (dat >> 1);129 }130return dat;131}132133//向DS18B20写入一字节数据134void writeByte(unsigned char dat)135{136 unsigned int i;137 unsigned char j;139for(j = 0; j < 8; j++)140 {141 b = dat & 0x01;142 dat >>= 1;143//写"1", 将DQ拉低15us后, 在15us~60us内将DQ拉高, 即完成写1144if(b)145 {146 ds = 0;147 i++; i++; //拉低约16us, 符号要求15~60us内148 ds = 1;149 i = 8; while(i>0) i--; //延时约64us, 符合写时隙不低于60us要求150 }151else//写"0", 将DQ拉低60us~120us152 {153 ds = 0;154 i = 8; while(i>0) i--; //拉低约64us, 符号要求155 ds = 1;156 i++; i++; //整个写0时隙过程已经超过60us, 这里就不用像写1那样, 再延时64us了157 }158 }159}160161//向DS18B20发送温度转换命令162void sendChangeCmd()163{164 dsInit(); //初始化DS18B20, 无论什么命令, 首先都要发起初始化165 dsWait(); //等待DS18B20应答166 delayMs(1); //延时1ms, 因为DS18B20会拉低DQ 60~240us作为应答信号167 writeByte(0xcc); //写入跳过序列号命令字 Skip Rom168 writeByte(0x44); //写入温度转换命令字 Convert T169}170171//向DS18B20发送读取数据命令172void sendReadCmd()173{174 dsInit();175 dsWait();176 delayMs(1);177 writeByte(0xcc); //写入跳过序列号命令字 Skip Rom178 writeByte(0xbe); //写入读取数据令字 Read Scratchpad179}180181//获取当前温度值182int getTmpValue()183{184 unsigned int tmpvalue;185int value; //存放温度数值186float t;187 unsigned char low, high;188 sendReadCmd();189//连续读取两个字节数据190 low = readByte();191 high = readByte();192//将高低两个字节合成一个整形变量193 //计算机中对于负数是利用补码来表示的194 //若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的value195 tmpvalue = high;196 tmpvalue <<= 8;197 tmpvalue |= low;198 value = tmpvalue;199200//使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度201 t = value * 0.0625;202//将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入203 //如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度204 //如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度205 value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5206return value;207}208209void display(int v)210{211 unsigned char count;212 unsigned char datas[] = {0, 0, 0, 0, 0};213 unsigned int tmp = abs(v);214 datas[0] = tmp / 10000;215 datas[1] = tmp % 10000 / 1000;216 datas[2] = tmp % 1000 / 100;217 datas[3] = tmp % 100 / 10;218 datas[4] = tmp % 10;219 writeComm(0xc0+3);220if(v < 0)221 {222 writeString("- ", 2);223 }224else225 {226 writeString("+ ", 2);227 }228if(datas[0] != 0)229 {230 writeData('0'+datas[0]);231 }232for(count = 1; count != 5; count++)233 {234 writeData('0'+datas[count]);235if(count == 2)236 {237 writeData('.');238 }239 }240}241/*****************************DS18B20********************** *********/242243void main()244{245 uchar table[] = "Now Temperature:";246 sendChangeCmd();247 init(); 248 writeComm(0x80); 249 writeString(table, 16); 250 while (1) 251 { 252 delayMs(1000); //温度转换时间需要750ms 以上 253 writeComm(0xc0);254 display(getTmpValue());255 sendChangeCmd();256 } 257}OptionsDisableWhat is new with Snap Shots?1 23456789101112博客园首页新文章新随笔订阅管理posts - 101, comments - 110, trackbacks - 1单片机练习- DS18B20温度转换与显示最近都在学习和写单片机的程序, 今天有空又模仿DS18B20温度测量显示实验写了一个与DS18B20基于单总线通信的程序.DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。
实验1 1602型LCD显示一、实验目的:1. 了解Altera DE2-70多媒体开发板与PC(个人电脑)的正确连接;2. 掌握PC上安装的硬件设计环境Quartus II和应用程序设计环境Nios II;3. 初步了解IP核(硬件)模块的配置方法;4. 了解与此工程有关的顶层文件(.v);5. 掌握Nios II IDE的“hello world”软件工程模板;二、实验步骤:(一)初建工程:在PC上新建一个名为”demo_lcd”的工程鼠标左键双击桌面上的“Quartus II”快捷方式图标,耐心等待片刻,即可启动“Quartus II”设计页面,如图1-1所示。
图1-1在“Quartus II”设计页面内,鼠标左键单击“File -> New Project Wizard”。
弹出“New Project Wizard :introduction”。
如图1-2所示。
初次实验可以仔细阅读此页面内容,然后鼠标左键单击“next”按钮跳过此页,进入“New Project Wizard: Directory, Name, Top -level entity” 页面,如图1-3所示。
“the working directory for this project”(工程的工作目录)可以任意填写,例如:“E:/demo/demo_LCDdisplay”。
“工程的工作目录”如前“E:/demo/demo_LCDdisplay”,表示将会在E 盘上产生一个文件夹“demo”,在“demo”文件夹里产生另一个文件夹”demo_LCDdisplay”(工程文件夹,保存工程文件),此实验后续步骤中产生的各种文件会自动保存到路径“E:/demo/demo_LCDdisplay”下。
图1-2图1-3“the name of this project”(工程名字)填写为”demo_lcd”。
这里需要注意:由于“SOPC Builer”工具不能识别空格、中划线等符号,故实验所有步骤中如果需要命名,命名中不允许有空格、中划线出现,但“SOPC Builer”工具能识别下划线。
ORG 0000HAJMP STARTORG 0030H;液晶初始化START: MOV OUT,#01H;清屏LCALL WRMLMOV OUT,#38H;8为数据口,两行显示5*7点阵 LCALL WRMLMOV OUT,#06H;设置输入方式为光标向右移,屏幕上文字不移动LCALL WRMLMOV OUT,#0CH;设置显示方式,开显示屏LCALL WRML;第一行显示Hello!MOV OUT,#80H;设定第一行起始地址LCALL WRMLMOV R3,#80HMOV R4,#16MOV R5,#00HMOV DPTR,#TAB1WRIN1: LCALL DISPDJNZ R4,WRIN1;第二行逐字显示Nice to meet youMOV OUT,#0FH;设置显示方式,开显示屏,有光标,光标闪烁LCALL WRMLMOV OUT,#0C0H;设定第二行起始地址LCALL WRMLMOV R3,#0C0HMOV R4,#16MOV R5,#00HMOV DPTR,#TAB2WRIN2: LCALL DISPLCALL DELAYDJNZ R4,WRIN2MOV OUT,#08H;设置显示方式,关显示屏LCALL WRMLLCALL DELAYAJMP START;******************查表显示子程序******************DISP: PUSH AMOV A ,R5MOVC A,@A+DPTRMOV OUT,ALCALL WRDTINC R3INC R5POP ARET;*************判忙子程序************RDBF: MOV OUT,#0FFH;置位,准备读CLR RS;RS=0SETB RW ;R/W=1CLR ENOPSETB EJB OUT.7, RDBFRET;**************写命令子程序***************WRML: CLR RSCLR RWCLR ELCALL RDBFSETB ERET;*************写显示数据子程序*************WRDT: SETB RSCLR RW ;准备写入数据CLR E ;执行显示命令LCALL RDBF ;判断液晶模块是否忙?SETB ERET;*******************延时子程序*********** DELAY: MOV R6,#00HMOV R7,#00HDELAY1: NOPDJNZ R7,DELAY1DJNZ R6,DELAY1RETTAB1: DB 20H,20H,20H,20H,20H,48H,65H,6CH,6CH,6FH,21H ;Hello!DB 20H,20H,20H,20H,20HTAB2: DB 4EH,69H,63H,65H,20H,74H,6FH,20H,6DH,65H,65H ;Nice to meet youDB 74H,20H,79H,6FH,75HEND。
单片机LCD1602显示字符和数字的汇编程序1,单片机和LCD1602的连线,和程序结果显示如下图:2,LCD第一行显示字符XIAORENGUANG第二行显示RAM中40H到46H中的数字。
程序如下:RS EQU P2.4RW EQU P2.5E EQU P2.6ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HMOV 40H,#01HMOV 41H,#02HMOV 42H,#03HMOV 43H,#04HMOV 44H,#05HMOV 45H,#06HMOV 46H,#07HACALL DD1 ;DD1是LCD初始化MOV DPTR,#TABLE1ACALL DD2;DD2是LCD第一行显示TABLE1ACALL PPP ;PPP是LCD第二行显示RAM中40H到46H中的数据SJMP $DD1: MOV p0,#01H ;清屏CALL ENABLEMOV p0,#38H ;显示功能CALL ENABLEMOV p0,#0FH ;显示开关控制CALL ENABLEMOV p0,#06H ;显示光标右移加1CALL ENABLERETDD2: MOV p0,#80H;第一行的开始位置cALL ENABLECALL WRITE1;到TABLE1取码?RETENABLE: CLR RS ;送命令CLR RWCLR ECALL DELAYSETB ERETWRITE1: MOV R1,#00H ;显示table中的值A1: MOV A,R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1CJNE A,#00H,A1 ;是否到00hRETWRITE2:MOV p0,A ;显示SETB RSCLR RWCLR ECALL DELAYSETB ERET(动态显示频率、幅度核心程序设计思想:可以利用如下程序)MOV40H,#01HMOV41H,#02HMOV42H,#03H)MOV R1,#40H;显示table中的值MOV A,R1;到table取码MOVC A,@A+DPTRMOV P0,AINC R1LJMP LOOPDELAY: PUSH ACCMOV A,R4MOV R4,#05D1: MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1MOV R4,APOP ACCRETPPP: MOV p0,#0C0H;第二行的位置CALL ENABLEMOV DPTR,#TAB;显示CALL WRITE3;到TABLE2 取码RETWRITE3: MOV R1,#40H ;显示table中的值MOV R7,#07HA2: MOV A,@R1;到table取码MOVC A,@A+DPTRcall wRITE2 ;显示到lcdINC R1DJNZ R7,A2 ;是否到00hRETtable1: db"XIAORENGUANG ",00H TAB: DB 30H, 31H, 32H, 33HDB 34H, 35H, 36H, 37HDB 38H, 39HEND。
LCD1602原理与显示程序LCD1602的原理是基于液晶显示技术。
液晶是一种特殊的物质,具有双折射性质,即能将入射的光线分成两束,通过改变液晶分子的排列方式,可以改变其双折射的性质,从而使得光线透过液晶时会发生偏转。
LCD1602利用这一原理,在液晶显示面板上设置了16列和2行的像素点阵,通过控制每个像素点的液晶分子的排列方式,来实现字符的显示。
初始化是指在使用LCD1602之前,需要对其进行一系列的初始化操作,以确保其正常工作。
具体的初始化步骤如下:1.设置通信协议:LCD1602可以通过并行接口和串行接口进行通信,根据具体的接口方式,选择相应的通信协议。
2.设置工作模式:LCD1602有两种工作模式,分别是4位模式和8位模式。
选择适合的工作模式,并设置相应的控制寄存器。
3.设置显示模式:LCD1602可以显示不同的字符集,如英文字符、数字、特殊符号等。
选择合适的字符集,并设置显示模式。
4.清除显示:设置清除显示寄存器,将显示区域清空。
5.光标设置:设置光标位置和显示方式,如光标是否闪烁、光标位置等。
完成初始化后,就可以将要显示的数据写入LCD1602数据写入是指将要显示的字符或数字写入到LCD1602的显示区域。
具体的数据写入步骤如下:1.设置光标位置:根据需要显示的字符位置,设置光标的位置。
2.数据写入:通过通信接口,将要显示的数据写入到LCD1602的数据寄存器。
3.延时:由于LCD1602的刷新速度较慢,需要等待一定的时间,使得数据能够稳定显示在液晶屏上。
4.更新光标位置:根据数据的长度和显示方式,更新光标的位置。
通过以上的步骤,就可以实现LCD1602的显示功能。
总结起来,LCD1602的原理是基于液晶显示技术,通过控制液晶分子排列方式来实现字符的显示。
其显示程序包括初始化和数据写入两个方面的内容,通过设置通信协议、工作模式、显示模式等参数,并将要显示的数据写入到LCD1602的显示区域,来实现字符的显示。
LCD1602液晶显示实验实验报告及程序一、实验目的本次实验的主要目的是熟悉并掌握 LCD1602 液晶显示屏的工作原理和编程方法,能够成功实现字符在液晶屏幕上的显示和控制。
二、实验原理LCD1602 是一种工业字符型液晶,能够显示 16x2 个字符,即每行16 个字符,共 2 行。
它的工作原理是通过控制液晶分子的偏转来实现字符的显示。
LCD1602 有 16 个引脚,主要引脚功能如下:1、 VSS:接地。
2、 VDD:接电源(通常为+5V)。
3、 V0:对比度调整引脚,通过外接电位器来调节屏幕显示的对比度。
4、 RS:寄存器选择引脚,高电平时选择数据寄存器,低电平时选择指令寄存器。
5、 RW:读写选择引脚,高电平时进行读操作,低电平时进行写操作。
6、 E:使能引脚,下降沿触发。
7、 D0 D7:数据引脚,用于传输数据和指令。
LCD1602 的指令集包括清屏、归位、输入方式设置、显示开关控制、光标或显示移位、功能设置、CGRAM 和 DDRAM 地址设置以及读忙标志和地址等。
三、实验设备与材料1、单片机开发板2、 LCD1602 液晶显示屏3、杜邦线若干4、电脑四、实验步骤1、硬件连接将 LCD1602 的 VSS 引脚接地。
将 VDD 引脚接+5V 电源。
将 V0 引脚通过一个 10K 的电位器接地,用于调节对比度。
将 RS、RW、E 引脚分别连接到单片机的三个 I/O 口。
将 D0 D7 引脚连接到单片机的 8 个 I/O 口。
2、软件编程包含必要的头文件。
定义与 LCD1602 连接的 I/O 口。
编写初始化函数,包括设置显示模式、清屏、输入方式等。
编写写指令函数和写数据函数,用于向LCD1602 发送指令和数据。
编写显示字符串函数,实现字符在屏幕上的显示。
3、编译下载程序使用编译软件对编写的程序进行编译,生成可执行文件。
将可执行文件下载到单片机开发板中。
4、观察实验结果给开发板上电,观察 LCD1602 液晶显示屏上是否正确显示预设的字符。
STM32的LCD1602显⽰程序STM32的LCD1602显⽰程序以下为课设期间为1602显⽰屏驱动写的stm32的程序,其中参考了许多⼤佬的例⼦程序设计:硬件原理:D0-D7⽤的是PD0-PD7,RS为PB10,E为PB11,RW为PB12,使⽤的板⼦是STM32F103VET6下⾯是我的程序,只完成了基础功能,并没有⾃定义字模部分的代码lcd.h#ifndef __LCD_H#define __LCD_H#include "stm32f10x.h"/////////////////////////////////////////////////////////#define D0_1 GPIO_SetBits(GPIOD,GPIO_Pin_0)#define D0_0 GPIO_ResetBits(GPIOD,GPIO_Pin_0)#define D1_1 GPIO_SetBits(GPIOD,GPIO_Pin_1)#define D1_0 GPIO_ResetBits(GPIOD,GPIO_Pin_1)#define D2_1 GPIO_SetBits(GPIOD,GPIO_Pin_2)#define D2_0 GPIO_ResetBits(GPIOD,GPIO_Pin_2)#define D3_1 GPIO_SetBits(GPIOD,GPIO_Pin_3)#define D3_0 GPIO_ResetBits(GPIOD,GPIO_Pin_3)#define D4_1 GPIO_SetBits(GPIOD,GPIO_Pin_4)#define D4_0 GPIO_ResetBits(GPIOD,GPIO_Pin_4)#define D5_1 GPIO_SetBits(GPIOD,GPIO_Pin_5)#define D5_0 GPIO_ResetBits(GPIOD,GPIO_Pin_5)#define D6_1 GPIO_SetBits(GPIOD,GPIO_Pin_6)#define D6_0 GPIO_ResetBits(GPIOD,GPIO_Pin_6)#define D7_1 GPIO_SetBits(GPIOD,GPIO_Pin_7)#define D7_0 GPIO_ResetBits(GPIOD,GPIO_Pin_7)#define RS_1 GPIO_SetBits(GPIOB,GPIO_Pin_10)#define RS_0 GPIO_ResetBits(GPIOB,GPIO_Pin_10)#define RW_1 GPIO_SetBits(GPIOB,GPIO_Pin_12)#define RW_0 GPIO_ResetBits(GPIOB,GPIO_Pin_12)#define E_1 GPIO_SetBits(GPIOB,GPIO_Pin_11)#define E_0 GPIO_ResetBits(GPIOB,GPIO_Pin_11)/////////////////////////////////////////////////////////void LCD_Init(void);//初始化void LCD_Clear(void);//清除显⽰void LCD_CursorReset(void);//光标返回void LCD_SetInput(u16,u16);//置输⼊模式void LCD_Display(u16,u16,u16);//显⽰开关控制void LCD_COD(u16,u16);//光标或显⽰移动指令void LCD_Mode(u16,u16,u16);//⼯作⽅式设置void LCD_CGRAM_Addr(u8);//设置CGRAN地址,除置位位以外共六位void LCD_DDRAM_Addr(u8);//设置DDRAM地址,除置位位以外共七位void LCD_RB(void);//当1602处于忙状态时,不接受指令,当不忙时,接受指令void LCD_Write(u8);//写⼊数据void LCD_Read(void);//读取数据void LCD_WriteStr(u8*,int);//写⼊字符串#endiflcd.c#include "lcd.h"#include "stm32f10x_gpio.h"void LCD_Init(void){GPIO_InitTypeDef GPIO_LCDStr;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_LCDStr.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_LCDStr.GPIO_Speed=GPIO_Speed_50MHz;GPIO_LCDStr.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_Init(GPIOD,&GPIO_LCDStr);GPIO_LCDStr.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_10;GPIO_Init(GPIOB,&GPIO_LCDStr);}//////////////////////////////////////////////////////////////////////////////void LCD_Clear(void){E_0;LCD_RB();RS_0;RW_0;GPIO_Write(GPIOD,0x01);E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////void LCD_CursorReset(void){E_0;LCD_RB();RS_0;RW_0;GPIO_Write(GPIOD,0x02);E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////////void LCD_SetInput(u16 ID,u16 S){E_0;LCD_RB();RS_0;RW_0;D7_0;D6_0;D5_0;D4_0;D3_0;D2_1;if(ID==1)/*⾼电平光标右移,低电平左移*/D1_1;else if(ID==0)D1_0;if(S==1)/*屏幕上所有的⽂字是否左移或右移,⾼电平有效,低电平⽆效*/ D0_1;else if(S==0)D0_0;E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////////////void LCD_Display(u16 D,u16 C,u16 B){E_0;LCD_RB();RS_0;RW_0;D7_0;D6_0;D5_0;D4_0;D3_1;if(D==1)//⾼电平开,低电平关D2_1;else if(D==0)D2_0;if(C==1)//⾼电平有光标,低电平⽆光标D1_1;else if(C==0)D1_0;if(B==1)//光标是否闪烁,⾼电平闪烁,低电平⽆D0_1;else if(B==0)D0_0;E_1;E_0;}////////////////////////////////////////////////////////////////////////////////////////////void LCD_COD(u16 SC,u16 RL){E_0;LCD_RB();RS_0;RW_0;D7_0;D6_0;D5_0;D4_1;D1_1;D0_1;if(SC==1)//⾼电平显⽰移动的⽂字,低电平移动坐标D3_1;else if(SC==0)D3_0;if(RL==1)//⾼电平右移,低电平左移D2_1;else if(RL==0)D2_0;E_1;E_0;}////////////////////////////////////////////////////////////////////////////////////////////void LCD_Mode(u16 DL,u16 N,u16 F){E_0;LCD_RB();E_1;RS_0;RW_0;D7_0;D6_0;D5_1;D1_1;D0_1;if(DL==1)//⾼电平⼋位数据接⼝,低电平四位数据接⼝D4_1;else if(DL==0)D4_0;if(N==1)//⾼电平两⾏显⽰,低电平⼀⾏显⽰D3_1;else if(N==0)D3_0;if(F==1)//⾼电平5x10点阵,低电平5x8点阵D2_1;else if(F==0)D2_0;E_0;}////////////////////////////////////////////////////////////////////////////////////////void LCD_CGRAM_Addr(u8 addr)//{E_0;LCD_RB();RS_0;RW_0;D6_1;E_1;E_0;}//////////////////////////////////////////////////////////////////////////////void LCD_DDRAM_Addr(u8 addr)//{E_0;LCD_RB();RS_0;RW_0;GPIO_Write(GPIOD,0x0000);//清空地址GPIO_Write(GPIOD,addr);E_1;E_0;}//////////////////////////////////////////////////////////////////////////////////void LCD_RB(void)//{GPIO_InitTypeDef pp;RS_0;RW_1;pp.GPIO_Mode=GPIO_Mode_IN_FLOATING;pp.GPIO_Speed=GPIO_Speed_50MHz;pp.GPIO_Pin=GPIO_Pin_7;GPIO_Init(GPIOD,&pp);//将端⼝设为输⼊E_1;while(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_7));//若忙信号存在,则⼀直循环,直⾄忙信号结束E_0;pp.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; pp.GPIO_Mode=GPIO_Mode_Out_PP;pp.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&pp);//将端⼝重新设为输出}//////////////////////////////////////////////////////////////////////////////////////////void LCD_Write(u8 data)//{LCD_RB();RS_1;RW_0;E_1;GPIO_Write(GPIOD,data);E_0;}////////////////////////////////////////////////////////////////////////////void LCD_Read(void)//{LCD_RB();RS_1;RW_1;E_1;E_0;}////////////////////////////////////////////////////////////////////////////void LCD_WriteStr(u8 *str,int length)//{int i=0;for(i=0;i<length;i++){if(i<=15){LCD_DDRAM_Addr(0x80+i);LCD_Write(str[i]);}else{LCD_DDRAM_Addr(0xc0+i-16);LCD_Write(str[i]);}}}main.c#include "lcd.h"#include "string.h"int main(){u8 strMCU[]=" **** YOU 1602! TEST TEST "; LCD_Init();LCD_Clear();LCD_SetInput(1,0);LCD_Display(1,0,0);LCD_Mode(1,1,0);LCD_WriteStr(strMCU,strlen(strMCU));。
1602程序
简介
1602程序是一种用于控制1602液晶屏幕的程序。
1602
液晶屏幕是一种常见的单色液晶显示屏,广泛应用于各种电子设备中。
这个程序能够实现在1602液晶屏幕上显示文本、数字和特殊字符等功能。
功能
1602程序具有以下功能:
1.文本显示:程序可以在1602液晶屏幕上显示自定
义的文本信息,可以显示多行文本,并且支持中英文字符。
2.数字显示:程序可以在1602液晶屏幕上显示数字,
并支持数字的滚动显示功能。
3.特殊字符显示:程序支持在1602液晶屏幕上显示
特殊字符,比如箭头、心形等。
使用方法
用户可以按照以下步骤来使用1602程序:
1.连接1602液晶屏幕:首先,将1602液晶屏幕与
单片机或其他控制器正确连接。
确保数据线和控制线的接口连接正确。
2.导入1602程序:将1602程序的代码导入到单片
机或其他控制器中,例如Arduino等。
3.设置程序参数:根据实际需求,在程序中设置相应
参数,例如要显示的文本内容、数字等。
4.运行程序:将控制器与电源连接,运行程序,即可
在1602液晶屏幕上看到相应的显示效果。
示例代码
下面是一个示例代码,演示了如何使用1602程序显示文本和数字:
```markdown #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() { lcd.begin(16, 2); lcd.print(。