#define E PORTB.0 #define CS1 PORTB.1 #define CS2 PORTB.2 #define RW PORTB.7 #define DI PORTC.5 #define LCD_OUT PORTD #define nop() #asm("nop") unsigned char LCD_ST; unsigned char delay_LCD=3; unsigned char LCD_Ready() { DDRD=0x00; DI=0; RW=1; E=1; while ((PIND&0b10110000)!=0b00000000); return (1); } void init_LCD() { unsigned char i; DDRD=0xff; E=1; RW=0; DI=0; LCD_OUT=0b00111110; //关屏 E=0; delay_ms(1); E=1; RW=0; DI=0; for(i=0;i63) y1=63; if (y2>63) y2=63; if (y1<1) y1=0; if (y2<1) y2=0; if (y1>y2) { y=y1; y1=y2; y2=y; } y=y2-y1; if (x>63) { CS1=0; CS2=1; } else { CS1=1; CS2=0; } a1=(y1&0b00111000)>>3; //y1的页 b1=(y1&0b00000111); //y1的位 a2=(y2&0b00111000)>>3; //y2的页 b2=(y2&0b00000111); //y2的位 ay=a2-a1; //y2-y1的页 by=(y&0b00000111); //y2-y1的位 if (ay!=0) { switch (b1) //上面的点 { case (0): LCD_DATA=0b00000000; break; case (1): LCD_DATA=0b00000001; break; case (2): LCD_DATA=0b00000011; break; case (3): LCD_DATA=0b00000111; break; case (4): LCD_DATA=0b00001111; break; case (5): LCD_DATA=0b00011111; break; case (6): LCD_DATA=0b00111111; break; case (7): LCD_DATA=0b01111111; break; } Setup_Y(a1); Setup_X(x); Display_Data(LCD_DATA); switch (b2) //下面的点 { case (0): LCD_DATA=0b11111110; break; case (1): LCD_DATA=0b11111100; break; case (2): LCD_DATA=0b11111000; break; case (3): LCD_DATA=0b11110000; break; case (4): LCD_DATA=0b11100000; break; case (5): LCD_DATA=0b11000000; break; case (6): LCD_DATA=0b10000000; break; case (7): LCD_DATA=0b00000000; break; } Setup_Y(a2); Setup_X(x); Display_Data(LCD_DATA); for (i=1;i>3; y2=0x07&y; switch (y2) { case (0): LCD_DATA=0b11111110; break; case (1): LCD_DATA=0b11111101; break; case (2): LCD_DATA=0b11111011; break; case (3): LCD_DATA=0b11110111; break; case (4): LCD_DATA=0b11101111; break; case (5): LCD_DATA=0b11011111; break; case (6): LCD_DATA=0b10111111; break; case (7): LCD_DATA=0b01111111; break; } if (x>63) { x=x-63; CS2=1; CS1=0; } else { CS1=1; CS2=0; } Setup_X(0b01000000|x); Setup_Y(0b10111000|y1); Display_Data(LCD_DATA); } void clear_LCD() //清屏 { unsigned char x,y; unsigned char i; CS1=1; CS2=0; for(i=0;i<2;i++) { for(y=0;y<8;y++) { x=0; Setup_X(0b01000000|x); Setup_Y(0b10111000|y); for (x=0;x<64;x++) Display_Data(0xff); } CS1=0; CS2=1; } } void Display_Data(unsigned char LCD_DATA) //显示数据 { unsigned char i; DDRD=0xff; E=0; RW=0; DI=1; E=1; for(i=0;i63) { x=x-63; CS2=1; CS1=0; } else { CS1=1; CS2=0; } Setup_X(0b01000000|x); for (i=0;i<5;i++) { LCD_DATA=data[i]; Setup_Y(0b10111000|y); Display_Data(LCD_DATA); } } void Erase_V_Line(unsigned char x) { unsigned char i; if (x>63) { x=x-64; CS1=0; CS2=1; } else { CS1=1; CS2=0; } for (i=0;i<8;i++) { Setup_X(0b01000000|x); Setup_Y(0b10111000|i); //==Setup_Y(0b10111000|7); Display_Data(0b11111111); } } void Define_Z() { unsigned char i; CS1=1;CS2=1; DDRD=0xff; E=0; RW=0; DI=0; E=1; for(i=0;i