📄 text1.c
字号:
#include<reg52.h>
#include <absacc.h>
#include <math.h>
#include <INTRINS.H>
#define LCMCP XBYTE [0xdfff] // 液晶命令口
#define LCMDP XBYTE [0xdbff] // 液晶数据口
#define uchar unsigned char
#define uint unsigned int
#define ufloat unsigned float
uchar code HZTable[ ][32]={
{0x1c,0x22,0x26,0x2a,0x32,0x22,0x1c,0x00,},//0
{0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x00,},//1
{0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00,},//2
{0x7C,0x08,0x10,0x08,0x04,0x04,0x78,0x00,},//3
{0x08,0x18,0x28,0x48,0x7c,0x08,0x08,0x00,},//4
{0x7c,0x40,0x78,0x04,0x04,0x44,0x38,0x00,},//5
{0x18,0x20,0x40,0x78,0x44,0x44,0x38,0x00,},//6
{0x7c,0x04,0x08,0x08,0x10,0x10,0x10,0x00,},//7
{0x38,0x44,0x44,0x38,0x44,0x44,0x38,0x00,},//8
{0x38,0x44,0x44,0x3c,0x04,0x08,0x30,0x00,},//9
{0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,},//0
{0x00,0x00,0x18,0x78,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,},//1
{0x00,0x00,0x3E,0x63,0x63,0x63,0x06,0x06,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,},//2
{0x00,0x00,0x3E,0x63,0x63,0x06,0x1C,0x06,0x03,0x03,0x63,0x66,0x3C,0x00,0x00,0x00,},//3
{0x00,0x00,0x06,0x0E,0x1E,0x36,0x36,0x66,0x66,0x7F,0x06,0x06,0x1F,0x00,0x00,0x00,},//4
{0x00,0x00,0x7F,0x60,0x60,0x60,0x7C,0x76,0x03,0x03,0x63,0x66,0x3C,0x00,0x00,0x00,},//5
{0x00,0x00,0x1E,0x36,0x60,0x60,0x7C,0x76,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,},//6
{0x00,0x00,0x7F,0x66,0x66,0x0C,0x0C,0x18,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00,},//7
{0x00,0x00,0x3E,0x63,0x63,0x63,0x36,0x1C,0x36,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,},//8
{0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x37,0x1F,0x03,0x03,0x36,0x3C,0x00,0x00,0x00,},//9
{0x00,0x00,0xFE,0x07,0xC7,0x6F,0x3C,0x18,0x1C,0x1C,0x36,0x36,0x61,0xC7,0x3C,0x00,
0xC0,0xC0,0xC0,0xFF,0x86,0x6C,0x60,0x60,0x60,0x70,0xF0,0xD8,0x9C,0x0F,0x06,0x00,},//*"欢", 20
{0x60,0x31,0x3F,0x36,0x06,0x06,0xF6,0x36,0x37,0x37,0x36,0x30,0x30,0x78,0xCF,0x00,
0x00,0xC0,0x7E,0x66,0x66,0x66,0x66,0x66,0xE6,0x7E,0x6C,0x60,0x60,0x00,0xFF,0x00,},//*"迎", 21
{0x0C,0x0E,0x1F,0x18,0x3F,0x76,0xF6,0x37,0x36,0x33,0x31,0x30,0x31,0x33,0x3E,0x00,
0x60,0x60,0xFF,0x60,0xFE,0x66,0x66,0xFE,0x66,0x60,0xC0,0xC0,0xF8,0x1F,0x06,0x00,},//*"使", 22
{0x00,0x1F,0x18,0x18,0x18,0x1F,0x18,0x18,0x18,0x1F,0x18,0x18,0x30,0x30,0x60,0xC0,
0x00,0xFE,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xFE,0xC6,0xC6,0xC6,0xC6,0xDE,0xCC,},//*"用", 23
};
/*液晶显示*/
uchar read_data() //读数据
{
uchar i;
i = LCMCP;
return (i);
}
void write_data(uchar data_d) //写数据
{
LCMDP=data_d;
}
void write_contr(uchar data_c) //写命令
{
LCMCP=data_c;
}
void LCD_Busy() //查忙?
{
uchar dat;
do{
dat=read_data();
dat=0x03&dat;
}while(dat!=0x03);
}
void LCD_Data(uchar dat)
{
LCD_Busy();
write_data(dat);
}
void LCD_Com1(uchar command)//写有 1 个参数命令
{
LCD_Busy();
write_contr(command);
}
void LCD_Com2(uchar dat,uchar command)//写有 2 个参数命令
{
LCD_Data(dat);
LCD_Com1(command);
}
void LCD_Com3(uchar data1,uchar data2,uchar command)//写有 3 个参数命令
{
LCD_Data(data1);
LCD_Data(data2);
LCD_Com1(command);
}
void LCD_Clear() //清屏
{
long i;
LCD_Com3(0x00,0x00,0x24);
for(i=0;i<0x1000;i++)
LCD_Com2(0x00, 0xc0);
}
void LCD_Init() //初始化LCD
{
LCD_Com3(0x00,0x00,0x42);
LCD_Com3(0x14,0x00,0x43);
LCD_Com1(0x90);
LCD_Com1(0x80);
LCD_Com1(0x98);
LCD_Clear();
}
void LCD_HZ(uchar x,uchar y,uchar n) //汉字显示 参数说明LCD_HZ(行,列,第几个字)
{
uint StartAddr;
uchar i;
StartAddr=x*160+y;
for(i=0;i<8;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc0);
LCD_Com2( HZTable[n][i+16], 0xc4);
StartAddr=StartAddr + 20;
}
StartAddr=(x+1)*160+y;
for(i=8;i<16;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc0);
LCD_Com2( HZTable[n][i+16], 0xc4);
StartAddr=StartAddr + 20;
}
}
void LCD_DSZ(uchar x,uchar y,uchar n) //写大数字
{
uint StartAddr;
uchar i;
StartAddr=x*160+y;
for(i=0;i<8;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc4);
StartAddr=StartAddr + 20;
}
StartAddr=(x+1)*160+y;
for(i=8;i<16;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc4);
StartAddr=StartAddr + 20;
}
}
void LCD_DSZ1(uchar x,uchar y,uchar n) //写大数字
{
uint StartAddr;
uchar i;
StartAddr=x*160+y;
for(i=16;i<24;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc4);
StartAddr=StartAddr + 20;
}
StartAddr=(x+1)*160+y;
for(i=24;i<32;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc4);
StartAddr=StartAddr + 20;
}
}
void LCD_XSZ(uchar x,uchar y,uchar n) //写普通数字
{
uint StartAddr;
uchar i;
StartAddr=x*160+y;
for(i=0;i<8;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i], 0xc4);
StartAddr=StartAddr + 20;
}
}
void LCD_XSZ1(uchar x,uchar y,uchar n,uchar m) //写普通数字11
{
uint StartAddr;
uchar i;
StartAddr=x*160+y;
for(i=0;i<8;i++)
{
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2( HZTable[n][i+m], 0xc4);
StartAddr=StartAddr + 20;
}
}
void line(uchar x,uchar y,uchar n,uchar m) //划线
{ uchar i;
uint StartAddr;
StartAddr=x*160+y;
for(i=0;i<m;i++)
{LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Com2(n, 0xc4);
StartAddr++;
}
}
void LCD_DOT(uchar x,uchar y,uchar mod) //写点(坐标,模式)模式为1时写黑点,为其他时写空点
{
uint StartAddr; //x为0~127行 y为0~159
uchar dat;
StartAddr=x*20+y/8;
dat=0xf7-y%8; //生产位操作命令画点的数据
if(mod==1)
dat=dat|0x08; //写黑点
else
dat=dat&0xf7; //写白点
LCD_Com3(StartAddr,((StartAddr)/256),0x24);
LCD_Busy();
write_contr(dat);
}
void LCD_line(uchar x1,uchar y1,uchar x2,uchar y2,uchar mod) //划线条
{
unsigned char x,y;
unsigned char d_x,d_y; //d_x=x2-x1;d_y=y2-y1;
char err=0;
unsigned char temp=0;
if(y2<y1) //交换大小,将y大的放在后面,即赋值到y2
{ x=x1;
y=y1;
x1=x2;
y1=y2;
x2=x;
y2=y;
}
d_y=y2-y1;
if (d_y==0) //y2=y1;画横线
{
if (x1>x2)
{x=x1;x1=x2;x2=x;}
for( x=x1;x<=x2;x++ )
LCD_DOT(x,y1,mod);
}
else //y2!=y1;
{
if(x2>=x1)
{temp=1;d_x=x2-x1;} //x2>=x1 ,temp为标志位
else
d_x=x1-x2;
x=x1;
y=y1;
LCD_DOT(x,y,mod); //写起点
/* x2>=x1且斜率绝对值小于等于1 */
if(temp&&(d_y<=d_x))
{
while(x!=x2)
{ if(err<0)
{x=x+1;err=err+(y2-y);}
else
{x=x+1;y=y+1;err=err+(y2-y)-(x2-x);}
LCD_DOT(x,y,mod);
}
}
/* x2>=x1且斜率绝对值大于1 */
if(temp&&(d_y>d_x))
{
while(y!=y2)
{
d_x=x2-x;
d_y=y2-y;
if(err<0)
{x=x+1;y=y+1;err=err+d_y-d_x;}
else
{y=y+1;err=err-d_x;}
LCD_DOT(x,y,mod);
}
}
/* x2<x1且斜率绝对值小于等于1 */
if(!temp&&(d_y<=d_x))
{
while(x!=x2)
{
d_x=x-x2;
d_y=y2-y;
if(err<0)
{x=x-1;err=err+d_y;}
else
{x=x-1;y=y+1;err=err+d_y-d_x;}
LCD_DOT(x,y,mod);
}
}
/* x2<x1且斜率绝对值大于1 */
if(!temp &&(d_y>d_x))
{
while(y!=y2)
{
d_x=x-x2;
d_y=y2-y;
if(err<0)
{x=x-1;y=y+1;err=err+d_y-d_x;}
else
{y=y+1;err=err-d_x;}
LCD_DOT(x,y,mod);
}
}
}
}
void welcome()
{
LCD_HZ(4,2,20);
LCD_HZ(4,4,21);
LCD_HZ(4,6,22);
LCD_HZ(4,8,23);
}
void main(void)
{
LCD_Init();
welcome();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -