📄 sms1907.h
字号:
/*=====================================================================
本程序适用长沙太阳人生产的 SMS1907 LCD显示屏
可适用于同系列的 三线式串行接 只需修改对应的RAM
STC5408AD 11.0592M
2008.06.18
======================================================================*/
#include <intrins.h>
#include <5410ad.h>
#define INT8U unsigned char
#define INT16U unsigned int
sbit DI = P3^3; //数据
sbit CLK = P3^4; //时钟
sbit CS2 = P3^5; //选区
sbit CS1 = P3^7; //选区
#define CMDOFF 0 //控制器掉电(控制字)
#define CMDON 1 //控制器上电(控制字)
#define CMDLCDOFF 2 //控制器液晶关闭(控制字)
#define CMDLCDON 3 //控制器液晶显示(控制字)
#define CMDB3C4 0x29 //控制器液晶模式设置(控制字)
/*============LCD屏RAM说明
// 0 1 2 3 4 5 6 7 8 9
INT8U lcddata[10] = {0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B};
lcdwd(0x18,0,1); //左(1过压2欠压4报警开8报警关)右(1A过流2B过流4C过流8漏电)
lcdwd(0x7D,2,1); //0
一 lcdwd(0x60,4,1); //1 8 为漏电开
lcdwd(0x3E,6,1); //2 8 为漏电关
选 lcdwd(0x7A,8,1); //3 // 5
lcdwd(0x63,10,1); //4 // --
lcdwd(0x5B,12,1); //5 8 为年 // 1|2 |6
区 lcdwd(0x5F,14,1); //6 // --
lcdwd(0x70,16,1); //7 8 为月 // 3|4 |7
lcdwd(0x7F,18,1); //8 // --
lcdwd(0x7B,20,1); //9 8 为日 201818
lcdwd(0xFF,0,2); // 8为200A ■■■
lcdwd(0x00,2,2); // 8为300A ■■■
二 lcdwd(0x00,4,2); // 8为500A ■■■
lcdwd(0x00,6,2); // 8为字符C ■■■20
lcdwd(0x00,8,2); // 8为字符B ■■■
选 lcdwd(0x00,10,2); // 8为字符A ■■■
lcdwd(0x00,12,2); // ■■■
lcdwd(0x80,14,2); // ■■■
区 lcdwd(0x00,16,2); // 2222
lcdwd(0x00,18,2); // 24■■■
lcdwd(0x00,20,2); // 24■■■
lcdwd(0x00,22,2); // 14高16高
lcdwd(0xF0,24,2); //低四位无用
*/
/*************************************************
Function: void lcdwc(INT8U cmd) // 函数名称
Description: 向LCD屏写入命令 // 函数功能、性能等的描述
Calls: // 被本函数调用的函数清单
Called By: // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
要写入的命令
Output: // 对输出参数的说明。
Return: // 函数返回值的说明
Others: // 其它说明
*************************************************/
void lcdwc(INT8U cmd)
{
INT8U i=0;
CS1 = 1; CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
CS1 = 0; CS2 = 0; _nop_(); _nop_(); _nop_(); _nop_(); //打开选区
DI = 1; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
DI = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
for (i=8; i>0; i--){ // 一次写一位,写入命令
DI = cmd&0x80; _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
cmd=cmd*2;
}
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_(); //空脉冲
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
CS1 = 1; CS2 = 1; //关闭选区
}
/*************************************************
Function: void lcdwd(INT8U udata,INT8U addr,INT8U area) // 函数名称
Description: LCD屏写入一位要显示的数据 // 函数功能、性能等的描述
Calls: // 被本函数调用的函数清单
Called By: // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
INT8U udata 要显示的数据
INT8U addr 要显示数据的地址
INT8U area 要显示的选区1或非1
Output: // 对输出参数的说明。
Return: // 函数返回值的说明
Others: // 其它说明
****************写单个字符*********************************/
void lcdwd(INT8U udata,INT8U addr,INT8U area)
{
INT8U i=0;
if(1==area){ //选中一选区
CS1 = 1; _nop_(); _nop_(); _nop_(); _nop_();
CS1 = 0; _nop_(); _nop_(); _nop_(); _nop_();
}
else{ //选中二选区
CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
CS2 = 0; _nop_(); _nop_(); _nop_(); _nop_();
}
DI = 1; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
DI = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
DI = 1; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
for (i=6; i>0; i--){ // 一次写一位,写入地址
DI = addr & 0x20; _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
addr = addr*2;
}
for (i=8; i>0; i--){ // 一次写一位,写入数据
DI = udata & 0x80; _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
udata = udata*2;
}
if(1==area){ //关闭选区
CS1 = 1; _nop_(); _nop_(); _nop_(); _nop_();
}
else{
CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
}
}
/*=====================================================================
Function: void lcd(INT8U *udata,INT8U area) // 函数名称
Description: LCD屏显示 // 函数功能、性能等的描述
Calls: // 被本函数调用的函数清单
Called By: // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
*udata 要显示字符串的指针 area 要显示的选区(1或2)
两次调用本函数显示不同选区,中断要有延时
Output: // 对输出参数的说明。
Return: // 函数返回值的说明
Others: // 其它说明
=====================================================================*/
void lcd(INT8U *udata,INT8U area)
{
INT8U i = 0;
INT8U j = 0;
INT8U temp = 0;
if(1==area){ //area为1选中一选区
j = 11;
CS1 = 1; _nop_(); _nop_(); _nop_(); _nop_();
CS1 = 0; _nop_(); _nop_(); _nop_(); _nop_();
}
else{
j = 13; //否则area为2选中二选区
CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
CS2 = 0; _nop_(); _nop_(); _nop_(); _nop_();
}
DI = 1; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
DI = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
DI = 1; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
for (i=6; i>0; i--){ // 一次写一位,写入地址
DI = temp & 0x20; _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
temp = temp*2;
}
for(;j>0;j--){ //写入数据串
temp = *udata++;
for (i=8; i>0; i--){ // 一次写一位
DI = temp & 0x80; _nop_(); _nop_(); _nop_();
CLK = 0; _nop_(); _nop_(); _nop_(); _nop_();
CLK = 1; _nop_(); _nop_(); _nop_(); _nop_();
temp = temp*2;
}
}
if(1==area){
CS1 = 1; _nop_(); _nop_(); _nop_(); _nop_(); //关闭选区
}
else{
CS2 = 1; _nop_(); _nop_(); _nop_(); _nop_();
}
}
/*************************************************
Function: void lcdreset(void) // 函数名称
Description: LCD屏初始化 // 函数功能、性能等的描述
Calls: // 被本函数调用的函数清单
void lcdwc(INT8U cmd)
Called By: // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: // 输入参数说明,包括每个参数的作用、取值说明及参数间关系。
一个字符
Output: // 对输出参数的说明。
Return: // 函数返回值的说明
Others: // 其它说明
*********************LCD初始化****************************/
void lcdreset(void)
{
lcdwc(CMDOFF);
lcdwc(CMDLCDOFF);
lcdwc(CMDON);
lcdwc(CMDLCDON);
lcdwc(CMDB3C4);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -