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

📄 lcd.c

📁 单片机设计
💻 C
📖 第 1 页 / 共 2 页
字号:
void ini_lcd(void)
{
  unsigned char i;
	for(i=0;i<3;i++)
	  WriteCom(i,0xC0);
	for(i=0;i<3;i++)
	  WriteCom(i,0x3F);
}

void delay_ms(unsigned int time)
{
 unsigned int i;
 unsigned int j;
 for(i=0;i<=time;i++)
 {
   for(j=0;j<=1052;j++)
	 {
	 WDR();
	 }
 }
}

void cls_lcd(void)
{
 unsigned char R4;
 unsigned char R3;
 unsigned char A;
 unsigned char i;
 R4=0;
 A=R4;
 for(R4=0;R4<8;R4++)
 {
   A=0xB8+R4;
   for(i=0;i<3;i++)
     WriteCom(i,A);
   for(i=0;i<3;i++)
     WriteCom(i,0x40);
   R3=0x40;
   for(R3=0;R3<64;R3++)
	 {
	   for(i=0;i<3;i++)
	     WriteDat(i,0x00);
	 }
 }
}
void w_hz(unsigned char lr,unsigned char x,unsigned char y,unsigned char s[32])
{
  //column-->y,code
	//page-->x
	unsigned char column;
	unsigned char page;
	unsigned char i;
	
	x=x+0xb8;
	y=y+0x40;

	page=x;
	column=y;
	WriteCom(lr,column);
	for(i=0;i<16;i++)
	{
	  WriteCom(lr,page);
	  WriteDat(lr,s[i]);
	} 
	page++;
	column=y;
		WriteCom(lr,column);
	for(i=16;i<32;i++)
	{
	  WriteCom(lr,page);
		WriteDat(lr,s[i]);
	}
}
void nw_hz(unsigned char lr,unsigned char x,unsigned char y,unsigned char s[32])
{
  //column-->y,code
	//page-->x
	unsigned char column;
	unsigned char page;
	unsigned char i;
	//unsigned char t[32];
	x=x+0xb8;
	y=y+0x40;

	page=x;
	column=y;
	WriteCom(lr,column);
	for(i=0;i<16;i++)
	{
	  WriteCom(lr,page);
	  WriteDat(lr,~s[i]);
	} 
	page++;
	column=y;
		WriteCom(lr,column);
	for(i=16;i<32;i++)
	{
	  WriteCom(lr,page);
		WriteDat(lr,~s[i]);
	}
}

void w_fh(unsigned char lr,unsigned char x,unsigned char y,unsigned char s[16])
{
  //column-->y,code
	//page-->x
	unsigned char column;
	unsigned char page;
	unsigned char i;
	
	x=x+0xb8;
	y=y+0x40;

	page=x;
	column=y;
	WriteCom(lr,page);
	WriteCom(lr,column);
	
	for(i=0;i<8;i++)
	{
	  WriteDat(lr,s[i]);
	} 
	page++;
	column=y;
	  WriteCom(lr,page);
		WriteCom(lr,column);
	for(i=8;i<16;i++)
	{
		WriteDat(lr,s[i]);
	}
}
void disp_fh(unsigned char a,unsigned char b,unsigned char c,unsigned char dat)
{
  switch(dat)
	{
	  case 0:w_fh(a,b,c,num_0);break;
	  case 1:w_fh(a,b,c,num_1);break;
	  case 2:w_fh(a,b,c,num_2);break;
	  case 3:w_fh(a,b,c,num_3);break;
	  case 4:w_fh(a,b,c,num_4);break;
	  case 5:w_fh(a,b,c,num_5);break;
	  case 6:w_fh(a,b,c,num_6);break;
	  case 7:w_fh(a,b,c,num_7);break;
	  case 8:w_fh(a,b,c,num_8);break;
	  case 9:w_fh(a,b,c,num_9);break;
	}
}
void disp_dy(unsigned int dy)
{
  unsigned char y1,y2,y3,y4;
	y1=dy/1000;
	y2=(dy-y1*1000)/100;
	y3=(dy-y1*1000-y2*100)/10;
	y4= dy-y1*1000-y2*100-y3*10;
	disp_fh(2,2,16,y1);
	//   w_fh(2,2,24,num_p);
	disp_fh(2,2,32,y2);
	disp_fh(2,2,40,y3);
	disp_fh(2,2,48,y4);
		 
}
void disp_dl(unsigned int dy)
{
  unsigned char y1,y2,y3,y4;
	y1=dy/1000;
	y2=(dy-y1*1000)/100;
	y3=(dy-y1*1000-y2*100)/10;
	y4= dy-y1*1000-y2*100-y3*10;
	disp_fh(2,4,16,y1);
	//   w_fh(2,4,24,num_p);
	disp_fh(2,4,32,y2);
	disp_fh(2,4,40,y3);
	disp_fh(2,4,48,y4);
}

void disp_wd(unsigned char wd)
{
  unsigned char y1,y2;
	y1=wd/10;
	y2=wd-y1*10;
	disp_fh(2,6,24,y1);
	disp_fh(2,6,32,y2);

}
void disp_zt(unsigned char dat)
{
  switch(dat)
  {
	  case 0: w_hz(0,6,48,hzfang);w_hz(1,6,0,hzdian);break;
		case 1: w_hz(0,6,48,hzkuai);w_hz(1,6,0,hzchong);break;
		case 2: w_hz(0,6,48,hzjuan);w_hz(1,6,0,hzchong);break;
		case 3: w_hz(0,6,48,hzchong);w_hz(1,6,0,hzman);break;
  }
}

void disp_js(unsigned char dat)
{
if(dat<10)
 	disp_fh(0,4,52,dat);

}
void disp_main(void)
{
 /*w_hz(0,0,0,blank); w_hz(0,0,16,blank); w_hz(0,0,32,blank);*/w_hz(0,0,48,hzzhi);
 w_hz(1,0,0,hznen); w_hz(1,0,16,hzxin); w_hz(1,0,32,hzchong); w_hz(1,0,48,hzdian); 
 w_hz(2,0,0,hzqi);/* w_hz(2,0,16,blank);w_hz(2,0,32,blank);w_hz(2,0,48,blank);*/
 
 w_hz(0,2,0,hzdian);w_hz(0,2,16,hzchi);w_hz(0,2,32,hzmh);w_hz(0,2,48,hznie);
 w_hz(1,2,0,hzge);/* w_hz(1,2,16,blank);*/ w_hz(1,2,32,hzdian); w_hz(1,2,48,hzya); 
 w_hz(2,2,0,hzmh);/* w_hz(2,2,16,blank);w_hz(2,2,32,blank);*/w_fh(2,2,56,chr_v);
 
 w_hz(0,4,0,hzjie);w_hz(0,4,16,hzshu);w_hz(0,4,32,hzmh);/*w_hz(0,4,48,blank);*/
 w_hz(1,4,0,hzjie);/* w_hz(1,4,16,blank);*/ w_hz(1,4,32,hzdian); w_hz(1,4,48,hzliu); 
 w_hz(2,4,0,hzmh);/* w_hz(2,4,16,blank);w_hz(2,4,32,blank);*/w_fh(2,4,56,chr_a);
 
 w_hz(0,6,0,hzzhuang);w_hz(0,6,16,hztai);w_hz(0,6,32,hzmh);w_hz(0,6,48,hzkuai);
 w_hz(1,6,0,hzchong); /*w_hz(1,6,16,blank);*/ w_hz(1,6,32,hzwen); w_hz(1,6,48,hzdu); 
 w_hz(2,6,0,hzmh);/* w_hz(2,6,16,blank);w_hz(2,6,32,blank);*/w_hz(2,6,48,hzdu);
 w_fh(2,4,24,num_p);
 w_fh(2,2,24,num_p);

}
void scan_key(void)
{
  unsigned char keycode;
	unsigned char n_key;
	keycode=PIND&0xC8;
	keycode=~keycode;
	if(keycode!=0)
	  PORTD &=~(1<<0);
		//delay_ms(1);
	n_key=PIND&0xC8;
	n_key=~n_key;
	if(keycode==n_key)
	  disp_fh(2,0,32,keycode);
}
void main(void)
{
 init_devices();
 WDR();
 b_n=1;
 b_s=2;
 b_v=1215;
 b_a=20;
 b_t=34;
 tims1=0;
 tims2=0;
 PORTA=0x00;
 ini_lcd();
 cls_lcd();
 disp_main(); 
 disp_js(1);
 disp_zt(4);
 disp_dy(0);
 disp_dl(0);
 disp_wd(31);
 do{
 WDR();
 scan_key();
 
 delay_ms(1);
  }while(1);
}
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{
 WDR();
 
 TCNT0 = 0x8D; 
}
#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
{
 WDR();
 TCNT2 = 0x04; /*INVALID SETTING*/; //reload counter value
}

⌨️ 快捷键说明

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