📄 ylf240128a-final.c
字号:
0x36,0xC6,
0x66,0x00,
0x66,0xFE,
0x3C,0xC6,
0x1C,0xC6,
0x1E,0xC6,
0x33,0xC6,
0x63,0xFE,
0xC0,0xC6,
0x00,0x00};
const uchar zhong16[]={//终_16
0x18,0xC0,//终
0x18,0xC0,
0x30,0xFE,
0x3D,0x8C,
0x6D,0xCC,
0xFB,0x78,
0x18,0x30,
0x30,0x78,
0x60,0xCC,
0xFF,0xE7,
0x00,0x38,
0x00,0x18,
0x1C,0x60,
0xF0,0x38,
0x00,0x1C,
0x00,0x0C};
const uchar dian16[]={//点_16
0x01,0x80,//点
0x01,0x80,
0x01,0xFC,
0x01,0x80,
0x01,0x98,
0x1F,0xFC,
0x18,0x18,
0x18,0x18,
0x18,0x18,
0x1F,0xF8,
0x18,0x18,
0x01,0x98,
0x3C,0xCC,
0x36,0x66,
0x66,0x66,
0x00,0x00};
const uchar pen16[]={//喷_16
0x00,0x60,//喷
0x00,0x60,
0xFF,0xFE,
0xD9,0xF8,
0xD9,0xF8,
0xDF,0xFF,
0xD9,0x98,
0xDB,0xFC,
0xFB,0x6C,
0xDB,0x6C,
0xC3,0x6C,
0x03,0xFC,
0x00,0xD8,
0x01,0x8E,
0x03,0x07,
0x06,0x06};
const uchar sshe16[]={//射_16
0x0C,0x0C,//射
0x18,0x0C,
0x3F,0x8C,
0x31,0x8C,
0x3F,0xFF,
0x31,0x8C,
0x3F,0x8C,
0x31,0xEC,
0x31,0xBC,
0x7F,0xBC,
0x07,0xBC,
0x0D,0x8C,
0x19,0x8C,
0x31,0x8C,
0x67,0xBC,
0x03,0x18};
const uchar fen16[]={//分_16
0x0C,0xC0,//分
0x0E,0xC0,
0x0C,0x60,
0x18,0x30,
0x18,0x38,
0x30,0x1C,
0x60,0x0F,
0xDF,0xF6,
0x06,0x30,
0x06,0x30,
0x06,0x30,
0x06,0x30,
0x0C,0x30,
0x18,0xF0,
0x30,0x60,
0x60,0x00};
const uchar miao16[]={//秒_16
0x0E,0x30,//秒
0xF8,0x30,
0x18,0x30,
0x19,0xBC,
0xFF,0xF6,
0x19,0xB3,
0x3B,0x33,
0x3F,0x30,
0x7E,0x33,
0x7E,0x33,
0xD8,0x06,
0x18,0x0C,
0x18,0x18,
0x18,0x70,
0x19,0xC0,
0x1F,0x00};
const uchar dao16[]={//倒_16
0x18,0x06,//倒
0x1F,0xE6,
0x1B,0x06,
0x33,0x06,
0x3E,0x1E,
0x7C,0xDE,
0xFF,0xFE,
0x33,0xDE,
0x33,0x1E,
0x3F,0xFE,
0x33,0x1E,
0x33,0x1E,
0x33,0x06,
0x33,0xE6,
0x3F,0x1E,
0x30,0x0C};
const uchar ji16[]={//计_16
0x60,0x30,//计
0x30,0x30,
0x38,0x30,
0x30,0x30,
0x00,0x30,
0xFB,0xFF,
0x18,0x30,
0x18,0x30,
0x18,0x30,
0x18,0x30,
0x18,0x30,
0x1B,0x30,
0x1E,0x30,
0x1C,0x30,
0x18,0x30,
0x00,0x30};
const uchar tshi16[]={//时_16
0x00,0x18,//时
0x00,0x18,
0x7E,0x18,
0x66,0x18,
0x67,0xFF,
0x66,0x18,
0x7E,0x18,
0x67,0x98,
0x66,0xD8,
0x66,0xD8,
0x7E,0x18,
0x00,0x18,
0x00,0x18,
0x00,0x18,
0x00,0x78,
0x00,0x30};
const uchar m16[]={//m_16
0x00,0x00,//m
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xFF,0x00,
0x6D,0x80,
0x6D,0x80,
0x6D,0x80,
0x6D,0x81,
0x6D,0x81,
0xFF,0x83,
0x00,0x03,
0x00,0x06};
const uchar s16[]={//s_16
0x00,0x00,//s
0x00,0x00,
0x18,0x00,
0x30,0x00,
0x30,0x00,
0x60,0x00,
0x60,0x00,
0xC0,0x3F,
0xC0,0x63,
0x80,0x60,
0x80,0x3E,
0x00,0x03,
0x00,0x63,
0x00,0x7E,
0x00,0x00,
0x00,0x00};
void McuInit()
{//初始化后所有管脚为输出高电平
PORTA=0xff;
PORTB=0xff;
DDRA=0xff;
DDRB=0xff;
}
uchar ReadState()
{//读取状态字
uchar state;
DDRB=0x00;
CD_SET;
RD_CLR;
NOP();NOP();NOP();NOP();NOP();
state=datain;
RD_SET;
DDRB=0xff;
return state;
}
void STA01()
{//判断状态位是否0,1位为高,并等待置高
while((ReadState()&0x03)!=0x03)
;
}
void STA3()
{//判断状态位是否3位为高,并等待置高
while((ReadState()&0x08)!=0x08)
;
}
void WriteData(uchar dat)
{//把一位数据写入数据总线
CD_CLR;
NOP();NOP();NOP();NOP();NOP();
dataout=dat;
WR_CLR;
NOP();NOP();NOP();NOP();NOP();
WR_SET;
}
void WriteCmd(uchar cmd)
{//把一位命令字写入数据总线
CD_SET;
NOP();NOP();NOP();NOP();NOP();
dataout=cmd;
WR_CLR;
NOP();NOP();NOP();NOP();NOP();
WR_SET;
}
void WriteTwoData(uchar dat1,uchar dat2,uchar cmd)
{//写入有两位数据的命令
STA01();
WriteData(dat1);
STA01();
WriteData(dat2);
STA01();
WriteCmd(cmd);
}
void WriteOneData(uchar dat,uchar cmd)
{//写入有一位数据的命令
STA01();
WriteData(dat);
STA01();
WriteCmd(cmd);
}
void LcdInit()
{//用于设置显示器的参数
uchar delay;
delay=255;
RS_CLR;
while(delay--);
RS_SET;
WriteTwoData(0x00,0x00,0x40);//设置文本显示区域首地址
WriteTwoData(0x20,0x00,0x41);//设置文本显示区域宽度32
WriteTwoData(0x00,0x08,0x42);//设置图形显示区域首地址
WriteTwoData(0x20,0x00,0x43);//设置文本显示区域宽度32
STA01();
WriteCmd(0xA7);//光标形状设置
STA01();
WriteCmd(0x80);//显示方式设置,逻辑"或"合成
STA01();
WriteCmd(0x9C);//显示开关设置,文本、图形显示启用
WriteTwoData(0x03,0x00,0x22);//设置CGRAM OFFSET地址 0000 0011
}
void ClearLcd()
{//用于清空显示器
uint count=512;
WriteTwoData(0x00,0x00,0x24);//设置显示RAM指针
WriteCmd(0xB0);//自动写方式
while(count--)
{
STA3();
WriteData(0x00);
}
WriteCmd(0xB2);//结束自动写指令
count=4096;
WriteTwoData(0x00,0x08,0x24);//设置显示RAM首地址
WriteCmd(0xB0);//自动写方式
while(count--)
{
STA3();
WriteData(0x00);
}
WriteCmd(0xB2);//结束自动写指令
}
//通过CGRAM写入用户个人的字符库
//16*16显示
//num表示写入库的字符的个数
//写入的数据放在CGTAB[]数组里
//CGTAB格式
//左半部分--右半部分
//其中code为从零开始的地址,text为字符数组
void CGRamGen(const uchar text[])
{//自动写入CGRAM,共128字符,num表示字符个数
uint num=0;
uint round;
WriteTwoData(0x00,0x1c,0x24);//设置地址指针 (0001 1)(100 0000 0)000
WriteCmd(0xB0);//自动写方式
for(round=0;round<10;round++)
{
num=16;
while(num)
{
STA3();
WriteData(text[32-num*2+round*32]);
num--;
}
num=16;
while(num)
{
STA3();
WriteData(text[33-num*2+round*32]);
num--;
}
}
WriteCmd(0xB2);//结束自动写
}
void CGRamGenTry(const uchar text[])
{//自动写入CGRAM,共128字符,num表示字符个数
uint num=0;
WriteTwoData(0x00,0x1c,0x24);//设置地址指针 (0001 1)(100 0000 0)000
WriteCmd(0xB0);//自动写方式
num=320;
while(num)
{
STA3();
WriteData(text[320-num]);
num--;
}
WriteCmd(0xB2);//结束自动写
}
//通过CGRAM写入字符图层,位置为8*8字符行和列
void DispChinaCode(uchar o_x,uchar o_y,uchar code)
{//设置在x,y位置显示code代码的字符
uint temp;
temp=32*o_y;
temp=temp+o_x;//得到位置存储器
temp=temp+0x00;//加上字符区启始位置
WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
WriteOneData(code,0xc0);//数据写,地址加1
WriteOneData(code+2,0xc0);//数据写,地址加1
temp+=32;
WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
WriteOneData(code+1,0xc0);//数据写,地址加1
WriteOneData(code+3,0xc0);//数据写,地址加1
}
//通过点阵图层写入字符,字符大小为32*32
//写入速度较慢
//位置为x*32,y*32,显示数据为disp[]
void DispChinaPic16(uchar o_x,uchar o_y,const uchar disp[])
{
uint temp;
uchar num;
temp=32*8*o_y;
temp=temp+o_x;
temp=temp+0x800;//加上图形区启始位置
num=16;
while(num)
{
WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
temp=temp+32;// 换行
WriteOneData(disp[32-num*2],0xc0);//数据写,地址加1
WriteOneData(disp[33-num*2],0xc0);//数据写,地址加1
num--;
}
}
void DispChinaPic24(uchar o_x,uchar o_y,const uchar disp[])
{
uint temp;
uchar num;
temp=32*8*o_y;
temp=temp+o_x;
temp=temp+0x800;//加上图形区启始位置
num=24;
while(num)
{
WriteTwoData((uchar)temp,(uchar)(temp>>8),0x24);//设置地址指针
temp=temp+32;// 换行
WriteOneData(disp[72-num*3],0xc0);//数据写,地址加1
WriteOneData(disp[73-num*3],0xc0);//数据写,地址加1
WriteOneData(disp[74-num*3],0xc0);//数据写,地址加1
num--;
}
}
void main()
{
McuInit();
LcdInit();
ClearLcd();
/* CGRamGen(0,CGTAB);
CGRamGen(0x80,yi16_1);
CGRamGen(0x84,er16_2);
CGRamGen(0x88,san16_3);
CGRamGen(0x8c,si16_4);
CGRamGen(0x90,wu16_5);
CGRamGen(0x94,liu16_6);
CGRamGen(0x98,qi16_7);
CGRamGen(0x9c,ba16_8);
CGRamGen(0xa0,jiu16_9);
CGRamGen(0xa4,ling16_0);*/
CGRamGen(number);
// CGRamGenTry(numbertry);
// CGRamGen(0x80,ling16_0);
DispChinaCode(24,0,0x80);
DispChinaCode(26,0,0x84);
DispChinaCode(28,0,0x88);
DispChinaCode(24,2,0x8c);
DispChinaCode(26,2,0x90);
DispChinaCode(28,2,0x94);
DispChinaCode(24,4,0x98);
/* DispChinaPic24(0,0,yang24);
DispChinaPic24(3,0,jian24);
DispChinaPic24(6,0,hao24);
DispChinaPic24(0,3,ci24);//次
DispChinaPic24(3,3,shu24);//数
DispChinaPic24(0,6,su24);//速
DispChinaPic24(3,6,du24);//度
DispChinaPic24(0,9,xing24);//行
DispChinaPic24(3,9,cheng24);//程
DispChinaPic24(0,12,ding24);//定
DispChinaPic24(3,12,dian24);//点
DispChinaPic24(6,12,pen24);//喷
DispChinaPic24(9,12,sshe24);//射
*/
DispChinaPic16(0,0,yang16);//样
DispChinaPic16(2,0,jian16);//件
DispChinaPic16(4,0,hao16);//号
DispChinaPic16(0,3,ci16);//次
DispChinaPic16(2,3,shu16);//数
DispChinaPic16(0,6,su16);//速
DispChinaPic16(2,6,du16);//度
DispChinaPic16(0,9,xing16);//行
DispChinaPic16(2,9,cheng16);//程
DispChinaPic16(0,12,ding16);//定
DispChinaPic16(2,12,dian16);//点
DispChinaPic16(4,12,pen16);//喷
DispChinaPic16(6,12,sshe16);//射
/* DispChinaPic16(13,0,ba16_8);//
DispChinaPic16(15,0,ba16_8);//
DispChinaPic16(17,0,ba16_8);//
DispChinaPic16(13,3,ba16_8);//
DispChinaPic16(15,3,ba16_8);//
DispChinaPic16(17,3,ba16_8);//
DispChinaPic16(13,6,ba16_8);//
DispChinaPic16(15,6,ba16_8);//
DispChinaPic16(17,6,ba16_8);//
DispChinaPic16(8,9,ba16_8);//
DispChinaPic16(10,9,ba16_8);//
DispChinaPic16(12,9,ba16_8);//
DispChinaPic16(13,9,ba16_8);//
DispChinaPic16(15,9,ba16_8);//
DispChinaPic16(17,9,ba16_8);//
DispChinaPic16(10,12,ba16_8);//
DispChinaPic16(12,12,ba16_8);//
DispChinaPic16(15,12,ba16_8);//
DispChinaPic16(17,12,ba16_8);//
*/
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -