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显示,用4位总线显示数字,字符,自定义字符,字符串,光标
*******************************************/

#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_RS = 0;
   LCD1602_RW = 0;
   LCD1602_DB0_DB7 = (LCD1602_command/16)<<4; //把结果左移4位,和*16效果一样
   LCD1602_E = 1;
   DELAY_MS(5);  // 修改延时,改变显示速度
   LCD1602_E = 0;
   LCD1602_DB0_DB7 = (LCD1602_command%16)<<4; //把结果左移4位,和*16效果一样
   LCD1602_E = 1;
   DELAY_MS(5);  // 修改延时,改变显示速度
   LCD1602_E = 0;
}

// 写数据程序 //
void LCD1602_WriteData(uint8 LCD1602_data){ 
   LCD1602_TestBusy();
   LCD1602_RS = 1;
   LCD1602_RW = 0;
   LCD1602_DB0_DB7 = (LCD1602_data/16)<<4;//把结果左移4位,和*16效果一样
   LCD1602_E = 1;
   DELAY_MS(5);  // 修改延时,改变显示速度
   LCD1602_E = 0;
   LCD1602_DB0_DB7 = (LCD1602_data%16)<<4;//把结果左移4位,和*16效果一样
   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_set42); //* 显示模式设置:4位数据显示2行,
   LCD1602_WriteCMD(CMD_set42); //* 必须再运行一次!不然就出错
   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 显示数字,字符,自定义字符,字符串,光标

时间: 10-01

LCD1602显示,用4位总线显示数字,字符,自定义字符,字符串,光标的相关文章

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.b

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

;统计字符串中大写字母.小写字母.数字.其他字符的个数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

使用位运算显示二进制数

最近学习<C Primer Plus>位操作部分,结合书上的编程实例来巩固这部分知识点. 1 //使用位运算显示二进制数 2 #include<stdio.h> 3 char *itobs( int, char*); //integer to binary string 4 void show_bstr( const char*); 5 main() 6 { 7 char bin_str[8 * sizeof(int) +1]; 8 int number; 9 while(scan

shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;

[[email protected] wyb]# cat tishiuser.sh #!/bin/bash #提示用户输入一个用户名,如果存在:显示用户UID和SHELL信息:否则, #则显示无此用户:显示完成之后,提示用户再次输入:如果是quit则退出; echo 'Input `quit` to quit' while : do read -p "Please Input a user:" choice [ -z $choice ] &&continue [[ &q

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

1 package digitAddTogither; 2 3 /** 4 * Created by ZKY on 2017-08-15 01:00. 5 * 给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数. 6 * 样例 7 * 给出 num = 38. 8 * 相加的过程如下:3 + 8 = 11, 9 * 1 + 1 = 2. 10 * 因为 2 只剩下一个数字,所以返回 2. 11 */ 12 public class DoMain 13 { 14 /**

单行显示省略号和多行显示省略号

一.单行显示省略号 width: 239px;/*要显示文字的宽度*/ overflow:hidden; /*超出的部分隐藏起来.*/ white-space:nowrap;/*不显示的地方用省略号...代替*/ text-overflow:ellipsis;/* 支持 IE */ 二.多行显示省略号 overflow:hidden; /*超出的部分隐藏起来.*/ text-overflow:ellipsis;/* 支持 IE */ display:-webkit-box; //将对象作为弹性伸

echo显示闪烁,screen用法及显示时间的前后.

我们这门今天学习的一些主要内容 标准的命令的格式 命令(COMMAND)  [选项(OPTIONS)-.[参数(ARGUMENTS-)] 选项:启用或者关闭命令的某个或某些功能 参数:命令作用的对象,比如文件名,用户名等 首先我们来统计一下学习到的linux的一些基础的命令 who  查询当前用户 hostname 显示主机名 lsb_release –a 显示系统版本 LSB(linux stardard base):linux 标准库 gedit 图形工具只能用于图形界面 nano 低级文本

shell 密码输入不显示,Shell输出内容不显示密码,Shell实现有密码自动登录sshpass 应用实践

在很多实践项目中,我们经常会通过SSH来进行认证,如通过SSH拷贝文件,虽然我们可以使用公钥与私钥实现ssh 无密码登录,在不同的服务器上又需要配对相应的密钥,切换用户麻烦等问题,在一些需要交互但会涉及到批量处理的时候,通过shell 密码输入不显示,Shell输出内容不显示密码,Shell实现有密码自动登录会大大的提高工作效率 #! /bin/bash ############################################## #Author:                

自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示分割线.

一, 经历 1> 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示cell 下面的分割线. 2> 尝试使用表格的separatorStyle属性,尝试失败.尝试使用 grouped 类型的表格,设置 headerview 和 footview 的代理方法或tableFooterView属性都不生效. 3> 同事定位到问题应该出在,已经设置过separatorStyle属性,接着又被系统的某些属性覆盖了,而且没有数据的单元格被系统自动创建了. 4> 同