⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd12864.c

📁 基于Mini51板的数字示波器设计
💻 C
字号:
#include "lcd12864.h"

void loop_lcd_is_busy(unsigned char right)
{
  unsigned char 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(unsigned char cmdcode,unsigned char right)
{
  loop_lcd_is_busy(right);
  if(right) LCD_RCW = cmdcode;
  else LCD_LCW = cmdcode;  
}

void lcd_dat_wr(unsigned char ldata,unsigned char right)
{ 
  loop_lcd_is_busy(right);
  if(right) LCD_RDW = ldata;
  else LCD_LDW = ldata;
}

void lcd_clr(void)
{
	unsigned char i,j;
	for(i=0;i<8;i++) {
		lcd_cmd_wr(ORGY+i,0);
		lcd_cmd_wr(ORGX,0);
		lcd_cmd_wr(ORGY+i,1);
		lcd_cmd_wr(ORGX,1);
		for(j=0;j<64;j++) {
			lcd_dat_wr(0,0);
			lcd_dat_wr(0,1);
		}
	}
}

void lcd_init(void)
{
  lcd_cmd_wr(DISPON,0);
  lcd_cmd_wr(DISPFIRST,0);
  lcd_cmd_wr(ORGY,0);
  lcd_cmd_wr(ORGX,0);
  lcd_cmd_wr(DISPON,1);
  lcd_cmd_wr(DISPFIRST,1);
  lcd_cmd_wr(ORGY,1);
  lcd_cmd_wr(ORGX,1);
  lcd_clr();
}

//LCD更新指定列,以列为单位,一次更新1列
void lcd_row_wr(unsigned char x,unsigned char *da)//x是列坐标,*da是8字节列数据
{
	unsigned char j;
	if(x<64) { //根据列坐标选择左右半屏
		for(j=0;j<8;j++) { //写左半屏
			lcd_cmd_wr(ORGY+j,0);
			lcd_cmd_wr(ORGX+x,0);
			lcd_dat_wr(da[j],0);
		}
	}
	else {
		x-=64;//坐标调整
		for(j=0;j<8;j++) { //写右半屏
			lcd_cmd_wr(ORGY+j,1);
			lcd_cmd_wr(ORGX+x,1);
			lcd_dat_wr(da[j],1);
		}		
	}
}
//LCD指定点显示驱动函数
void lcd_disp(unsigned char x,unsigned char y)//x水平坐标,y垂直坐标
{
	unsigned char dat[8];
	unsigned char j;
	y = 63-y;
	for(j=0;j<8;j++) dat[j] = 0x0;
	dat[y/8] |= 0x01<<(y%8);
	lcd_row_wr(x,dat);
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -