📄 lcd.c
字号:
//*********************************************************
// 简易数字频率计
//*********************************************************
#include <reg52.H>
#include <absacc.h>
#include<intrins.h>
#include<math.h>
#define lcdDl XBYTE [0xA201]
#define lcdDr XBYTE [0xA301]
#define lcdlCommand XBYTE [0xA200]
#define lcdrCommand XBYTE [0xA300]
#define strat_yaddr 0x40 //0x40 --0x7f
#define strat_xaddr 0xb8 //0xb8--0xbf
#define strat_dispaddr 0xc0 //液晶的开始行选择 0xc0-0xff
#define dataleng 16*8 //全屏8*8点阵容量
sbit RW=P1^6; //液晶的读写控制信号
sbit P1_4=P1^4;
sbit P1_3=P1^3;
sbit reset=P1^0; //FPGA清0,负跳变有效
sbit P1_1=P1^1; //预置门信号
sbit ad=P1^2; //方式选择
#define KEY XBYTE [0xA100]
#define LED1 XBYTE [0xA000]
#define LED2 XBYTE [0xA001]
#define LED3 XBYTE [0xA002]
#define LED4 XBYTE [0xA003]
#define LED5 XBYTE [0xA004]
#define LED6 XBYTE [0xA005]
#define LED7 XBYTE [0xA006]
#define LED8 XBYTE [0xA007]
#define sxchar static unsigned char xdata
#define schar static unsigned char
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//*******************************************************************
//变量说明
sxchar fpga[32] _at_ 0xa800; //FPGA地址
void pt0m1(void); //定时器0工作模式1初始化
void readkey(void);
void lcdreset(void); //LCD显示初始化子程序
void clear(void); //全屏清除
void clear_hang(uchar hang);
void leddisp(void);
void lcdlon_off(uchar D);
void setlstartx(uchar D);
void setlstarty(uchar D);
void setlstartline(uchar D);
void lcdron_off(uchar D);
void setrstartx(uchar D);
void setrstarty(uchar D);
void setrstartline(uchar D);
void lcdlwrite(uchar D);
void lcdrwrite(uchar D);
void hanzi_lcd(uchar code *word_data, uchar index ,uchar len);
uchar code mcbce[]={
0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,
0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,
0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,
0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00,
0x40,0x42,0x44,0xC8,0x00,0xFC,0x04,0x02,
0x82,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,
0x00,0x40,0x20,0x1F,0x20,0x47,0x42,0x41,
0x40,0x7F,0x40,0x42,0x44,0x63,0x20,0x00,
0x40,0x20,0xF8,0x07,0x04,0xF4,0x14,0x14,
0x14,0xFF,0x14,0x14,0x14,0xF6,0x04,0x00,
0x00,0x00,0xFF,0x00,0x80,0x43,0x45,0x29,
0x19,0x17,0x21,0x21,0x41,0xC3,0x40,0x00,
0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,
0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,
0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,
0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,
0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,
0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,
0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,
0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,
0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9F,
0x81,0x81,0x81,0x9F,0xA0,0x20,0x20,0x00,
0x00,0x00,0x00,0x7F,0xA0,0x90,0x40,0x43,
0x2C,0x10,0x28,0x26,0x41,0xC0,0x40,0x00,
0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40,
0x40,0xFF,0x40,0x40,0x40,0x60,0x40,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,
0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
0x10,0x0C,0x04,0x44,0x8C,0x94,0x35,0x06,
0xF4,0x04,0x04,0x04,0x04,0x14,0x0C,0x00,
0x02,0x82,0x82,0x42,0x42,0x23,0x12,0x0E,
0x03,0x0A,0x12,0x22,0x42,0xC3,0x02,0x00,
0x02,0xFA,0x02,0x02,0xFF,0x42,0x20,0x50,
0x4C,0x43,0x4C,0x50,0x20,0x60,0x20,0x00,
0x10,0x31,0x11,0x49,0x89,0x7F,0x42,0x5C,
0x40,0x4F,0x60,0x58,0x47,0x60,0x40,0x00,
0x40,0x48,0x44,0x43,0xF6,0x4A,0x43,0x0A,
0xE4,0x23,0x26,0x2A,0x22,0xF3,0x22,0x00,
0x20,0x10,0x0C,0x03,0xFF,0x02,0x04,0x00,
0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00
};
uchar code author[]={
0x40,0x60,0x5E,0x48,0x48,0xFF,0x48,0x4C,
0x68,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,
0x00,0x00,0x3F,0x01,0x01,0xFF,0x11,0x21,
0x1F,0x00,0x07,0x40,0x80,0x7F,0x00,0x00,
0x80,0x40,0x20,0xF8,0x87,0x40,0x30,0x0F,
0xF8,0x88,0x88,0xC8,0x88,0x0C,0x08,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
0xFF,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,
0x20,0x20,0x24,0x24,0x24,0xA4,0x7F,0x24,
0x34,0x2C,0x24,0xA2,0x20,0x30,0x20,0x00,
0x10,0x08,0x04,0x02,0xFF,0x49,0x49,0x49,
0x49,0x49,0x49,0xFF,0x01,0x00,0x00,0x00
};
uchar code name[]={
0x08,0x08,0x88,0xA4,0xAC,0xEA,0xAA,0xF9,
0xAA,0xEA,0xAC,0xA4,0x88,0x08,0x08,0x00,
0x88,0xD4,0x96,0xFD,0x96,0xD4,0x88,0x08,
0x88,0xD4,0x96,0xFD,0x96,0xD4,0x88,0x00,
0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,
0x84,0x84,0x84,0xC4,0x86,0x04,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
0x40,0x20,0x1F,0x08,0xF8,0x08,0x0C,0x88,
0x00,0xF8,0x08,0x08,0x08,0xFC,0x08,0x00,
0x81,0x41,0x21,0x19,0x07,0x09,0x31,0x01,
0x01,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00
};
void delay_10us(void)
{
uchar n;
for(n=0;n<5;n++)
{}
}
//*******************************************************************
void lcdreset(void)
{
lcdlon_off(0x3F);
lcdron_off(0x3F);
setlstartline(strat_dispaddr);
setrstartline(strat_dispaddr);//初始化
clear();
}
//////////////////////////////////
void lcdlon_off(uchar D)
{RW=0;
lcdlCommand=D;
_nop_();
}
void setlstartx(uchar D)
{RW=0;
lcdlCommand=D;
_nop_();
}
void setlstarty(uchar D)
{
RW=0;
lcdlCommand=D;
_nop_();
}
void setlstartline(uchar D)
{
RW=0;
lcdlCommand=D;
_nop_();
}
//////////////////////////////
void lcdron_off(uchar D)
{RW=0;
lcdrCommand=D;
_nop_();
}
void setrstartx(uchar D)
{RW=0;
lcdrCommand=D;
_nop_();
}
void setrstarty(uchar D)
{
RW=0;
lcdrCommand=D;
_nop_();
}
void setrstartline(uchar D)
{ RW=0;
lcdrCommand=D;
_nop_();
}
///////////////////////////////////
void lcdlwrite(uchar D)
{RW=0;
lcdDl=D;
_nop_();
}
void lcdrwrite(uchar D)
{RW=0;
lcdDr=D;
_nop_();
}
void clear(void)
{ uchar i;
for(i=1;i<=8;i++)
clear_hang(i);
}
void clear_hang(uchar hang)
{
uchar i,j;
for(i=0;i<8;i++)
{
setlstartx(strat_xaddr+hang-1);
for(j=0;j<64;j++)
{
setlstarty(strat_yaddr+j);
lcdlwrite(0x00);
_nop_();
}
setrstartx(strat_xaddr+hang-1);
for(j=0;j<64;j++)
{
setrstarty(strat_yaddr+j);
lcdrwrite(0x00);
_nop_();
}
}
}
void hanzi_lcd(uchar code *word_data, uchar index,uchar len )
{
uchar i,iloop;
uchar j;
uchar k;
uchar dex;
for(iloop=0;iloop<len;iloop++)
{
dex=index+iloop;
if( (dex % 8)< 4)
{ j=(dex % 4)*16;
k=(dex/8)*2;
setlstartx(strat_xaddr+k);
for(i=0;i<16;i++)
{
setlstarty(strat_yaddr+j+i);
lcdlwrite(*(word_data+i+iloop*32));
}
setlstartx(strat_xaddr+k+1);
for(i=0;i<16;i++)
{
setlstarty(strat_yaddr+i+j);
lcdlwrite(*(word_data+i+16+iloop*32));
}
}
else if ((dex%8)>=4)
{
j=(dex%4)*16;
k=(dex/8)*2;
setrstartx(strat_xaddr+k);
for(i=0;i<16;i++)
{
setrstarty(strat_yaddr+j+i);
lcdrwrite(*(word_data+i+iloop*32));
}
setrstartx(strat_xaddr+k+1);
for(i=0;i<16;i++)
{
setrstarty(strat_yaddr+i+j);
lcdrwrite(*(word_data+i+16+iloop*32));
}
}
}
}
void main()
{
lcdreset();
clear(); //LCD显示初始化
// init_mcu();
while(1)
{
hanzi_lcd(mcbce,0,11); //其中hanzi_lcd是汉字显示函数 第一个参数对应的是字模数组,第二个参数对应的是显示的位置,即显示在第几个字 ,第三个参数表示此数组要显示 几个汉字
hanzi_lcd(author,16,3); //其中hanzi_lcd是汉字显示函数 第一个参数对应的是字模数组,第二个参数对应的是显示的位置,即显示在第几个字 ,第三个参数表示此数组要显示 几个汉字
hanzi_lcd(name,27,3);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -