📄 lcd_5110.c
字号:
#include<c8051f020.h>
sbit sce = P2^0; //片选
sbit res = P2^1; //复位,0复位
sbit dc = P2^2; //1写数据,0写指令
sbit sdin = P2^3; //数据
sbit sclk = P2^5; //时钟
unsigned char code hanzi[]={
/*-- 文字: 吴 --*/
/*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x80,0xA0,0xAF,0xA9,0xA9,0xE9,0xA9,0xA9,0xAF,0xA0,0x80,0x00,0x04,0x04,0x04,0x02,
0x01,0x00,0x01,0x02,0x02,0x04,0x04,0x00,
/*-- 文字: 琼 --*/
/*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x12,0xFE,0x12,0x12,0x02,0x7A,0x4A,0xCB,0x4A,0x7A,0x02,0x00,0x02,0x03,0x01,0x05,
0x02,0x05,0x04,0x07,0x00,0x01,0x06,0x00,
/*-- 文字: 你 --*/
/*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x10,0x08,0xFC,0x13,0x88,0x66,0x05,0xF4,0x04,0x64,0x8C,0x00,0x00,0x00,0x07,0x01,
0x00,0x04,0x04,0x07,0x00,0x00,0x01,0x00,
/*-- 文字: 好 --*/
/*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0xC4,0xBC,0x07,0xC4,0x3C,0x21,0x21,0xF9,0x25,0x23,0x20,0x00,0x04,0x02,0x01,0x01,
0x02,0x00,0x04,0x07,0x00,0x00,0x00,0x00,
/*-- 文字: ! --*/
/*-- Trebuchet MS9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x00,0x1C,0x7E,0x7E,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x03,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
void SYSCLK_Init (void)
{
int i; // 延时计数器
WDTCN = 0xde; // 禁止看门狗
WDTCN = 0xad;
OSCXCN = 0x67; // 启动外部时钟(11.0592MHZ)
for (i=0; i < 256; i++) ;
while (!(OSCXCN & 0x80)) ; // 等待晶振稳定
OSCICN = 0x88; // 选择外部晶振作为系统时钟
// 允许时钟丢失检测
}
void Port_Init(void)
{
P0MDOUT=0Xff; //CS,DCLOCK,DOUT配置成推挽输出方式
P2MDOUT=0Xff;
P3MDOUT=0Xff;
P74OUT=0xff; //p5口做液晶数据口,p4做液晶控制口
XBR2 = 0x40; //使能交叉开关和弱上拉
}
void delay_1ms(void)//1ms延时函数
{
unsigned int i;
for (i=0;i<500;i++) ;
}
/*--------------------------------------------
LCD_write_byte: 使用SPI接口写数据到LCD
输入参数:dt:写入的数据;
command :写数据/命令选择;
编写日期:20080918
----------------------------------------------*/
void LCD_write_byte(unsigned char dt, unsigned char command)
{
unsigned char i;
sce=0;
dc=command;
for(i=0;i<8;i++)
{
if(dt&0x80)
sdin=1;
else
sdin=0;
dt=dt<<1;
sclk=0;
sclk=1;
}
dc=1;
sce=1;
sdin=1;
}
/*---------------------------------------
LCD_init: 3310LCD初始化
编写日期:20080918
----------------------------------------- */
void LCD_init(void)
{
res=0;
delay_1ms();
res=1;
LCD_write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
LCD_write_byte(0xd0,0);//设定液晶偏置电压
LCD_write_byte(0x20,0);//使用基本指令
LCD_write_byte(0x0C,0);//设定显示模式,正常显示
}
/*-------------------------------------------
LCD_set_XY: 设置LCD坐标函数
输入参数:X:0-83 Y:0-5
编写日期:20080918
---------------------------------------------*/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
LCD_write_byte(0x40 | Y, 0);// column
LCD_write_byte(0x80 | X, 0);// row
}
/*------------------------------------------
LCD_clear: LCD清屏函数
编写日期:20080918
--------------------------------------------*/
void LCD_clear(void)
{
unsigned char t;
unsigned char k;
LCD_set_XY(0,0);
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
LCD_write_byte(0x00,1);
}
}
}
/*---------------------------------------------
LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
编写日期:20080918
-----------------------------------------------*/
/*void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
unsigned char i;
LCD_set_XY(row*8, page);// 列,页
for(i=0; i<8;i++)
{
LCD_write_byte(shuzi[c*16+i],1);
}
LCD_set_XY(row*8, page+1);// 列,页
for(i=8; i<16;i++)
{
LCD_write_byte(shuzi[c*16+i],1);
}
} */
/*---------------------------------------------
LCD_write_hanzi: 显示16(宽)*16(高)点阵列汉字等半角类
输入参数:c:显示的字符;
编写日期:20080918
-----------------------------------------------*/
void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
unsigned char i;
LCD_set_XY(row*12, page);// 列,页
for(i=0; i<12;i++)
{
LCD_write_byte(hanzi[c*24+i],1);
}
LCD_set_XY(row*12, page+1);// 列,页
for(i=12; i<24;i++)
{
LCD_write_byte(hanzi[c*24+i],1);
}
}
main()
{
unsigned char k;
SYSCLK_Init ( );
Port_Init( );
res=0;
for(k=0;k<250;k++);
res=1;
LCD_init(); //初始化LCD模块
LCD_clear(); //清屏幕
LCD_write_hanzi(0,0,0); //吴
LCD_write_hanzi(1,0,1); //琼
LCD_write_hanzi(2,0,2); //你
LCD_write_hanzi(3,0,3); //好
LCD_write_hanzi(4,0,4); //!
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -