📄 串行.c
字号:
#include "REG52.h"
#include "intrins.h"
//sbit LCD_PS = P2^6;
//sbit LCD_C86 = P2^5;
sbit LCD_CS = P2^4;
sbit LCD_RES = P2^3;
sbit LCD_A0 = P2^2;
sbit LCD_SDI = P0^7;//
sbit LCD_CLK = P0^6;
#define SCL LCD_CLK
#define SDA LCD_SDI
#define RST LCD_RES
#define CS1 LCD_CS
//6*16字符
unsigned char code shuzi[]={
/*-- 文字: 0 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
/*-- 文字: 1 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00,
/*-- 文字: 3 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
/*-- 文字: 4 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00,
/*-- 文字: 5 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
/*-- 文字: 6 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
/*-- 文字: 7 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,
/*-- 文字: 9 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=6x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=6x16 --*/
0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00,
};
unsigned char code hanzi[]=
{
/*-- 文字: 单 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x00,0x00,0x7C,0x55,0x56,0xFC,0x56,0x55,0x54,0x7C,0x00,0x00,0x01,0x01,0x01,0x01,
0x01,0x07,0x01,0x01,0x01,0x01,0x01,0x00,
/*-- 文字: 单 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --
0x00,0x00,0x3E,0xAA,0x6A,0x3F,0x6A,0xAA,0x2A,0x3E,0x00,0x00,0x80,0x80,0x80,0x80,
0x80,0xE0,0x80,0x80,0x80,0x80,0x80,0x00,
*/
/*-- 文字: 片 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x00,0x00,0xFF,0x48,0x48,0x48,0x4F,0xC8,0x08,0x08,0x08,0x00,0x04,0x02,0x01,0x00,
0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
/*-- 文字: 机 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x84,0x64,0xFF,0x24,0x44,0xFE,0x02,0x02,0xFF,0x02,0x00,0x00,0x01,0x00,0x07,0x04,
0x02,0x01,0x00,0x00,0x07,0x04,0x07,0x00,
/*-- 文字: 开 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x20,0x22,0x22,0xFE,0x22,0x22,0x22,0xFE,0x22,0x23,0x22,0x00,0x04,0x04,0x02,0x01,
0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,
/*-- 文字: 发 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x08,0x0E,0x88,0x78,0x2F,0xE8,0x28,0xA9,0x6A,0x08,0x08,0x00,0x04,0x02,0x05,0x04,
0x02,0x02,0x01,0x02,0x02,0x04,0x04,0x00,
/*-- 文字: 工 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x00,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x03,0x02,0x00,0x00,0x04,0x04,0x04,0x04,
0x04,0x07,0x04,0x04,0x04,0x04,0x04,0x00,
/*-- 文字: 作 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x10,0x08,0xFC,0x13,0x08,0x04,0xFF,0x24,0x24,0x24,0x04,0x00,0x00,0x00,0x07,0x00,
0x00,0x00,0x07,0x01,0x01,0x01,0x01,0x00,
/*-- 文字: 室 --*/
/*-- 宋体9; 此字体下对应的点阵为:宽x高=12x12 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=12x16 --*/
0x04,0x06,0x4A,0x6A,0x5A,0xCB,0x4A,0x5A,0x6A,0x4A,0x06,0x00,0x04,0x04,0x05,0x05,
0x05,0x07,0x05,0x05,0x05,0x04,0x04,0x00,
};
/******************************delay time***********************************/
void delay_ms(unsigned int ms)
{
unsigned int n ;
while(ms--)
{
n = 86;
while(n--);
}
}
//****************************reset IC for start****************************/
void LCD_Reset()
{
IE = 0x00; //中断控制寄存器
LCD_RES = 0;
delay_ms(50);
LCD_RES = 1;
delay_ms(50);
}
//========================================================================
// 函数: void LCD_DataWrite(unsigned int Data)
// 描述: 写一个字节的显示数据至LCD中的显示缓冲RAM当中
// 参数: Data 写入的数据
//========================================================================
void LCD_DataWrite(unsigned char Dat)//,_Fill_Dot_LCD
{
unsigned char Num;
LCD_CS = 0;
LCD_A0 = 1;
for(Num=0;Num<8;Num++)
{
if((Dat&0x80) == 0)
LCD_SDI = 0;
else LCD_SDI = 1;
Dat = Dat << 1;
LCD_CLK = 0;
LCD_CLK = 1;
}
LCD_CS = 1;
}
//========================================================================
// 函数: void LCD_RegWrite(unsigned char Command)
// 描述: 写一个字节的数据至LCD中的控制寄存器当中
// 参数: Command 写入的数据
//========================================================================
void LCD_RegWrite(unsigned char Command)
{
unsigned char Num;
LCD_CS = 0;
LCD_A0 = 0;
for(Num=0;Num<8;Num++)
{
if((Command&0x80) == 0)
LCD_SDI = 0;
else LCD_SDI = 1;
Command = Command << 1;
LCD_CLK = 0;
LCD_CLK = 1;
}
LCD_CS = 1;
}
//显示亮暗点=================================================================
void Display_fill(unsigned char fill)
{
unsigned char page,column;
for(page=0xB7;page>=0xB0;page--)
{
LCD_RegWrite(page); //set page address
LCD_RegWrite(0x10); //set Column address MSB
LCD_RegWrite(0x00); //set column address LSB
for(column=0;column<132;column++)
{
LCD_DataWrite(fill);
}
}
}
//==============================================================
// 函数: void LCD_Init(void)
// 描述: LCD初始化程序,在里面会完成LCD初始所需要设置的许多寄存器,具体如果
// 用户想了解,建议查看DataSheet当中各个寄存器的意义
//================================================================
void LCD_Init(void)
{
LCD_CS = 0;
LCD_Reset();
LCD_RegWrite(0xA2); //LCD偏压设置,V3时选--LCD Bias selection(1/65 Duty,1/9Bias)
LCD_RegWrite(0xA1); //Segment方向选择,正常--ADC selection(SEG0->SEG128)
LCD_RegWrite(0x80); //设置显示起始行对应RAM--SHL selection(COM0->COM64)
delay_ms(5);
LCD_RegWrite(0x26); //设置Rb/Ra=6--Regulator Resistor Selection
LCD_RegWrite(0x81); //电量设置模式(显示亮度)--Electronic Volume
LCD_RegWrite(0x08); //Reference Register selection Vo=(1+Rb/Ra)(1+a)*2.1=10
delay_ms(10);
LCD_RegWrite(0x2f); //设置上电控制模式--Power Control(Vc=1;Vr=1;Vf=1)
delay_ms(10);
LCD_RegWrite(0xF8); //升压比设置
LCD_RegWrite(0x00);
delay_ms(5);
LCD_RegWrite(0xAF); //LCD显示开--Display on
delay_ms(5);
LCD_RegWrite(0xa4);
}
//---------------------------------------------
//LCD_set_XY: 设置LCD坐标函数
//输入参数:X:0-83 Y:0-5
//编写日期:20080918
//---------------------------------------------
void LCD_setXY(unsigned char X, unsigned char Y)
{
unsigned char gao,di;
LCD_RegWrite(0xB0 | Y); //页
X = X + 4; //液晶是0-131的,我们只用到0-127,所以当倒序的方法时(131-0),实际上是127-0,
gao = X & 0xf0;
gao = gao >> 4;
di = X & 0x0f;
LCD_RegWrite(0x10 | gao); //set Column address MSB
LCD_RegWrite(0x00 | di); //set column address LSB
}
/*---------------------------------------------
LCD_write_hanzi: 显示12(宽)*16(高)点阵列汉字等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
unsigned char i;
LCD_setXY(row*6, page);// 列,页
for(i=0; i<12;i++)
{
LCD_DataWrite(hanzi[c*24+i]);
}
LCD_setXY(row*6, page+1);// 列,页
for(i=12; i<24;i++)
{
LCD_DataWrite(hanzi[c*24+i]);
}
}
/*---------------------------------------------
LCD_write_shu: 显示6(宽)*16(高)点阵列数字字母符号等半角类
输入参数:c:显示的字符;
-----------------------------------------------*/
void LCD_write_shu(unsigned char row, unsigned char page,unsigned char c) //row:列 page:页 dd:字符
{
unsigned char i;
LCD_setXY(row*6, page);// 列,页
for(i=0; i<6;i++)
{
LCD_DataWrite(shuzi[c*12+i]);
}
LCD_setXY(row*6, page+1);// 列,页
for(i=6; i<12;i++)
{
LCD_DataWrite(shuzi[c*12+i]);
}
}
void main()
{
// LCD_C86 = 0;
// LCD_PS = 0;
LCD_Init();
Display_fill(0x00); //显示全暗
delay_ms(10);
while(1)
{
Display_fill(0x00); //显示全暗
LCD_write_hanzi(0,0,0); //单 //row:列 page:页 dd:字符
LCD_write_hanzi(2,0,1); //片
LCD_write_hanzi(4,0,2); //机
LCD_write_hanzi(6,0,3); //开
LCD_write_hanzi(8,0,4); //发
LCD_write_hanzi(10,0,5); //工
LCD_write_hanzi(12,0,6); //作
LCD_write_hanzi(14,0,7); //室
LCD_write_shu(0,2,0); //0
LCD_write_shu(1,2,1); //1
LCD_write_shu(2,2,2); //2
LCD_write_shu(3,2,3); //3
LCD_write_shu(4,2,4); //4
LCD_write_shu(5,2,5); //5
LCD_write_shu(6,2,6); //6
LCD_write_shu(7,2,7); //7
LCD_write_shu(8,2,8); //8
LCD_write_shu(9,2,9); //9
delay_ms(20000);
Display_fill(0x00); //显示全暗
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -