📄 lcd1602.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 + -