?? main.c
字號:
//包含所需頭文件
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
/*------宏定義------*/
#define uchar unsigned char
#define uint unsigned int
#define BIT(x) (1<<(x))
#define good 0
#define odd_parity_error 1
#define decode_error 2
#define last_bit_error 3
#define nofind_start 4
#define col_parity_error 5
#define lcd_data_ddr DDRD
#define lcd_data_port PORTD
#define lcd_data_pin PIND
#define lcd_cs1 PB5
#define lcd_cs1_ddr DDRB
#define lcd_cs1_port PORTB
#define lcd_cs1_pin PINB
#define lcd_cs2 PB1
#define lcd_cs2_ddr DDRB
#define lcd_cs2_port PORTB
#define lcd_cs2_pin PINB
#define lcd_rw PB2
#define lcd_rw_ddr DDRB
#define lcd_rw_port PORTB
#define lcd_rw_pin PINB
#define lcd_a0 PB4
#define lcd_a0_ddr DDRB
#define lcd_a0_port PORTB
#define lcd_a0_pin PINB
#define LCD_CMD_COL 0x00
#define LCD_CMD_PAGE 0xb8
#define LCD_LEFT 0
#define LCD_TOP 0
#define LCD_RIGHT 127
#define LCD_BOTTOM 31
#define adc_on ADCSRA |= (1 << ADSC);
#define adc_off ADCSRA &= ~(1 << ADSC);
#define ENGLISHCHARDOTSIZE 16
#define ENGLISHCHARSIZE 8
#define CHINESECHARDOTSIZE 32
#define CHINESECHARSIZE 16
#define CHINESECHARNUMBER 4
prog_char EnglishCharDot[] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",32*/
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x33,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,/*"!",33*/
0x00,0x00,0x10,0x00,0x0C,0x00,0x06,0x00,0x10,0x00,0x0C,0x00,0x06,0x00,0x00,0x00,/*""",34*/
0x40,0x04,0xC0,0x3F,0x78,0x04,0x40,0x04,0xC0,0x3F,0x78,0x04,0x40,0x04,0x00,0x00,/*"#",35*/
0x00,0x00,0x70,0x18,0x88,0x20,0xFC,0xFF,0x08,0x21,0x30,0x1E,0x00,0x00,0x00,0x00,/*"$",36*/
0xF0,0x00,0x08,0x21,0xF0,0x1C,0x00,0x03,0xE0,0x1E,0x18,0x21,0x00,0x1E,0x00,0x00,/*"%",37*/
0x00,0x1E,0xF0,0x21,0x08,0x23,0x88,0x24,0x70,0x19,0x00,0x27,0x00,0x21,0x00,0x10,/*"&",38*/
0x10,0x00,0x16,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",39*/
0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x07,0x18,0x18,0x04,0x20,0x02,0x40,0x00,0x00,/*"(",40*/
0x00,0x00,0x02,0x40,0x04,0x20,0x18,0x18,0xE0,0x07,0x00,0x00,0x00,0x00,0x00,0x00,/*")",41*/
0x40,0x02,0x40,0x02,0x80,0x01,0xF0,0x0F,0x80,0x01,0x40,0x02,0x40,0x02,0x00,0x00,/*"*",42*/
0x00,0x01,0x00,0x01,0x00,0x01,0xF0,0x1F,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x00,/*"+",43*/
0x00,0x80,0x00,0xB0,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*",",44*/
0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,/*"-",45*/
0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",46*/
0x00,0x00,0x00,0x60,0x00,0x18,0x00,0x06,0x80,0x01,0x60,0x00,0x18,0x00,0x04,0x00,/*"/",47*/
0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"0",48*/
0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*"1",49*/
0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00,/*"2",50*/
0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00,/*"3",51*/
0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00,/*"4",52*/
0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,/*"5",53*/
0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00,/*"6",54*/
0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00,/*"7",55*/
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,/*"8",56*/
0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00,/*"9",57*/
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,/*":",58*/
0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*";",59*/
0x00,0x00,0x00,0x01,0x80,0x02,0x40,0x04,0x20,0x08,0x10,0x10,0x08,0x20,0x00,0x00,/*"<",60*/
0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x00,0x00,/*"=",61*/
0x00,0x00,0x08,0x20,0x10,0x10,0x20,0x08,0x40,0x04,0x80,0x02,0x00,0x01,0x00,0x00,/*">",62*/
0x00,0x00,0x70,0x00,0x48,0x00,0x08,0x30,0x08,0x36,0x08,0x01,0xF0,0x00,0x00,0x00,/*"?",63*/
0xC0,0x07,0x30,0x18,0xC8,0x27,0x28,0x24,0xE8,0x23,0x10,0x14,0xE0,0x0B,0x00,0x00,/*"@",64*/
0x00,0x20,0x00,0x3C,0xC0,0x23,0x38,0x02,0xE0,0x02,0x00,0x27,0x00,0x38,0x00,0x20,/*"A",65*/
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0x88,0x20,0x70,0x11,0x00,0x0E,0x00,0x00,/*"B",66*/
0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x38,0x08,0x00,0x00,/*"C",67*/
0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"D",68*/
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x20,0xE8,0x23,0x08,0x20,0x10,0x18,0x00,0x00,/*"E",69*/
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0xE8,0x03,0x08,0x00,0x10,0x00,0x00,0x00,/*"F",70*/
0xC0,0x07,0x30,0x18,0x08,0x20,0x08,0x20,0x08,0x22,0x38,0x1E,0x00,0x02,0x00,0x00,/*"G",71*/
0x08,0x20,0xF8,0x3F,0x08,0x21,0x00,0x01,0x00,0x01,0x08,0x21,0xF8,0x3F,0x08,0x20,/*"H",72*/
0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x20,0x00,0x00,0x00,0x00,/*"I",73*/
0x00,0xC0,0x00,0x80,0x08,0x80,0x08,0x80,0xF8,0x7F,0x08,0x00,0x08,0x00,0x00,0x00,/*"J",74*/
0x08,0x20,0xF8,0x3F,0x88,0x20,0xC0,0x01,0x28,0x26,0x18,0x38,0x08,0x20,0x00,0x00,/*"K",75*/
0x08,0x20,0xF8,0x3F,0x08,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x30,0x00,0x00,/*"L",76*/
0x08,0x20,0xF8,0x3F,0xF8,0x00,0x00,0x3F,0xF8,0x00,0xF8,0x3F,0x08,0x20,0x00,0x00,/*"M",77*/
0x08,0x20,0xF8,0x3F,0x30,0x20,0xC0,0x00,0x00,0x07,0x08,0x18,0xF8,0x3F,0x08,0x00,/*"N",78*/
0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00,/*"O",79*/
0x08,0x20,0xF8,0x3F,0x08,0x21,0x08,0x01,0x08,0x01,0x08,0x01,0xF0,0x00,0x00,0x00,/*"P",80*/
0xE0,0x0F,0x10,0x18,0x08,0x24,0x08,0x24,0x08,0x38,0x10,0x50,0xE0,0x4F,0x00,0x00,/*"Q",81*/
0x08,0x20,0xF8,0x3F,0x88,0x20,0x88,0x00,0x88,0x03,0x88,0x0C,0x70,0x30,0x00,0x20,/*"R",82*/
0x00,0x00,0x70,0x38,0x88,0x20,0x08,0x21,0x08,0x21,0x08,0x22,0x38,0x1C,0x00,0x00,/*"S",83*/
0x18,0x00,0x08,0x00,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x00,0x18,0x00,0x00,0x00,/*"T",84*/
0x08,0x00,0xF8,0x1F,0x08,0x20,0x00,0x20,0x00,0x20,0x08,0x20,0xF8,0x1F,0x08,0x00,/*"U",85*/
0x08,0x00,0x78,0x00,0x88,0x07,0x00,0x38,0x00,0x0E,0xC8,0x01,0x38,0x00,0x08,0x00,/*"V",86*/
0xF8,0x03,0x08,0x3C,0x00,0x07,0xF8,0x00,0x00,0x07,0x08,0x3C,0xF8,0x03,0x00,0x00,/*"W",87*/
0x08,0x20,0x18,0x30,0x68,0x2C,0x80,0x03,0x80,0x03,0x68,0x2C,0x18,0x30,0x08,0x20,/*"X",88*/
0x08,0x00,0x38,0x00,0xC8,0x20,0x00,0x3F,0xC8,0x20,0x38,0x00,0x08,0x00,0x00,0x00,/*"Y",89*/
0x10,0x20,0x08,0x38,0x08,0x26,0x08,0x21,0xC8,0x20,0x38,0x20,0x08,0x18,0x00,0x00,/*"Z",90*/
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x02,0x40,0x02,0x40,0x02,0x40,0x00,0x00,/*"[",91*/
0x00,0x00,0x0C,0x00,0x30,0x00,0xC0,0x01,0x00,0x06,0x00,0x38,0x00,0xC0,0x00,0x00,/*"\",92*/
0x00,0x00,0x02,0x40,0x02,0x40,0x02,0x40,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*"]",93*/
0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00,/*"^",94*/
0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,/*"_",95*/
0x00,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"`",96*/
0x00,0x00,0x00,0x19,0x80,0x24,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x3F,0x00,0x20,/*"a",97*/
0x08,0x00,0xF8,0x3F,0x00,0x11,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00,/*"b",98*/
0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x00,/*"c",99*/
0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x88,0x10,0xF8,0x3F,0x00,0x20,/*"d",100*/
0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,/*"e",101*/
0x00,0x00,0x80,0x20,0x80,0x20,0xF0,0x3F,0x88,0x20,0x88,0x20,0x88,0x00,0x18,0x00,/*"f",102*/
0x00,0x00,0x00,0x6B,0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x93,0x80,0x60,0x00,0x00,/*"g",103*/
0x08,0x20,0xF8,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20,/*"h",104*/
0x00,0x00,0x80,0x20,0x98,0x20,0x98,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*"i",105*/
0x00,0x00,0x00,0xC0,0x00,0x80,0x80,0x80,0x98,0x80,0x98,0x7F,0x00,0x00,0x00,0x00,/*"j",106*/
0x08,0x20,0xF8,0x3F,0x00,0x24,0x00,0x02,0x80,0x2D,0x80,0x30,0x80,0x20,0x00,0x00,/*"k",107*/
0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,/*"l",108*/
0x80,0x20,0x80,0x3F,0x80,0x20,0x80,0x00,0x80,0x3F,0x80,0x20,0x80,0x00,0x00,0x3F,/*"m",109*/
0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x00,0x80,0x00,0x80,0x20,0x00,0x3F,0x00,0x20,/*"n",110*/
0x00,0x00,0x00,0x1F,0x80,0x20,0x80,0x20,0x80,0x20,0x80,0x20,0x00,0x1F,0x00,0x00,/*"o",111*/
0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00,/*"p",112*/
0x00,0x00,0x00,0x0E,0x00,0x11,0x80,0x20,0x80,0x20,0x80,0xA0,0x80,0xFF,0x00,0x80,/*"q",113*/
0x80,0x20,0x80,0x20,0x80,0x3F,0x00,0x21,0x80,0x20,0x80,0x00,0x80,0x01,0x00,0x00,/*"r",114*/
0x00,0x00,0x00,0x33,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x24,0x80,0x19,0x00,0x00,/*"s",115*/
0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x00,0x00,0x00,/*"t",116*/
0x80,0x00,0x80,0x1F,0x00,0x20,0x00,0x20,0x00,0x20,0x80,0x10,0x80,0x3F,0x00,0x20,/*"u",117*/
0x80,0x00,0x80,0x01,0x80,0x0E,0x00,0x30,0x00,0x08,0x80,0x06,0x80,0x01,0x80,0x00,/*"v",118*/
0x80,0x0F,0x80,0x30,0x00,0x0C,0x80,0x03,0x00,0x0C,0x80,0x30,0x80,0x0F,0x80,0x00,/*"w",119*/
0x00,0x00,0x80,0x20,0x80,0x31,0x00,0x2E,0x80,0x0E,0x80,0x31,0x80,0x20,0x00,0x00,/*"x",120*/
0x80,0x80,0x80,0x81,0x80,0x8E,0x00,0x70,0x00,0x18,0x80,0x06,0x80,0x01,0x80,0x00,/*"y",121*/
0x00,0x00,0x80,0x21,0x80,0x30,0x80,0x2C,0x80,0x22,0x80,0x21,0x80,0x30,0x00,0x00,/*"z",122*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x7C,0x3F,0x02,0x40,0x02,0x40,/*"{",123*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,/*"|",124*/
0x00,0x00,0x02,0x40,0x02,0x40,0x7C,0x3F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"}",125*/
0x00,0x00,0x06,0x00,0x01,0x00,0x01,0x00,0x02,0x00,0x02,0x00,0x04,0x00,0x04,0x00 /*"~",126*/
};
prog_int16_t ChineseCode[] = {
0xb6c1,
0xbfa8,
0xc6f7,
0xbac5
};
prog_char ChineseCharDot[] = {
0x40,0x00,0x42,0x00,0xCC,0x7F,0x04,0x20,0x00,0x10,0x50,0x82,0x94,0x43,0x34,0x22,0xD4,0x12,0x1F,0x0A,0xD4,0x07,0x14,0x0A,0x54,0x12,0x34,0xE2,0x10,0x42,0x00,0x00,//讀0
0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0xFF,0xFF,0x44,0x00,0x44,0x02,0x44,0x04,0x44,0x0C,0x44,0x38,0x44,0x10,0x40,0x00,0x00,0x00,//卡1
0x40,0x02,0x40,0x02,0x4F,0x7E,0x49,0x45,0x49,0x45,0xC9,0x44,0xCF,0x7C,0x70,0x00,0xC0,0x7C,0xCF,0x44,0x49,0x45,0x59,0x45,0x69,0x7E,0x4F,0x06,0x00,0x02,0x00,0x00,//器2
0x40,0x00,0x40,0x00,0x40,0x00,0x5F,0x02,0xD1,0x07,0x51,0x02,0x51,0x02,0x51,0x22,0x51,0x42,0x51,0x82,0x51,0x42,0x5F,0x3E,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00 //號3
};
unsigned char Lcd_CurrentX,Lcd_CurrentY,Lcd_Mask;
unsigned char LeftMask[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
unsigned char RightMask[]={0xff,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
unsigned char Mask1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char Mask2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void lcdwaitidle1(void);
void lcdwaitidle2(void);
void lcdwc1(unsigned char cmdcode);
void lcdwc2(unsigned char cmdcode);
void lcdwd1(unsigned char dispdata);
void lcdwd2(unsigned char dispdata);
unsigned char lcdrd1(void);
unsigned char lcdrd2(void);
void lcdwc(unsigned char cmdcode);
void lcdwd(unsigned char dispdata);
void lcdpos(void);
unsigned char lcdrd(void);
void lcdcursornext(void);
void displaybyte(unsigned char dispdata);
void lcdfill(unsigned char FillData);
void lcdreset(void);
void put_char(unsigned int ucdata);
void put_c(unsigned char dat);
void put_s(unsigned char *dat,unsigned char enter);
unsigned char Manchester_decode(void);
volatile unsigned char bit_array[256];
volatile unsigned char test_end = 0;
unsigned char id_code[11] = {0,0,0,0,0,0,0,0,0,0,0};
void delay_ms(unsigned int ms)
{
while(ms--)
{
_delay_ms(1);
}
}
//片1測忙
void lcdwaitidle1(void)
{
lcd_data_port = 0xff;
lcd_data_ddr = 0x00;
_delay_us(1);
lcd_a0_port &= ~(1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
lcd_rw_port |= (1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
lcd_cs1_port |= (1 << lcd_cs1);
lcd_cs1_ddr |= (1 << lcd_cs1);
while((lcd_data_pin & 0x80) == 0x80);
lcd_cs1_port &= ~(1 << lcd_cs1);
}
//片2測忙
void lcdwaitidle2(void)
{
lcd_data_port = 0xff;
lcd_data_ddr = 0x00;
_delay_us(1);
lcd_a0_port &= ~(1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
lcd_rw_port |= (1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
lcd_cs2_port |= (1 << lcd_cs2);
lcd_cs2_ddr |= (1 << lcd_cs2);
while((lcd_data_pin & 0x80) == 0x80);
lcd_cs2_port &= ~(1 << lcd_cs2);
}
//寫指令代碼到片1
void lcdwc1(unsigned char cmdcode)
{
lcdwaitidle1();
lcd_a0_port &= ~(1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
_delay_us(1);
lcd_rw_port &= ~(1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
_delay_us(1);
lcd_data_port = cmdcode;
lcd_data_ddr = 0xff;
_delay_us(1);
lcd_cs1_port |= (1 << lcd_cs1);
lcd_cs1_ddr |= (1 << lcd_cs1);
_delay_us(1);
lcd_cs1_port &= ~(1 << lcd_cs1);
}
//寫指令代碼到片2
void lcdwc2(unsigned char cmdcode)
{
lcdwaitidle2();
_delay_us(1);
lcd_a0_port &= ~(1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
_delay_us(1);
lcd_rw_port &= ~(1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
_delay_us(1);
lcd_data_port = cmdcode;
lcd_data_ddr = 0xff;
_delay_us(1);
lcd_cs2_port |= (1 << lcd_cs2);
lcd_cs2_ddr |= (1 << lcd_cs2);
_delay_us(1);
lcd_cs2_port &= ~(1 << lcd_cs2);
}
//寫數據到片1
void lcdwd1(unsigned char dispdata)
{
lcdwaitidle1();
lcd_a0_port |= (1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
_delay_us(1);
lcd_rw_port &= ~(1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
_delay_us(1);
lcd_data_port = dispdata;
lcd_data_ddr = 0xff;
_delay_us(1);
lcd_cs1_port |= (1 << lcd_cs1);
lcd_cs1_ddr |= (1 << lcd_cs1);
_delay_us(1);
lcd_cs1_port &= ~(1 << lcd_cs1);
}
//寫數據到片2
void lcdwd2(unsigned char dispdata)
{
lcdwaitidle2();
lcd_a0_port |= (1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
_delay_us(1);
lcd_rw_port &= ~(1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
_delay_us(1);
lcd_data_port = dispdata;
lcd_data_ddr = 0xff;
_delay_us(1);
lcd_cs2_port |= (1 << lcd_cs2);
lcd_cs2_ddr |= (1 << lcd_cs2);
_delay_us(1);
lcd_cs2_port &= ~(1 << lcd_cs2);
}
//讀片1數據
unsigned char lcdrd1(void)
{
unsigned char i;
lcdwaitidle1();
lcd_data_port = 0xff;
lcd_data_ddr = 0x00;
_delay_us(1);
lcd_a0_port |= (1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
_delay_us(1);
lcd_rw_port |= (1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
_delay_us(1);
lcd_cs1_port |= (1 << lcd_cs1);
lcd_cs1_ddr |= (1 << lcd_cs1);
_delay_us(1);
i = lcd_data_pin;
_delay_us(1);
lcd_cs1_port &= ~(1 << lcd_cs1);
return(i);
}
//讀片2數據
unsigned char lcdrd2(void)
{
unsigned char i;
lcdwaitidle2();
lcd_data_port = 0xff;
lcd_data_ddr = 0x00;
_delay_us(1);
lcd_a0_port |= (1 << lcd_a0);
lcd_a0_ddr |= (1 << lcd_a0);
_delay_us(1);
lcd_rw_port |= (1 << lcd_rw);
lcd_rw_ddr |= (1 << lcd_rw);
_delay_us(1);
lcd_cs2_port |= (1 << lcd_cs2);
lcd_cs2_ddr |= (1 << lcd_cs2);
_delay_us(1);
i = lcd_data_pin;
lcd_cs2_port &= ~(1 << lcd_cs2);
return(i);
}
//寫指令代碼
void lcdwc(unsigned char cmdcode)
{ if((Lcd_CurrentX)<61)
lcdwc1(cmdcode);
else
lcdwc2(cmdcode);
}
//寫數據
void lcdwd(unsigned char dispdata)
{ if(Lcd_CurrentX<61)
lcdwd1(dispdata);
else
lcdwd2(dispdata);
}
//內部數據地址指針定位
void lcdpos(void)
{ if(Lcd_CurrentX<61)
lcdwc(LCD_CMD_COL|(Lcd_CurrentX&0x3f)); //設置地址列指針
else
lcdwc(LCD_CMD_COL|((Lcd_CurrentX-61)&0x7f));
lcdwc(LCD_CMD_PAGE|((Lcd_CurrentY/8)&0x3)); //設置地址頁指針
}
//讀數據
unsigned char lcdrd(void)
{ unsigned char i;
if(Lcd_CurrentX<61)
{ i=lcdrd1(); //讀兩次
i=lcdrd1();
}
else
{ i=lcdrd2();
i=lcdrd2();
}
lcdpos();
return i;
}
//當前坐標移動到下一個點
void lcdcursornext(void)
{ Lcd_CurrentX++;
if(Lcd_CurrentX>LCD_RIGHT)
{ Lcd_CurrentX=LCD_LEFT;
Lcd_CurrentY+=8;
if(Lcd_CurrentY>LCD_BOTTOM)
Lcd_CurrentY=LCD_TOP;
}
}
void displaybyte(unsigned char dispdata)
{ lcdpos(); //內部數據地址指針定位
lcdwd(dispdata); //寫數據
lcdcursornext(); //當前坐標移動到下一個點
}
//整屏顯示
void lcdfill(unsigned char FillData)
{ for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;)
{ displaybyte(FillData);
if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP))
break;
}
}
//初始化
void lcdreset()
{
delay_ms(1);
lcdwc1(0xe2); lcdwc2(0xe2); //復位
lcdwc1(0xc0); lcdwc2(0xc0); //設置顯示初始行
lcdwc1(0xa0); lcdwc2(0xa0); //設置列序方向為正向
lcdwc1(0xa4); lcdwc2(0xa4); //設置顯示模式為正常顯示
lcdwc1(0xa9); lcdwc2(0xa9); //設置占空比為1/32
lcdwc1(0xaf); lcdwc2(0xaf); //開顯示
}
/*
LCD顯示函數
*/
void putsizeimage(unsigned char XSIZE,unsigned char YSIZE,unsigned char *s)
{
unsigned char k,lx,ly,a1,a2,y;
k = Lcd_CurrentY & 0x7;
YSIZE += k;
y = Lcd_CurrentY;
for(lx = 0;lx < XSIZE;lx++,Lcd_CurrentX++)
{
for(Lcd_CurrentY = y,ly = k,a1 = 0;ly < YSIZE;s++)
{
unsigned char p;
//a2=*s;
a2 = pgm_read_byte(s);
for(p=0;p<k;p++)
{
a2<<=1;
if((a1&0x80)==0x80)
{
a2++;
}
a1<<=1;
}
lcdpos();
p=YSIZE&0x7;
if(ly<8)
{
if(YSIZE<8)
{
Lcd_Mask=LeftMask[k]&RightMask[p];
a1=lcdrd();
a1&=(~Lcd_Mask);
a1|=(a2&Lcd_Mask);
lcdwd(a1);
ly=YSIZE;
Lcd_CurrentY+=YSIZE-k;
}
else
{
Lcd_Mask=LeftMask[k];
a1=lcdrd();
a1&=(~Lcd_Mask);
a1|=(a2&Lcd_Mask);
lcdwd(a1);
ly+=8-k;
Lcd_CurrentY+=8-k;
}
}
else if(ly>=YSIZE-p)
{
if(k>=p)
{
s--;
//a1=*s;
a1 = pgm_read_byte(s);
a2=0;
for(p=0;p<k;p++)
{
a2<<=1;
if((a1&0x80)==0x80)
{
a2++;
}
a1<<=1;
}
p=YSIZE&0x7;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -