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

📄 lcd1602.i

📁 lcd液晶驱动显示原代码 根据硬件自己修改
💻 I
字号:
#line 1 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"
#line 1 "C:/PROGRA~1/icc/include/iom8v.h"




#line 7 "C:/PROGRA~1/icc/include/iom8v.h"


#line 10 "C:/PROGRA~1/icc/include/iom8v.h"


#line 13 "C:/PROGRA~1/icc/include/iom8v.h"


#line 16 "C:/PROGRA~1/icc/include/iom8v.h"






















































































































































































































































































































































































































































#line 2 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"
#line 1 "C:/PROGRA~1/icc/include/macros.h"






























#line 35 "C:/PROGRA~1/icc/include/macros.h"














void _StackCheck(void);
void _StackOverflowed(char);




#line 3 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"
#line 1 "C:\DOCUME~1\Administrator\桌面\1602/LCD1602.h"
































void lcd_init_portDB(void);
void lcd_init(void);
void lcd_write_command(unsigned char command,unsigned char wait_en);
void lcd_write_data(unsigned char char_data);
void wait_enable(void);
void lcd_set_xy( unsigned char x, unsigned char y );
void display_a_char(unsigned char x,unsigned char y,unsigned char char_data);
void display_a_string(unsigned char x,unsigned char y,unsigned char *ptr);
void display_a_fluid(unsigned char x,unsigned char y,unsigned char *ptr);
void delay_1us(void);
delay_nus(unsigned int n);
void delay_1ms(void );
void delay_nms(unsigned int n) ;
void conver_BCD(int x,unsigned char *ptr);
void lcd_display_full(void);
void lcd_display(unsigned char x0[],unsigned char x1[],unsigned char y0[],unsigned char y1[]);
void copy (unsigned char x[],unsigned char *y,unsigned char i);
void keyboard(void);
#line 4 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"

#line 12 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"


void lcd_init_portDB(void)
{
(*(volatile unsigned char *)0x38)=0xff;
(*(volatile unsigned char *)0x37)=0xff;
(*(volatile unsigned char *)0x35)=0x07;
(*(volatile unsigned char *)0x34)=0x07;
}


void lcd_init(void)
{
   delay_nms(15);
   lcd_write_command(0x38,0);
   delay_nms(5);
   lcd_write_command(0x38,0);
   delay_nms(5);
   lcd_write_command(0x38,0);
   delay_nms(5);

   lcd_write_command(0x38,1);
   lcd_write_command(0x08,1);
   lcd_write_command(0x01,1);
   lcd_write_command(0x06,1);
   lcd_write_command(0x0c,1);
}


void lcd_write_command(unsigned char command,unsigned char wait_en)
{
   if(wait_en)wait_enable();
(*(volatile unsigned char *)0x35)&=~ 0x01;
(*(volatile unsigned char *)0x35)&=~ 0x02;
(*(volatile unsigned char *)0x35)&=~ 0x04;
 asm("nop");
(*(volatile unsigned char *)0x35)|= 0x04;
(*(volatile unsigned char *)0x38)=command;
(*(volatile unsigned char *)0x35)&=~ 0x04;
}


void lcd_write_data(unsigned char char_data)
{
   wait_enable();
(*(volatile unsigned char *)0x35)|= 0x01;
(*(volatile unsigned char *)0x35)&=~ 0x02;
(*(volatile unsigned char *)0x35)&=~ 0x04;
 asm("nop");
(*(volatile unsigned char *)0x35)|= 0x04;
(*(volatile unsigned char *)0x38)=char_data;
(*(volatile unsigned char *)0x35)&=~ 0x04;
}



void wait_enable(void)
{
(*(volatile unsigned char *)0x37)&=~ 0x80;
(*(volatile unsigned char *)0x35)&=~ 0x01;
(*(volatile unsigned char *)0x35)|= 0x02;
 asm("nop");
(*(volatile unsigned char *)0x35)|= 0x04;
   while((*(volatile unsigned char *)0x36)& 0x80);
(*(volatile unsigned char *)0x35)&=~ 0x04;
(*(volatile unsigned char *)0x37)|= 0x80;
}

#line 83 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"
void lcd_set_xy( unsigned char x, unsigned char y )
{
    unsigned char address;
    if (y == 0)
       address = 0x80 + x;
    else
        address = 0xc0 + x;
    lcd_write_command(address,1);
}

void display_a_char(unsigned char x,unsigned char y,unsigned char char_data)
{
    lcd_set_xy(x,y);
    lcd_write_data(char_data);
}




void display_a_string(unsigned char x,unsigned char y,unsigned char *ptr)
{

    lcd_set_xy(x,y);
   while(*ptr)
    {
     lcd_write_data(*ptr);
     ptr++;
    }
}

void display_a_fluid(unsigned char x,unsigned char y,unsigned char *ptr)
	   			{ lcd_write_command(0x07,1);
	   			  lcd_set_xy(x,y);
	   			  while(*ptr)
				    {
	   			     lcd_write_data(*ptr);
				     delay_nms(200);
					 ptr++;
					}
				}


void delay_1ms(void )
{
   unsigned int i ;
   unsigned char xtal;
   xtal=4;
   for (i=1;i<(xtal*143-2);i++)
   {
    ;
   }
}

void delay_nms(unsigned int n)
{
   unsigned int i=0 ;
   for(i=0;i<n;i++)
   {
    delay_1ms();
   }
}
	void keyboard(void)
 {
  int i;
  while (1)
    {
     i=~(*(volatile unsigned char *)0x30);
  	 i&=0xf0;
  	 if(i== 0x80) {
  	    		     if(setspeed== 0x10)setspeed= 0x01;
  	 	    	     else setspeed++;
					 conver_BCD(1000,str10);
					 lcd_write_command(0x01,0);
					 lcd_display_full();
			         }
  	 if(i== 0x40){
  	    		     if(setspeed== 0x01)setspeed= 0x10;
		    	     else setspeed--;
					 lcd_write_command(0x01,0);
					 I++;
	 				 if (I>=3)I=0;
					 lcd_display_full();
			         }
     if(i== 0x10) {
				     break;

		    	     }
	 delay_nms(100);

	}
 }

void display_a_fluid(unsigned char x,unsigned char y,unsigned char *ptr)
	   			{ lcd_write_command(0x07,1);
	   			  lcd_set_xy(x,y);
	   			  while(*ptr)
				    {
	   			     lcd_write_data(*ptr);
				     delay_nms(200);
					 ptr++;
					}
				}

void copy (unsigned char x[],unsigned char *y,unsigned char i)
	 {
	  while (*y){x[i]=*y; *y++; i++;}
	 }

void lcd_display_full(void)
     {
	  if(I==0){lcd_display(str1,str10,str2,str20);}
	  if(I==1){lcd_display(str2,str20,str3,str30);}
	  if(I==2){lcd_display(str3,str30,str4,str40);}
	  if(I==3){lcd_display(str4,str40,str1,str10);}
	 }

void lcd_display(unsigned char x0[],unsigned char x1[],unsigned char y0[],unsigned char y1[])
 	 {
	 	display_a_string(0,0,x0);
	    display_a_string(7,0,x1);
		display_a_string(0,1,y0);
		display_a_string(7,1,y1);
	 }
void conver_BCD(int x,unsigned char string[])
	{int i;
	 for(i=0;i<4;i++)
	 {string[i]=(char)x%10;x/=10;}
	 }


#line 216 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"



#line 227 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"



#line 235 "C:\DOCUME~1\Administrator\桌面\1602\LCD1602.c"

⌨️ 快捷键说明

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