📄 fm12864.c
字号:
#include "fm12864.h"
unsigned char code hz_add[4][8]={ 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 };//DDRAM地址 用于确定字符的启始位置
void delay(unsigned int t)
{
while(t--);
}
/***********************************************************
函数名称:
函数功能:
入口参数:
出口参数:
备 注:
***********************************************************/
void DelayUS(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
_nop_();
}
/***********************************************************
函数名称:
函数功能:
入口参数:
出口参数:
备 注:
***********************************************************/
void Send(unsigned char senddata)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((senddata)&0x80)
SID = 1;
else
SID = 0;
CLK = 1;
_nop_();
CLK = 0;
senddata<<=1;
}
}
void write_cmd(unsigned char cmd)
{
Send(0xf8);
Send(cmd&0xf0);
Send(cmd<<4);
DelayUS(5);
}
void write_dat(unsigned char dat)
{
Send(0xfa);
Send(dat&0xf0);
Send(dat<<4);
DelayUS(5);
}
void lcdinit(void)
{
RST=0;
delay(45000); //复位启动时间大于40ms
RST=1; //完成启动
FSB=0;
CS=1;
write_cmd(0x30); //设定系统为 :8位数据,基本指令
delay(150); //功能设定时间大于100ms
write_cmd(0x30); //
delay(45);
write_cmd(0x0c); //开整体(DB2),游标(DB1),反白显示(DB0)
delay(150);
write_cmd(0x01); //清显示 ,DDRAM清零;也叫待机模式
delay(15000);
write_cmd(0x06); //
_nop_();
}
/**************************************************************************
汉字显示函数 可以是一个字也可以是字符串
输入: Y:行地址1表示第一行;(1,2,3,4)
X:列地址1表示第一行;(1,2,3,4,5,7,8,)
*S:汉字启始位
***************************************************************************/
void disp_hz_string(unsigned char y,unsigned char x,unsigned char code *s)
{
write_cmd(hz_add[y-1][x-1]);
while(*s>0)
{
write_dat(*s);
s++;
delay(20);
}
}
void disp_shuju(unsigned char t) //转换成数显示
{
switch(t)
{
case 0:write_dat(0x30);break;
case 1:write_dat(0x31);break;
case 2:write_dat(0x32);break;
case 3:write_dat(0x33);break;
case 4:write_dat(0x34);break;
case 5:write_dat(0x35);break;
case 6:write_dat(0x36);break;
case 7:write_dat(0x37);break;
case 8:write_dat(0x38);break;
case 9:write_dat(0x39);break;
default : break;
}
}
/*------------------显示图片------------------------2007.4.22修改---lujunsong---*/
void disp_img(unsigned char code *img)
{ unsigned int j=0;
unsigned char x,y,i;
for(i=0;i<9;i+=8)
for(y=0;y<32;y++)
for(x=0;x<8;x++)
{ write_cmd(0x36); //功能设置---8BIT控制界面,扩充指令集
write_cmd(y+0x80); //行地址
write_cmd(x+0x80+i); //列地址
write_cmd(0x30);
write_dat(img[j++]);
write_dat(img[j++]);
}
}
void shuju(unsigned char y,unsigned char x,unsigned int t)
{
unsigned int m;
unsigned char j[5]={0};
unsigned char i,k;
m=t;
write_cmd(hz_add[y-1][x-1]);
j[0]=m/10000;
j[1]=m%10000/1000;
j[2]=m%1000/100;
j[3]=m%100/10;
j[4]=m%10;
i=0;
while(j[i]==0)i++;
for(k=i;k<5;k++)
{
disp_shuju(j[k]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -