📄 main.c
字号:
/*模拟时序*/
#include <reg51.h>
#include <cncode.h>
#include <encode.h>
sbit cd = P2^0;
sbit ce = P2^1;
sbit rd = P2^2;
sbit wr = P2^3;
sbit md2 = P2^4;
sbit fs1 = P2^5;
sbit halt = P2^6;
sbit res = P2^7;
unsigned char x, y;
void delay(unsigned char tt){
for(;tt!=0; --tt);
}
void writed(unsigned char dat){//把数值传送到D口
cd = 0;//传输类型是数据
ce = 0;
wr = 0;
P0 = dat;
delay(1);//lcm占用时间,晶振较快时需要
wr = 1;
//ce = 1;
}
void writec(unsigned char command){//把命令传送到D口
cd = 1;//传输类型是命令
ce = 0;
wr = 0;
P0 = command;
delay(1);
wr = 1;
//ce = 1;
}
void wprintf(char *ptr){
unsigned int posi, i=0;
unsigned char c1, c2, j, k;
while(ptr[i]!=0x00){
c1 = ptr[i];
c2 = ptr[i+1];
posi = x*30 + y;
if(c1 <= 128){//ascii大于128为汉字
for(k=0; k<16; ++k){//16*8
writed(posi&0xff);
writed(posi/256);
writec(0x24);
writec(0xb0);
writed(ASC_MSK[(c1-0x20)*16+k]);
writec(0xb2);
posi += 30;
}
if(y>28){//换行
x += 16;
y = 0;
}else ++y;
++i;
}
else{
if(y>28){//换行
x += 16;
y = 0;
}else{
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);++j){//找到汉字
if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1]) break;
}
if(j<sizeof(GB_16)/sizeof(GB_16[0])){
for(k=0;k<16;++k){
writed(posi&0xff);
writed(posi/256);
writec(0x24);
writec(0xb0);
writed(GB_16[j].Msk[k*2]);
writed(GB_16[j].Msk[k*2+1]);//16*16,每行2字节
writec(0xb2);
posi += 30;//下一行
}
}
else{//没找到则涂黑
for(k=0;k<16;k++){
writed(posi&0xff);
writed(posi/256);
writec(0x24);
writec(0xb0);
writed(0xff);
writed(0xff);
writec(0xb2);
posi += 30;//下一行
}
}
y += 2;
i += 2;//下一字
}
}
}
}
void main(void){
//unsigned int i;
fs1 = 0;//fs1管脚高电平时表示字体为8*6;低电平时为8*8,8*6写不了16*16中文,所以不用了
md2 = 0;
halt = 0;
writed(0);
writed(0);
writec(0x42);
writed(30);
writed(0);
writec(0x43);
writec(0x80);
writec(0x9a);//关闭文本显示,开图形显示
x = 0;//坐标
y = 0;
wprintf("My Name Is 黄伟钳, Think You For Download! ^_^\0");
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -