📄 lcd.c
字号:
//////////////////////////////////////////////////////////////////////////////
//程序方式的串口,用来驱动LCD,IOB15为数据,IOB14为同步时钟。
//一个字节分为两次传输,先传输起始字节,5个1为开始标志,其后为RW,RS
//接口函数有
//lcd_init_usual(),作用是常用初始化液晶,无入口,无出口中
//chinese_series();作用是输出汉字串16x16,参量为字串的指针
//code_write(); 参量为命令字。
//data_write(); 参量为要写入的数或字母16x8,用ASC||码做参数。
//================================================
//用户指令集:
//清除显示:01
//地址归零:02
//点设定: 04 整体显示不移动,光标左移,AC自动减1
// 05 整体显示不移动,光标右移,AC自动加1
// 06 写入时整体显示向右移动,
// 07 整体显示向左移动。
//显示状态:08 关闭整体显示,关闭光标,光标位置不反白闪烁
// 0C 开启整体显示,关闭光标,光标位置不反白闪烁
// 0D 开启整体显示,关闭光标,光标位置反白闪烁
// 0E 开启整体显示,开启光标,光标位置不反白闪烁
// 0F 开启整体显示,开启光标,光标位置反白闪烁
//光标或显示移位控制:
// 10 光标左移,AC减1
// 14 光标右移,AC加1
// 18 整体显示,向左移动,光标跟随,AC不变
// 1C 整体显示,向右移动,光标跟随,AC 不变
//功能设定:20 4 BIT 控制口,基本指令集
// 24 4 BIT 控制口,扩充指令集
// 30 8 BIT 控制口,基本指令集
// 34 8 BIT 控制口,扩充指
//////////////////////////////////////////////////////////////
#include "SPCE061v004.h"
#define code_start 0xf800
#define data_start 0xfa00
////////////////////////////////////////////////
///命令区定义;
//设定显示地址;
#define row1_line1 0x0080
#define row1_line2 0x0081
#define row1_line3 0x0082
#define row1_line4 0x0083
#define row1_line5 0x0084
#define row1_line6 0x0085
#define row1_line7 0x0086
#define row1_line8 0x0087
#define row2_line1 0x0090
#define row2_line2 0x0091
#define row2_line3 0x0092
#define row2_line4 0x0093
#define row2_line5 0x0094
#define row2_line6 0x0095
#define row2_line7 0x0096
#define row2_line8 0x0097
#define row3_line1 0x0088
#define row3_line2 0x0089
#define row3_line3 0x008a
#define row3_line4 0x008b
#define row3_line5 0x008c
#define row3_line6 0x008d
#define row3_line7 0x008e
#define row3_line8 0x008f
#define row4_line1 0x0098
#define row4_line2 0x0099
#define row4_line3 0x009a
#define row4_line4 0x009b
#define row4_line5 0x009c
#define row4_line6 0x009d
#define row4_line7 0x009e
#define row4_line8 0x009f
//状态设定
#define lcd_clear 0x0001
#define lcd_addres_0 0x0002;
//////////////////////////////////////
//public lcd_init_usual();
//public chinese_series();
//public code_write();
//public data_write();
//public set_position();
//============================================
//******************************************************************************
extern unsigned int msec ,sec ,min,hor; //毫秒,秒,分,小时变量
//*******************************************************************************
int lcd_init_usual()
{
init_iob_out();
code_write(1);
code_write(0x000e);
code_write(0x0006);
}
//===========================================
void init_iob_out()
{
*P_IOB_Dir|=0xc000;
*P_IOB_Attrib|=0xc000;
*P_IOB_Data&=0x3fff;
}
//===========================================
int set_position( position)
int position;
{
code_write(position);
}
//=========================================
int chinese_series(series)
int *series;
{
for(series;*series!=0;series++)
data_write(*series);
}
//========================================
int code_write(code)
int code;
{
int i,j;
code=code<<8;
i=j=code;
i&=0xf000;
j=j<<4;
j&=0xf000;
byte_write(code_start);
byte_write(code_start);
byte_write(i);
byte_write(j);
}
//================================
int data_write(data)
int data;
{
int i,j;
data=data<<8;
i=j=data;
i&=0xf000;
j=j<<4;
j&=0xf000;
byte_write(data_start); //启始字符
byte_write(data_start);
byte_write(i);
byte_write(j);
}
///////////////////////////////////////
int byte_write(byte)
int byte;
{
int x=byte,i,r;
for(i=0;i<=7;i++)
{
r=*P_IOB_Data;
r&=0x3fff; // 最高2位B14,B15清零
x=byte;
x&=0x8000;
r|=x;
*P_IOB_Data=r;
*P_IOB_Data|=0x4000;
byte=byte<<1;
}
}
//////////////////////////////////////////////////////
void lcd_display(void)
{
set_position(0x0088);
data_write(((hor&0xf0)>>4)+0x30); //显示小时
data_write((hor%10)+0x30);
set_position(0x008a);
data_write((min/10)+0x30); //显示分钟
data_write((min%10)+0x30);
set_position(0x008c);
data_write((sec/10)+0x30); //显示秒
data_write((sec%10)+0x30);
set_position(0x008e);
data_write((msec/10)+0x30); //显示毫秒
data_write((msec%10)+0x30);
//LCD显示
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -