📄 12232drivers.c
字号:
send_si(disp_start_line);
send_mi(disp_on); //开显示
send_si(disp_on);
}
//清屏
void lcd_clr(void)
{
uchar i, page;
for (page=0;page<4;page++)
{
send_mi(page_addr_set|page); //0xb8 10111000
send_si(page_addr_set|page);
send_mi(0); //主窗口设置为0列
send_si(0); //从窗口设置为0列
for (i=0;i<62;i++)
{
send_md(0x00);
send_sd(0x00);
}
}
}
void lcd_clr1(uchar page,uchar i,uchar withe,uchar mode)
{
//uchar page;
//for (page=0;page<4;page++)
//{
uchar k;
send_mi(page_addr_set|page); //0xb8 10111000
send_si(page_addr_set|page);
send_mi(i);
send_si(i);
//for (i=0;i<62;i++)
for(k=i;k<(i+withe);k++)
{
//send_md(0x00);
//send_sd(0x00);
if(mode)
{
send_md(0); //左屏
// send_sd(0);
}
else send_sd(0); //右屏
}
//}
}
void lcd_clr2()
{
lcd_clr1(0,6,54,1);
lcd_clr1(1,6,54,1);
lcd_clr1(2,6,54,1);
lcd_clr1(3,6,54,1);
lcd_clr1(0,6,54,0);
lcd_clr1(1,6,54,0);
lcd_clr1(2,6,54,0);
lcd_clr1(3,6,54,0);
}
//同时设置主(右)从(左)显示页为0~3页
void set_page(uchar page)
{
send_mi(page_addr_set|page);
send_si(page_addr_set|page);
}
//同时设置主(右)从(左)列地址为0~61列
void set_address(uchar address)
{
send_mi(address&0x7F); //&0x7F,考虑到防止越限
send_si(address&0x7F);
}
//在右页(从窗口)当前地址画一个字节(8点)
void putchar_l(uchar c)
{
send_md(c);
}
//在左页(主窗口)当前地址画一个字节(8点)
void putchar_r(uchar c)
{
send_sd(c);
}
//画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16
// bmp是图形指针
// 使用zimo21软件,采用纵向取模下高位得到bmp数据。
// col 图型的起始位置0~121
// layer 图形的位置(Y坐标)0-下半部分 非0-上半部分
// width 图形宽度8,16可选
// bmp 图形数据指针
void draw_bmp(uchar col,uchar layer,uchar width,uchar *bmp)
{
uchar x;
uchar address; //address表示显存的物理地址
uchar p=0;
uchar page=0;
uchar window=0; //page表示上下两页,window表示左右窗口(0
//左,1右)
if (layer) page=2; //左-主窗口,右-从窗口
for (x=col; x<col+width; x++)
{
if (x>121)return; //防止显示乱码
if (x>60) //左右窗口定位
{
window=1; //右-从窗口
address=x%61;
}
else
address=x; //主窗口输出
set_page(page); //上层数据输出
set_address(address);
if (window)
putchar_r(bmp[p]);
else
putchar_l(bmp[p]);
set_page(page+1); //下层数据输出
set_address(address); //列保持不变
if (window)
putchar_r(bmp[p+width]);
else
putchar_l(bmp[p+width]);
p++;
}
}
void draw_bmp1(uchar col,uchar width,uchar *bmp)
{
uchar x;
uchar address; //address表示显存的物理地址
uchar p=0;
uchar page=0;
uchar window=0; //page表示上下两页,window表示左右窗口(0
//左,1右)
// if (layer) page=2; //左-主窗口,右-从窗口
for (x=col; x<col+width; x++)
{
if (x>121)return; //防止显示乱码
if (x>60) //左右窗口定位
{
window=1; //右-从窗口
address=x%61;
}
else
address=x; //主窗口输出
set_page(page); //上层数据输出
set_address(address);
if (window)
putchar_r(bmp[p]);
else
putchar_l(bmp[p]);
set_page(page+1); //下层数据输出
set_address(address); //列保持不变
if (window)
putchar_r(bmp[p+width]);
else
putchar_l(bmp[p+width]);
//page=2;
set_page(page+2); //上层数据输出
set_address(address);
if (window)
putchar_r(bmp[p+2*width]);
else
putchar_l(bmp[p+2*width]);
set_page(page+3); //下层数据输出
set_address(address); //列保持不变
if (window)
putchar_r(bmp[p+3*width]);
else
putchar_l(bmp[p+3*width]);
p++;
}
}
//显示单个ASCII码col-列;layer-上下行:1-上,0-下;ascii_code:所要显示德ASCCII码
void disp_one_ascii(uchar col,uchar layer,uchar ascii_code,uchar mode)
{
uchar i;
for(i=0;i<16;i++) //ASCII码显示占用16个字节
{
if(mode)dot_buffer[i]=~ascii[(ascii_code-0x20)*16 + i];
else dot_buffer[i]= ascii[(ascii_code-0x20)*16 + i];
}
draw_bmp(col,layer,8,dot_buffer);
}
//显示小于4个的十进制数字
//修改缓冲区的大小可以扩展显示
#ifdef disp_ram_data
#define disp_ram_data
void disp_ram_data(uchar col,uchar layer,uchar n,uchar mode)
{
while(n--)
{
if(mode)disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
else disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
col += 8;
}
}
#endif
//ASCII(8*16) 和 汉字(16*16)显示函数
void dprintf(uchar col,uchar layer,uchar *ptr,uchar mode)
{
uchar c1,c2;
uchar i,j,k;
uchar ulen;
//uchar ucol,ulayer,umode;
uchar ucol,ulayer;
ulen = 0;
ucol = col;
ulayer = layer;
while (ptr[ulen]!= 0)ulen++; //探测字串长度
i=0;
while(i<ulen)
{
c1 = ptr[i];
c2 = ptr[i+1];
//ASCII字符与汉字内码的区别在于128做
//分界;大于128的为汉字码
if(c1 <=128) //ASCII
{
if(mode)disp_one_ascii(ucol,ulayer,c1,1);
else disp_one_ascii(ucol,ulayer,c1,0);
ucol+=8;
i++; //ASCII码的处理
}
else //中文
{
for(j=0;j<sizeof(hz16)/sizeof(hz16[0]);j++)
{ //查找定位当前汉字的点阵区
if((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
break;
}
for(k=0;k<32;k++)
{ if(mode)dot_buffer[k]=~hz16[j].zimo[k];
else dot_buffer[k]= hz16[j].zimo[k];
}
draw_bmp(ucol,ulayer,16,dot_buffer);
ucol+=16;
i+=2; //中文的处理
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -