📄 smg12232zk.h
字号:
/****************** SMG12232ZK串行接口程序******************
* Title : Accessing to LCD-CONTROLLER
* Date : 2007.10.18
* Support telephone:
* QQ : 16693799
* Create by : Joe Yuan
* DESCRIPTION:This subroutine shows how to write data to LCD-CONTROLLER
*******************************************************************/
#ifndef __SMG12232ZK_H
#define __SMG12232ZK_H
#define LCD_PORT1 PORTB
#define LCD_SCLK PB4
#define LCD_STD PB3
#define LCD_PORT2 PORTC
#define LCD_CS PC3
#define LCD_CS_H LCD_PORT2 |= BIT(LCD_CS)
#define LCD_CS_L LCD_PORT2 &=~ BIT(LCD_CS)
#define LCD_STD_H LCD_PORT1 |= BIT(LCD_STD)
#define LCD_STD_L LCD_PORT1 &=~ BIT(LCD_STD)
#define LCD_SCLK_H LCD_PORT1 |= BIT(LCD_SCLK)
#define LCD_SCLK_L LCD_PORT1 &=~ BIT(LCD_SCLK)
void Send_8bit(Word x);//串行发送8位数据
void Lcd_Write(Byte start,Byte data);//模块写入子程序
void Lcd_Reset(void);//模块复位子程序
void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度
void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num);//xpos为列数,ypos为行数,num字符串长度
void Hzk_Dis_Clr(void);//汉字显示清屏
Long lcd_data1;
Long lcd_data2;
/****************发送汉字子程序******************
** xpos为列数,ypos为行数
**lcd_pointer为字符串首地址
*********************************************************/
void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度
{
Byte i=0,ram_address;//ram_address:首地址
//首先判断字符串得长度
while(*(lcd_pointer+i) != '\0')//字符串长度
{
i++;
}//i=字符串长度
if(i>15)
{
i=15;
}
if(ypos==1)
{
ram_address = 0x80+xpos-1;
}
else if(ypos==2)
{
ram_address = 0x90+xpos-1;
}
Lcd_Write(0xf8,ram_address);
for(;i>0;i--)
{
Lcd_Write(0xfa,*lcd_pointer);
lcd_pointer++;
}
}
void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num)//xpos为列数,ypos为行数,num字符串长度
{
Byte i=0,ram_address;//ram_address:首地址
if(ypos==1)
{
ram_address = 0x80+xpos-1;
}
else if(ypos==2)
{
ram_address = 0x90+xpos-1;
}
Lcd_Write(0xf8,ram_address);
for(i=0;i<num;i++)
{
Lcd_Write(0xfa,*lcd_pointer);
lcd_pointer++;
}
}
/****************发送数据子程序******************
** xpos为列数,ypos为行数
**data为数据
**num数据占用得位数
*********************************************************/
void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)
{
Byte i=0,ram_address;//ram_address:首地址
Byte lcd_buf[15];
Byte *lcd_pointer;
if(num<16)
{
for(i=0;i<num;i++)
{
lcd_buf[num-i-1]= data%10+0x30;
data /= 10;
}
//输入灭零程序
if(ypos==1)
{
ram_address = 0x80+xpos-1;
}
else if(ypos==2)
{
ram_address = 0x90+xpos-1;
}
Lcd_Write(0xf8,ram_address);
lcd_pointer = lcd_buf;
for(i=0;i<num;i++)
{
Lcd_Write(0xfa,*lcd_pointer);
lcd_pointer++;
}
}
}
void Lcd_Reset(void)
{
LCD_CS_H;//片选置高
Delay_Ms(1);//等待内部复位
Lcd_Write(0xf8,0x30);//使用基本指令集
Lcd_Write(0xf8,0x0c);//整体显示on
Lcd_Write(0xf8,0x01);//清除显示
Delay_Ms(5);//4.6ms
Lcd_Write(0xf8,0x06);//显示右移
LCD_CS_L;//片选置低
}
void Lcd_Write(Byte start,Byte com)//start :起始字节com:命令/数据
{
LCD_CS_H;//片选置高
Send_8bit(start);
Delay_Us(100);//72us
//将data变为datal 0000 datah 0000
Send_8bit(com&0xf0);
Delay_Us(100);//72us
Send_8bit((com&0x0f)<<4);
Delay_Us(100);//72us
LCD_CS_L;//片选置低
}
void Send_8bit(Word x)
{
Byte i;
for(i=0;i<8;i++)
{
if(x&0x80)//数据线发送数据
{
LCD_STD_H;
}
else
{
LCD_STD_L;
}
LCD_SCLK_L;//产生同步时钟
Delay_Us(2);
LCD_SCLK_H;
Delay_Us(2);
x <<= 1;
}
}
void Hzk_Dis_Clr(void)//汉字显示清屏
{
Hzk_Dis_Words(1,1," ");
Hzk_Dis_Words(2,1," ");
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -