📄 rt12864s.c.bak
字号:
#include <REG938.h> /*头文件的包含*/
#include <intrins.h>
#define uchar unsigned char /*宏定义*/
#define uint unsigned int
#define _Nop() _nop_() /*定义空指令*/
uchar code AC_TABLE[]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}; //第四行汉字位置
uchar code lcd_tab[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,
0x41,0x42,0x43,0x44,0x45,0x46};
sbit rt12864_sid = P1^0; //数据
sbit rt12864_clk = P1^1; //时钟
/********************************************************************
使用定时器1延时n毫秒
********************************************************************/
void dally_timer1(uint data ms)
{
uchar tmp = 15;
TR1 = 1;
do
{
tmp = 15;
do
{
while (TF1 == 0);
TF1 = 0;
--tmp;
}
while (tmp != 0);
--ms;
}
while (ms != 0);
TR1 = 0;
}
/****************************************************************************
* 名称:rt12864_write()
* 功能:LCD读写子程序。
* 入口参数:LCD_COMMAND, LCD_DATA
* 出口参数:无
****************************************************************************/
/**------------------------------------------------------------------------**/
void rt12864_write1(uchar data TMP1)
{
uchar data i,TMP;
for(i=8;i>0;i--)
{
TMP=(TMP1&(0x01<<(i-1)))>>(i-1);//取数据第7-0位
if(TMP==0)
{
rt12864_sid = 0; //第i位为0,lcd数据为0
}
if(TMP==1)
{
rt12864_sid = 1; //第i位为1,lcd数据为1
}
rt12864_clk = 0; //lcd时钟产生一个上升沿
_Nop();
_Nop();
rt12864_clk = 1;
}
}
/**-----------------------------------------------------------------------**/
void rt12864_write(uchar data LCD_COMMAND,uchar data LCD_TMP)
{
uchar data TMP1;
TMP1=LCD_COMMAND; //发送lcd指令
rt12864_write1(TMP1);
TMP1=LCD_TMP&0xF0; //发送lcd指令或数据高4位
rt12864_write1(TMP1);
TMP1=(LCD_TMP&0x0F)<<4; //发送lcd指令或数据低4位
rt12864_write1(TMP1);
}
/****************************************************************************
* 名称:LCDInit()
* 功能:LCD初始化子程序。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void rt12864_initialization(void)
{
rt12864_write(0xf8,0x01); //清屏命令
dally_timer1(40);
rt12864_write(0xf8,0x30); //基本指令集
dally_timer1(40);
rt12864_write(0xf8,0x02); //游标归零命令
dally_timer1(40);
rt12864_write(0xf8,0x04); //
dally_timer1(40);
rt12864_write(0xf8,0x0c); //
dally_timer1(40);
rt12864_write(0xf8,0x01); //
dally_timer1(40);
rt12864_write(0xf8,0x80); //
dally_timer1(40);
}
/****************************************************************************
在row行,tier列,十进制方式显示双字节数据
****************************************************************************/
void rt12864_ten_int(uchar row,uchar tier,uint dt)
{
uchar data tmp;
tmp = AC_TABLE[8*row+tier];
rt12864_write(0xf8,tmp);
tmp = lcd_tab[dt / 1000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 1000) / 100];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 100) / 10];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[dt % 10];
rt12864_write(0xfa,tmp);
}
/****************************************************************************
在row行,tier列,十六进制方式显示双字节数据
****************************************************************************/
void rt12864_sixteen_int(uchar row,uchar tier,uint dt)
{
uchar data tmp;
tmp = AC_TABLE[8*row+tier];
rt12864_write(0xf8,tmp);
tmp = lcd_tab[dt / 4096];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 4096) / 256];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 256) / 16];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[dt % 16];
rt12864_write(0xfa,tmp);
}
/****************************************************************************
在row行,tier列,十进制方式显示单字节数据
****************************************************************************/
void rt12864_ten_char(uchar row,uchar tier,uchar dt)
{
uchar data tmp;
tmp = AC_TABLE[8*row+tier];
rt12864_write(0xf8,tmp);
tmp = lcd_tab[dt / 100];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 100) / 10];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[dt % 10];
rt12864_write(0xfa,tmp);
}
/****************************************************************************
在row行,tier列,十六进制方式显示单字节数据
****************************************************************************/
void rt12864_sixteen_char(uchar row,uchar tier,uchar dt)
{
uchar data tmp;
tmp = AC_TABLE[8*row+tier];
rt12864_write(0xf8,tmp);
tmp = lcd_tab[dt / 16];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[dt % 16];
rt12864_write(0xfa,tmp);
}
void lcd12232_zfc(uchar row,uchar tier,uchar *puts)
{
uchar data tmp;
tmp = AC_TABLE[8*row+tier];
rt12864_write(0xf8,tmp);
while(*puts != '\0') //判断字符串是否显示完毕
{
rt12864_write(0xfa,*puts); //
puts++;
}
}
/****************************************************************************
在row行,tier列,十进制方式显示四字节数据
****************************************************************************/
void rt12864_ten_long(uchar row,uchar tier,ulong dt)
{
uchar data tmp;
tmp = AC_TABLE[8*row+tier];
rt12864_write(0xf8,tmp);
tmp = lcd_tab[dt / 1000000000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 1000000000) / 100000000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 100000000) / 10000000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 10000000) / 1000000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 1000000) / 100000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 100000) / 10000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 10000) / 1000];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 1000) / 100];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[(dt % 100) / 10];
rt12864_write(0xfa,tmp);
tmp = lcd_tab[dt % 10];
rt12864_write(0xfa,tmp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -