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

📄 main.c

📁 ATMEGA8+LM358-125KHzRFID读卡程序。 功能稳定。 11.0592MHz.不需74X4060。
💻 C
📖 第 1 页 / 共 2 页
字号:
//包含所需头文件
#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 + -