LCD1602 显示数字,字符,自定义字符,字符串,光标

/*******************************************
程序名:    1602液晶屏时钟程序
编写时间:  2015年10月4日
硬件支持:  LCD1602液晶屏  STC12C4052AD 外部12MHZ晶振 
接线定义:  DB0_DB7 --> P1^0 --P1^7
						RS   = P3 ^ 2;
					        RW   = P3 ^ 3;
 						E    = P3 ^ 4;
 
功能:测试LCD1602的显示,显示时间,http://990487026.blog.51cto.com/ ,Welcome to linux Debian VS Redhat 
*******************************************/

#include <AT89X52.h>      // 包含头文件 //
typedef unsigned char      uint8;   // 无符号8位整型变量 //

#define  LCD1602_DB0_DB7  P1   // 定义LCD1602的数据总线
sbit LCD1602_RS   = P3 ^ 2;     // 定义LCD1602的RS控制线
sbit LCD1602_RW   = P3 ^ 3;     // 定义LCD1602的RW控制线
sbit LCD1602_E    = P3 ^ 4;     // 定义LCD1602的E控制线
sbit LCD1602_Busy = P1 ^ 7;     // 定义LCD1602的测忙线(与LCD1602_DB0_DB7关联)

// 定义LCM2402指令集 // (详细请见技术手册)
#define         CMD_clear         0x01             // 清除屏幕
#define         CMD_back          0x02             // DDRAM回零位
#define         CMD_dec1          0x04             // 读入后AC(指针)减1,向左写
#define         CMD_add1          0x06             // 读入后AC(指针)加1,向右写
#define         CMD_dis_gb1     0x0f             // 开显示_开光标_开光标闪烁
#define         CMD_dis_gb2     0x0e             // 开显示_开光标_关光标闪烁
#define         CMD_dis_gb3     0x0c             // 开显示_关光标_关光标闪烁
#define         CMD_OFF_dis     0x08             // 关显示_关光标_关光标闪烁
#define         CMD_set82       0x38             // 8位总线_2行显示
#define         CMD_set81       0x30             // 8位总线_1行显示(上边行)
#define         CMD_set42       0x28             // 4位总线_2行显示
#define         CMD_set41       0x20             // 4位总线_1行显示(上边行)
#define         lin_1           0x80             // 4位总线_1行显示(上边行)
#define         lin_2           0xc0             // 4位总线_1行显示(上边行)

void DELAY_MS (unsigned int a) {
    unsigned int i;
    while ( --a != 0 )   {
  for (i=0;i<=600;i++);
    }
}

// LCD1602测忙,若LCD1602处于忙状态,本函数将等待至非忙状态 //
void LCD1602_TestBusy(void){
    LCD1602_DB0_DB7 = 0xff;  //设备读状态
    LCD1602_RS = 0;
    LCD1602_RW = 1;
    LCD1602_E = 1;
    while(LCD1602_Busy);  //等待LCM不忙
    LCD1602_E = 0;    
}

// 写指令程序 //
void LCD1602_WriteCMD(uint8 LCD1602_command) { 
   LCD1602_TestBusy();
   LCD1602_DB0_DB7 = LCD1602_command;
   LCD1602_RS = 0;
   LCD1602_RW = 0;
   LCD1602_E = 1;
   DELAY_MS(5);  // 修改延时,改变显示速度
   LCD1602_E = 0;
}

// 写数据程序 //
void LCD1602_WriteData(uint8 LCD1602_data){ 
   LCD1602_TestBusy();
   LCD1602_DB0_DB7 = LCD1602_data;
   LCD1602_RS = 1;
   LCD1602_RW = 0;
   LCD1602_E = 1;
   DELAY_MS(5);  // 修改延时,改变显示速度
   LCD1602_E = 0;
}
 

// 打印字符串程序   (本函数调用指针函数)长度48字符之内 
void print(uint8 a,uint8 *str){
  LCD1602_WriteCMD(a | 0x80);
  while(*str != ‘\0‘){
  LCD1602_WriteData(*str++);
 }
 *str = 0;
}

// 打印单字符程序 // 
void print2(uint8 a,uint8 t){
  LCD1602_WriteCMD(a | 0x80);
  LCD1602_WriteData(t);
}

// 自定义字符 一共可写入16个自字义字符,写入后可用其CGRAM代码直接提取显示。
uint8 code Xword[]={
    0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,  //℃,代码 0x00
    0x00,0x00,0x00,0x00,0xff,0x00,0x00,0x00,  //一,代码 0x01
    0x00,0x00,0x00,0x0e,0x00,0xff,0x00,0x00,  //二,代码 0x02
    0x00,0x00,0xff,0x00,0x0e,0x00,0xff,0x00,  //三,代码 0x03
    0x00,0x00,0xff,0xf5,0xfb,0xf1,0xff,0x00,  //四,代码 0x04
    0x00,0xfe,0x08,0xfe,0x0a,0x0a,0xff,0x00,  //五,代码 0x05
    0x00,0x04,0x00,0xff,0x00,0x0a,0x11,0x00,  //六,代码 0x06
    0x00,0x1f,0x11,0x1f,0x11,0x11,0x1f,0x00,  //日,代码 0x07
};
void CgramWrite(void) { // 装入CGRAM //
    uint8 i;
    LCD1602_WriteCMD(0x06);   // CGRAM地址自动加1
    LCD1602_WriteCMD(0x40);   // CGRAM地址设为00处
    for(i=0;i<64;i++) {
    LCD1602_WriteData(Xword[i]);// 按数组写入数据
    }
}

// LCD1602初始化 //(使用者可自定义,加 * 号程序行必须保留但可修改)
void LCD1602_Init(void){
   LCD1602_WriteCMD(CMD_set82); //* 显示模式设置:显示2行,每个字符为5*7个像素,CMD_set81就是一行
   LCD1602_WriteCMD(CMD_clear); //  显示清屏
   LCD1602_WriteCMD(CMD_back);  //* 数据指针指向第1行第1个字符位置
   LCD1602_WriteCMD(CMD_add1);  //  显示光标移动设置:文字不动,光标右移
   LCD1602_WriteCMD(CMD_dis_gb1);  //  显示开及光标设置:显示开,光标开,闪烁开
   CgramWrite();     //  向CGRAM写入自定义字符
}

void main (void){
  LCD1602_Init();//LCD1602初始化   
  while(1){ 
  print2(0x80,1+0x30);   // 在第1行第1位显示数字1
  print2(0x40,5+0x30);   // 在第1行第1位显示数字2
  print2(0x85,0x05);     // 在第1行第5位显示自定义字符
  print2(0x88,0xE4);     // 在第1行第9位 ASCII 中的upeer 4bit 1110  lower 4bit 0100对应的 μ 
  DELAY_MS(2000);  // 打开光标显示,闪烁,在μ后面就会显示一个跳动的光标
  print2(0x81,‘D‘);     // 在第1行第5位显示自定义字符
  print (0x42,"www.51cto.com"); //在第2行第一位处从左向右打印"blog.51cto.com"字符串
  print (0x8e,"hi"); //在第1行第15位处从左向右打印"hi"字符串

  }
 }

 //LCD1602 显示数字,字符,自定义字符,字符串,光标

时间: 2024-10-13 22:27:59

LCD1602 显示数字,字符,自定义字符,字符串,光标的相关文章

LCD1602显示,用4位总线显示数字,字符,自定义字符,字符串,光标

/******************************************* 程序名:   1602液晶屏时钟程序 编写时间: 2015年10月4日 硬件支持: LCD1602液晶屏  STC12C4052AD 外部12MHZ晶振  接线定义: DB7 --> P1^7 DB6 --> P1^6 DB5 --> P1^5 DB4 --> P1^5 RS   = P3 ^ 2;   RW   = P3 ^ 3;   E    = P3 ^ 4;   功能:LCD1602显

汇编语言——统计一个字符串中的大写字母、小写字母、数字和其他字符的个数,并显示

;统计字符串中大写字母.小写字母.数字.其他字符的个数DATAS SEGMENT buf db '12ADdf#gh592HKL*','$' tp1 db 0;大写字母个数 tp2 db 0;小写字母个数 tp3 db 0;数字的个数 tp4 db 0;其他字符的个数 str1 db 'the number of big is:','$' str2 db 'the number of small is:','$' str3 db 'the number of number is:','$' st

利用列表统计字符串大小写字母,数字和其他字符

你好,我叫布小不 储备知识: 1.Python元组,列表的创建,添加与转化等 2.函数的自定义与调用 题目: 请用户输入一个字符串,统计出其中的大写字母,小写字母,数字和其他字符的个数,返回结果以元组的形式输出 例: 输入:E3r4t5y6~. 输出:字符串中大写字母有1个,小写字母有3个,数字有4个,其他字符有2个 (1, 3, 4, 2) 答: def func1(s): upCount, lowCount, digCount, otherCount = 0, 0, 0, 0 aList =

php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。

如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码. $str="asdfgfdas323344##$\$fdsdfg*$**$*$**$$443563536254fas";//任意长度字符串 //解法一(最快速的解法,但是基本功要扎实) $arr=str_split($str); $arr=array_count_values($arr); arsort($arr); print_r($arr); //解法二(对逻辑能力有一定要求)

从终端获取一个字符串,分别统计其中大写字母、小写字母、数字及其它字符的个数。

//从终端获取一个字符串,分别统计其中大写字母.小写字母.数字及其它字符的个数. #include<stdio.h> #include<stdio.h> int main(int argc,const char *argv[]) { char str[100]; char ch; int len,i; int letter = 0, number = 0, space = 0, other = 0; gets(str); for(i=0;i<strlen(str);i++)

统计一个字符串中英文字母、空格、数字和其它字符的个数

1 package demo; 2 import java.util.Scanner; 3 /** 4 * 统计一个字符串中英文字母.空格.数字和其它字符的个数 5 */ 6 public class Statistics1 { 7 public static void main(String[]args){ 8 int i; 9 int LetterCount = 0; 10 int SpaceCount = 0; 11 int NumberCount = 0; 12 int OtherCou

Java学习(6):输入一串字符串,分别统计出其中的中英文字母,空格,数字和其他字符的个数

1 import java.util.Scanner; 2 3 /** 4 * 输入一行字符,分别统计出其中的中英文字母,空格,数字和其他字符的个数 5 * 6 * @author xcx 7 * @time 2017年7月22日上午9:08:16 8 */ 9 public class Practice7 { 10 11 public static void main(String[] args) { 12 System.out.println("请输入一串字符串,我们将统计出其中的中英文字母

java 每日习题(七)统计字符串中字母、空格、数字和其它字符的个数

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 先把String转化成array,再通过Character中的几个方法对每个char进行判断. 下面是Character类的介绍: Character 类在对象中包装一个基本类型 char 的值.Character 类型的对象包含类型为 char 的单个字段. 此外,该类提供了几种方法,以确定字符的类别(小写字母,数字,等等),并将字符从大写转换成小写,反之亦然. package everyDay; import java

C++基础之字符数组和字符串

无意中发现了一个非常有意思的技术类型小品文系列,通过大牛指导菜鸟的方式,解说讲C++知识,有的非常基础却是开发中easy忽略的地方. [Elminster的专栏] http://blog.csdn.net/Elminster/article/contents [Solmyr 的小品文系列之中的一个:字符串放在哪里? ] http://blog.csdn.net/elminster/article/details/9730 转帖至此,给出链接,原文就不贴了,总结并扩展一下方便以后回想. 字符数组(