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

📄 lcd.c

📁 手把手教你学AVR单片机C程序设计实验程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*---------------判LCM忙子函数---------------*/
void lcd_busy(void)      		
{
uchar val;                     	
RS_0;_NOP();_NOP();
RW_1;_NOP();_NOP();
DataPort=0x00;					
 	while(1)
	{							
	EN_1;_NOP();_NOP();  
	DDRA=0x00;
	val=PINA;			 		
	if(val<0x80) break;      	
	EN_0;_NOP();_NOP(); 			
	}
DDRA=0xff;             			
EN_0;_NOP();_NOP();         			
}                    			
/*--------------写指令到LCM子函数---------------*/
void wcode(uchar c,uchar sel_l,uchar sel_r) 
{	
if(sel_l==1)CS1_1;
else CS1_0;						
_NOP();_NOP();            		
if(sel_r==1)CS2_1;
else CS2_0;
_NOP();_NOP();					
lcd_busy();						
RS_0;_NOP();_NOP();				
RW_0;_NOP();_NOP();					
DataPort=c;						
EN_1;_NOP();_NOP();				
EN_0;_NOP();_NOP();				
}								
/*---------------写数据到LCM子函数-------------*/
void wdata(uchar c,uchar sel_l,uchar sel_r) 
{								
if(sel_l==1)CS1_1;
else CS1_0;		
_NOP();_NOP();             
if(sel_r==1)CS2_1;
else CS2_0;                 
_NOP();_NOP();					
lcd_busy();						
RS_1;_NOP();_NOP();					
RW_0;_NOP();_NOP();			
DataPort=c;                   
EN_1;_NOP();_NOP();		
EN_0;_NOP();_NOP();		
}						
/*根据x、y地址定位,将数据写入LCM左半屏或右半屏的子函数*/
void lw(uchar x, uchar y, uchar dd)	
{								
if(x>=64) 						
{set_xy(x-64,y);				
wdata(dd,0,1);}		
else 						
{set_xy(x,y);				
wdata(dd,1,0);}			
}						
/*---------------设定起始行子函数--------------*/
void set_startline(uchar i) 	
{								
i=0xc0+i;					
wcode(i,1,1);				
}						
/*---------------定位x方向、y方向的子函数--------------*/
void set_xy(uchar x,uchar y) 	
{								
x=x+0x40;                      	
y=y+0xb8;                    	
wcode(x,1,1);                  
wcode(y,1,1);                  
}                             	
/*---------------屏幕开启、关闭子函数--------------*/
void dison_off(uchar o) 		
{                              	
o=o+0x3e;                    	
wcode(o,1,1);                
}                              
/*---------------复位子函数---------------*/
void reset(void)                
{                       		
RST_0;                     	
Delay_nms(10);				
RST_1;							
Delay_nms(10);				
}								
/*--------------LCM初始化子函数-------------*/
void lcd_init(void) 			
{uchar x,y;              		
reset();						
set_startline(0);				
dison_off(0);					
  for(y=0;y<8;y++)				
  {							
    for(x=0;x<128;x++)lw(x,y,0);
  }							
dison_off(1);				
}						
/*---------------显示一个汉字子函数--------------*/
void display_hz(uchar xx, uchar yy, uchar n, uchar fb,uchar const *p) 
{					
uchar i,dx;                     
for(i=0;i<16;i++)				
{dx=p[2*i+n*32];				
if(fb)dx=255-dx;				
lw(xx*8+i,yy,dx);				
dx=p[(2*i+1)+n*32];			
if(fb)dx=255-dx;			
lw(xx*8+i,yy+1,dx);			
}								
}	
/******************************************/

void display_chinese(void)
{
uchar loop;
for(loop=0;loop<8;loop++)				
	{display_hz(2*loop,0,loop,1,chinese);}		
/****************************************/
for(loop=0;loop<8;loop++)				
	{display_hz(2*loop,2,loop+8,1,chinese);}	
	
/**************************************/
for(loop=0;loop<8;loop++)				
	{display_hz(2*loop,4,loop+16,1,chinese);}
/*******************************************/
for(loop=0;loop<8;loop++)				
	{display_hz(2*loop,6,loop+24,1,chinese);}
}

/****************************************/
/* 一个字串的输出   */
/****************************************/
void Putstr(uchar const *puts,uchar i)
 {
  uchar j,X;
  for (j=0;j<i;j++)
  {
   X = puts[j];
   Putedot(X-0x20);  /*ascii码表从0x20开始*/
  }
 }
/****************************************/
/*   半角字符点阵码数据输出  */
/****************************************/
void Putedot(uchar Order)
 {
 uchar i,bakerx,bakery; /*共定义4个局部变量   */
 int x;   /*偏移量,字符量少的可以定义为UCHAR */
 bakerx = col;  /*暂存x,y坐标,已备下半个字符使用 */
 bakery = row;
 x=Order*16;  /*半角字符,每个字符16字节 */
/*上半个字符输出,8列 */
 for(i=0;i<8;i++)
  {
  cbyte = Ezk[x];    /*取点阵码,rom数组 */
  lw(col,row,cbyte);    /*写输出一字节  */
  x++;
  col++;
  if (col==128){col=0;row++;row++;}; /*下一列,如果列越界换行*/
   if (row>7) row=0;  /*如果行越界,返回首行 */
  }     /*上半个字符输出结束 */

 col = bakerx;     /*列对齐  */
 row = bakery+1;     /*指向下半个字符行 */
/*下半个字符输出,8列 */
 for(i=0;i<8;i++)
  {
  cbyte = Ezk[x];    /*取点阵码  */
  lw(col,row,cbyte);     /*写输出一字节  */
  x++;
  col++;
  if (col==128){col=0;row=row+2;}; /*下一列,如果列越界换行*/
   if (row>7) row=1;  /*如果行越界,返回首行 */
  }     /*下半个字符输出结束 */
 row=bakery;
 }      /*整个字符输出结束 */
 /******************************************************/
 /*---------------显示一幅图片的子函数--------------*/
 /******************************************************/
void display_tu(uchar fb) 				
{									
uchar i,dx,n; 							
  for(n=0;n<8;n++)					
  {									
    for(i=0;i<128;i++)					
    {dx=tu[i+n*128];					
      if(fb)dx=255-dx;					
      lw(i,n,dx);						
    }								
  }  								
}									

 
/****************************************/
/* 定义ASCII字库8列*16行  */
/****************************************/
uchar const Ezk[]={
/*-文字: --0x20 */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:!--0x21 */
  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x27,0x00,0x00,0x00,0x00,
/*-文字:"--0x22 */
  0x00,0x08,0x04,0x02,0x08,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:#--0x23 */
  0x40,0x40,0xF8,0x40,0x40,0xF8,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,
/*-文字:$--0x24 */
  0x00,0x70,0x88,0xFC,0x08,0x08,0x30,0x00,0x00,0x1C,0x20,0xFF,0x21,0x22,0x1C,0x00,
/*-文字:%--0x25 */
  0xF0,0x08,0xF0,0x80,0x70,0x08,0x00,0x00,0x00,0x31,0x0E,0x01,0x1E,0x21,0x1E,0x00,
/*-文字:&--0x26 */
  0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x18,0x16,0x20,0x00,
/*-文字:'--0x27 */
  0x20,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:(--0x28 */
  0x00,0x00,0x00,0x00,0xC0,0x30,0x08,0x04,0x00,0x00,0x00,0x00,0x03,0x0C,0x10,0x20,
/*-文字:)--0x29 */
  0x04,0x08,0x30,0xC0,0x00,0x00,0x00,0x00,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x00,
/*-文字:*--0x2a */
  0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
/*-文字:+--0x2b */
  0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,0x00,
/*-文字:,--0x2c */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:---0x2d */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
/*-文字:.--0x2e */
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,
/*-文字:/--ox2f */
  0x00,0x00,0x00,0x00,0x00,0xE0,0x18,0x04,0x00,0x40,0x30,0x0C,0x03,0x00,0x00,0x00,
/*-文字:0--0x30 */
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-文字:1--0x31 */
  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-文字:2--0x32 */
  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-文字:3--0x33 */
  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-文字:4--0x34 */
  0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-文字:5--0x35 */
  0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-文字:6--0x36 */
  0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-文字:7--0x37 */
  0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-文字:8--0x38 */
  0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-文字:9--0x39 */
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,
/*-文字::-- */
  0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
/*-文字:/-- */
  0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,
/*-文字:<-- */
  0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,
/*-文字:=-- */
  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
/*-文字:>-- */
  0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,
/*-文字:?-- */
  0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x00,0x00,0x26,0x01,0x00,0x00,0x00,
/*-文字:@-- */
  0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x28,0x27,0x28,0x07,0x00,
/*-文字:A-- */
  0x00,0x00,0xE0,0x18,0x18,0xE0,0x00,0x00,0x30,0x0F,0x04,0x04,0x04,0x04,0x0F,0x30,
/*-文字:B-- */
  0xF8,0x08,0x08,0x08,0x08,0x90,0x60,0x00,0x3F,0x21,0x21,0x21,0x21,0x12,0x0C,0x00,
/*-文字:C-- */
  0xE0,0x10,0x08,0x08,0x08,0x10,0x60,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0C,0x00,
/*-文字:D-- */
  0xF8,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x3F,0x20,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-文字:E-- */
  0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x20,0x00,
/*-文字:F-- */
  0xF8,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x3F,0x01,0x01,0x01,0x01,0x01,0x00,0x00,
/*-文字:G-- */
  0xE0,0x10,0x08,0x08,0x08,0x10,0x60,0x00,0x0F,0x10,0x20,0x20,0x21,0x11,0x3F,0x00,
/*-文字:H-- */
  0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x3F,0x01,0x01,0x01,0x01,0x3F,0x00,
/*-文字:I-- */
  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-文字:J-- */
  0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x1C,0x20,0x20,0x20,0x20,0x1F,0x00,
/*-文字:K-- */
  0x00,0xF8,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x3F,0x01,0x00,0x03,0x04,0x18,0x20,
/*-文字:L-- */
  0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*-文字:M-- */
  0xF8,0xE0,0x00,0x00,0x00,0xE0,0xF8,0x00,0x3F,0x00,0x0F,0x30,0x0F,0x00,0x3F,0x00,
/*-文字:N-- */
  0x00,0xF8,0x30,0xC0,0x00,0x00,0xF8,0x00,0x00,0x3F,0x00,0x01,0x06,0x18,0x3F,0x00,
/*-文字:O-- */
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-文字:P-- */
  0xF8,0x08,0x08,0x08,0x08,0x10,0xE0,0x00,0x3F,0x02,0x02,0x02,0x02,0x01,0x00,0x00,
/*-文字:Q-- */
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x2C,0x10,0x2F,0x00,
/*-文字:R-- */
  0xF8,0x08,0x08,0x08,0x08,0x90,0x60,0x00,0x3F,0x01,0x01,0x01,0x07,0x18,0x20,0x00,
/*-文字:S-- */
  0x60,0x90,0x88,0x08,0x08,0x10,0x20,0x00,0x0C,0x10,0x20,0x21,0x21,0x12,0x0C,0x00,
/*-文字:T-- */
  0x08,0x08,0x08,0xF8,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,

⌨️ 快捷键说明

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