📄 lcd12864.h
字号:
#ifndef __LCD_12864_H__
#define __LCD_12864_H__
#include "math.h"
/************常用操作命令和参数定义********/
#define DISPON 0x3f //display on
#define DISPOFF 0x3e //display off
#define DISPFIRST 0xc0 //define the first row
#define SETY 0xb8 //define page address
#define SETX 0x40 //define column address
/*以下定义与硬件电路设计有关,参考Mini51.H*/
#define LCD_LCW M51_LCD12864_LCW
#define LCD_LDW M51_LCD12864_LDW
#define LCD_LCR M51_LCD12864_LCR
#define LCD_LDR M51_LCD12864_LDR
#define LCD_RCW M51_LCD12864_RCW
#define LCD_RDW M51_LCD12864_RDW
#define LCD_RCR M51_LCD12864_RCR
#define LCD_RDR M51_LCD12864_RDR
unsigned char xdata *p;//需要单片机外部1K RAM支持!!!!!!!!
void loop_lcd12864_is_busy(uchar right)
{
uchar tmp,counter=0;
do
{
if(right) tmp = LCD_RCR;
else tmp = LCD_LCR;
if(counter++>50) break;//超时跳出
}
while ((tmp|0x7f)==0xff);
}
void lcd_cmd_wr(uchar cmdcode,uchar right)
{
loop_lcd12864_is_busy(right);
if(right) LCD_RCW = cmdcode;
else LCD_LCW = cmdcode;
}
void lcd_data_wr(uchar ldata,uchar right)
{
if(right) LCD_RDW = ldata;
else LCD_LDW = ldata;
}
void lcd12864_init(void)
{
lcd_cmd_wr(DISPON,0);
lcd_cmd_wr(DISPFIRST,0);
lcd_cmd_wr(SETY,0);
lcd_cmd_wr(SETX,0);
lcd_cmd_wr(DISPON,1);
lcd_cmd_wr(DISPFIRST,1);
lcd_cmd_wr(SETY,1);
lcd_cmd_wr(SETX,1);
}
void lcd12864_clr(void)
{
uchar i,j;
for(i=0;i<8;i++)
{
lcd_cmd_wr(SETY+i,0);
lcd_cmd_wr(SETX,0);
lcd_cmd_wr(SETY+i,1);
lcd_cmd_wr(SETX,1);
for(j=0;j<64;j++)
{
lcd_data_wr(0,0);
lcd_data_wr(0,1);
}
}
}
/*图片写入函数*/
void lcd12864_put_xywhb(uchar x,y,w,h,uchar *bmp)
{
uchar i,j;
h = h/8;
for(i=0;i<h;i++)
{
lcd_cmd_wr(SETY+y+i,0);
lcd_cmd_wr(SETX+x,0);
for(j=0;j<w-64;j++)
lcd_data_wr(bmp[128*i+j],0);
lcd_cmd_wr(SETY+y+i,1);
lcd_cmd_wr(SETX+x,1);
for(j=64;j<w;j++)
lcd_data_wr(bmp[128*i+j],1);
}
}
void set_dot(unsigned char x,y) //描(x,y)点
{
p=(y/8)*128+x;
*p |= 1<<(y%8);
}
/*
void clr_dot(unsigned char x,y) //清除(x,y)点
{
p=(y/8)*128+x;
*p &= ~(1<<(y%8));
} */
void line(unsigned char x1,y1,x2,y2)//画直线,x1<x2<127,y1<y2<64
{
unsigned char i;
for(i=x1;i<x2+1;i++)
set_dot(i,(y2-y1)*(i-x1)/(x2-x1)+y1);
}
void circle(unsigned char x,y,r)//画圆圈,x1<x2<127,y1<y2<64
{
unsigned char i;
for(i=x-r;i<x+r+1;i++) {
set_dot(i,y-sqrt(r*r-(x-i)*(x-i)));
set_dot(i,y+sqrt(r*r-(x-i)*(x-i)));
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -