这个红外遥控主要是程序通过对按下的键的键码进行解析,并运行相应的功能代码
一次按键动作的遥控编码信息为 32 位串行二进制码。对于二进制信号“0”,一个脉冲占 1.2ms;对于二进制信号“1”,一个脉冲占 2.4ms,而每一脉冲内低电平均为 0.6ms。从起始标志到 32 位编码脉冲发完大约需80ms,此后遥控信号维持高电平。若按键未释放,则从起始标志起每隔 108ms 发出 3 个脉冲的重复标志。在 32 位的编码脉冲中,前 16 位码不随按键的不同而变化,我们称之为用户码。它是为了表示特定用户而设置的一个辨识标志,以区别不同机种和不同用户发射的遥控信号,防止误操作。后 16 位码随着按键的不同而改变,我们就是要读取这 16 位按键编码,经解码得到按键键号,转而执行相应控制动作。
主要运用DS1302时钟芯片,红外遥控,oled显示屏,蜂鸣器,定时器,中断实现
研究过程:
1.工程的建立和文件存放分配
2.根据原理图进行全局参数,引脚申明,类型说明头文件的编写
3.功能模块调试
1>oled液晶显示屏功能调试
2>蜂鸣器功能调试 //定时器2
3>DS1302读写调试
4>红外遥控按键功能的调试 //定时器1和外部中断0
4.所有显示程序的调试
5.程序总体功能的调试
7引脚的oled接线:
GND接GND,VCC接VCC,D0,D1,RST,DC接自定义引脚,CS接地。
引脚申明类型说明
1 #ifndef _CONFIG_H_ 2 #define _CONFIG_H_ 3 4 #include"reg52.h" 5 #include"intrins.h" 6 7 typedef signed char int8; 8 typedef signed int int16; 9 typedef unsigned int u16; 10 typedef unsigned char u8; 11 typedef signed long int32; 12 13 #define LED P2 14 #define SYS_MCLK 1000000 15 16 sbit GPIO_KEY=P1; 17 18 sbit OLED_SCLK=P1^0; //D0时钟管脚 19 sbit OLED_SDA=P1^1; //D1数据管脚 20 sbit OLED_RST=P1^2; //电源复位,低电平有效 21 sbit OLED_DC=P1^3; //数据或命令控制管脚 22 23 sbit DS_IO=P3^4 ; 24 sbit DS_SCLK=P3^6; 25 sbit DS_RST=P3^5; 26 27 28 sbit BUZZER=P1^5; 29 30 sbit DSPORT=P3^7; 31 32 sbit IRIN=P3^2; 33 34 #endif
oled显示屏代码
1 #define _OLED_C 2 #include"config.h" 3 #include"OLED.h" 4 #define _OLED_C 5 void OLED_SetPos(u8 x,u8 y); 6 //命令函数 7 const u8 code F6x8[][6] = 8 { 9 { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, //sp0 10 { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !1 11 { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "2 12 { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #3 13 { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $4 14 { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %5 15 { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &6 16 { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '7 17 { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (8 18 { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )9 19 { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *10 20 { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +11 21 { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,12 22 { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -13 23 { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .14 24 { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /15 25 { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 016 26 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 117 27 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 218 28 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 319 29 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 420 30 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 521 31 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 622 32 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 723 33 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 824 34 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 925 35 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :26 36 { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;27 37 { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <28 38 { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =29 39 { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >30 40 { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?31 41 { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @32 42 { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A33 43 { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B34 44 { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C35 45 { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D36 46 { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E37 47 { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F38 48 { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G39 49 { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H40 50 { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I41 51 { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J42 52 { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K43 53 { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L44 54 { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M45 55 { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N46 56 { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O47 57 { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P48 58 { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q49 59 { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R50 60 { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S51 61 { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T52 62 { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U53 63 { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V54 64 { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W55 65 { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X56 66 { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y57 67 { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z58 68 { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [59 69 { 0x00, 0x02, 0x04, 0x08, 0x10, 0x20 }, // \60 70 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]61 71 { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^62 72 { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _63 73 { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '64 74 { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a65 75 { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b66 76 { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c67 77 { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d68 78 { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e69 79 { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f70 80 { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g71 81 { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h72 82 { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i73 83 { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j74 84 { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k75 85 { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l76 86 { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m77 87 { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n78 88 { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o79 89 { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p80 90 { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q81 91 { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r82 92 { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s83 93 { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t84 94 { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u85 95 { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v86 96 { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w87 97 { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x88 98 { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y89 99 { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z90 100 { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines91 101 }; 102 103 const u8 code F8X16[]= 104 { 105 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 106 0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,//!1 107 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"2 108 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//#3 109 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$4 110 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//%5 111 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//&6 112 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//'7 113 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//(8 114 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//)9 115 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//*10 116 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+11 117 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//,12 118 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//-13 119 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//.14 120 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,///15 121 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//016 122 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//117 123 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//218 124 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//319 125 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//420 126 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//521 127 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//622 128 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//723 129 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//824 130 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//925 131 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//:26 132 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//;27 133 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//<28 134 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//=29 135 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//>30 136 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//?31 137 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@32 138 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A33 139 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B34 140 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C35 141 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D36 142 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E37 143 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F38 144 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G39 145 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H40 146 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I41 147 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J42 148 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K43 149 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L44 150 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M45 151 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N46 152 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O47 153 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P48 154 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q49 155 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R50 156 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S51 157 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T52 158 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U53 159 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V54 160 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W55 161 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X56 162 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y57 163 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z58 164 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[59 165 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\60 166 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//]61 167 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^62 168 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_63 169 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//`64 170 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a65 171 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b66 172 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c67 173 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d68 174 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e69 175 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f70 176 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g71 177 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h72 178 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i73 179 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j74 180 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k75 181 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l76 182 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m77 183 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n78 184 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o79 185 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p80 186 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q81 187 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r82 188 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s83 189 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t84 190 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u85 191 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v86 192 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w87 193 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x88 194 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y89 195 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z90 196 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{91 197 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//|92 198 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//}93 199 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~94 200 }; 201 202 203 204 const u8 code F14x16_Idx[] = 205 { 206 "星期一二日六五四三" 207 }; 208 209 //中文字符串编码 210 const u8 code F14x16[] = 211 212 { 213 214 0x00,0x00,0x00,0xBE,0x2A,0x2A,0x2A,0xEA,0x2A,0x2A,0x2A,0x3E,0x00,0x00, 215 0x00,0x44,0x42,0x49,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x49,0x41,0x40,//星 216 0x00,0x04,0xFF,0x24,0x24,0x24,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE, 217 0x88,0x48,0x2F,0x09,0x09,0x19,0xAF,0x48,0x30,0x0F,0x02,0x42,0x82,0x7F,//期 218 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, 219 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//一 220 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00, 221 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,//二 222 0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00, 223 0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,//日 224 0x20,0x20,0x20,0x20,0x20,0x20,0x21,0x22,0x2C,0x20,0x20,0x20,0x20,0x20, 225 0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x01,0x02,0x04,0x18,0x60,//六 226 0x00,0x02,0x42,0x42,0x42,0xC2,0x7E,0x42,0x42,0x42,0x42,0xC2,0x02,0x02, 227 0x40,0x40,0x40,0x40,0x78,0x47,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,//五 228 0x00,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0xFC, 229 0x00,0x7F,0x28,0x24,0x23,0x20,0x20,0x20,0x20,0x21,0x22,0x22,0x22,0x7F,//四 230 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x04, 231 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20//三 232 233 }; 234 235 236 void OLED_WriteCmd(u8 Cmd) 237 { 238 u8 i=8 ; 239 OLED_DC=0; 240 OLED_SCLK=0; 241 while(i--) 242 { 243 if(Cmd&0x80) 244 { 245 OLED_SDA=1; 246 } 247 else 248 { 249 OLED_SDA=0; 250 } 251 OLED_SCLK= 1; 252 _nop_(); 253 OLED_SCLK=0; 254 Cmd<<=1; 255 } 256 return; 257 } 258 259 void OLED_WriteDat(u8 Dat) 260 { 261 u8 i=8 ; 262 OLED_DC=1; 263 OLED_SCLK=0; 264 while(i--) 265 { 266 if(Dat&0x80) 267 { 268 OLED_SDA=1; 269 } 270 else 271 { 272 OLED_SDA=0; 273 } 274 OLED_SCLK= 1; 275 _nop_(); 276 OLED_SCLK=0; 277 Dat<<=1; 278 } 279 280 return; 281 } 282 283 void OLED_FILL(u8 date) 284 { 285 u8 Page,Column; 286 for( Page=0;Page<8;Page++) 287 { 288 OLED_WriteCmd(0xb0+Page); 289 OLED_WriteCmd(0x00); 290 OLED_WriteCmd(0x10); 291 for(Column=0;Column<128;Column++) 292 { 293 OLED_WriteDat( date ); 294 } 295 } 296 } 297 298 //初始化 299 300 void OledInit() 301 { 302 303 u8 i; 304 305 OLED_SCLK = 1; 306 OLED_RST = 0; 307 308 for(i = 0; i < 100; i++) 309 { 310 _nop_(); //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕 311 } 312 313 OLED_RST = 1; 314 OLED_WriteCmd(0xae); 315 OLED_WriteCmd(0x00); 316 OLED_WriteCmd(0x10); 317 OLED_WriteCmd(0x40); 318 OLED_WriteCmd(0x81); 319 OLED_WriteCmd(0xcf); 320 OLED_WriteCmd(0xa1); 321 OLED_WriteCmd(0xc8); 322 OLED_WriteCmd(0xa6); 323 OLED_WriteCmd(0xa8); 324 OLED_WriteCmd(0x3f); 325 OLED_WriteCmd(0xd3); 326 OLED_WriteCmd(0x00); 327 OLED_WriteCmd(0xd5); 328 OLED_WriteCmd(0x80); 329 OLED_WriteCmd(0xd9); 330 OLED_WriteCmd(0xf1); 331 OLED_WriteCmd(0xda); 332 OLED_WriteCmd(0x12); 333 OLED_WriteCmd(0xdb); 334 OLED_WriteCmd(0x40); 335 OLED_WriteCmd(0x20); 336 OLED_WriteCmd(0x02); 337 OLED_WriteCmd(0x8d); 338 OLED_WriteCmd(0x14); 339 OLED_WriteCmd(0xa4); 340 OLED_WriteCmd(0xa6); 341 OLED_WriteCmd(0xaf); 342 OLED_FILL(0x00); 343 OLED_SetPos(0,0); 344 } 345 346 void OLED_SetPos(u8 x,u8 y) 347 { 348 OLED_WriteCmd(0xb0 + y); 349 OLED_WriteCmd(((x & 0xf0)>> 4) | 0x10); 350 OLED_WriteCmd((x & 0x0f) | 0x01); 351 } 352 353 void OLED6x8Showstr(u8 x,u8 y,u8 str[]) 354 { 355 356 u8 c=0,i=0,j=0; 357 while(str[j]!='\0') 358 { 359 c=str[j]-32; 360 if(x>122) 361 { 362 x=0; 363 y++; 364 } 365 OLED_SetPos(x,y); 366 for(i=0;i<6;i++) 367 { 368 OLED_WriteDat(F6x8[c][i]); 369 } 370 x+=6; 371 j++; 372 } 373 return; 374 } 375 void OLED_6x8C(u8 x,u8 y,u8 ascii) 376 { 377 378 u8 c=0,i=0,j=0; 379 380 c=ascii-32; 381 if(x>122) 382 { 383 x=0; 384 y++; 385 } 386 OLED_SetPos(x,y); 387 for(i=0;i<6;i++) 388 { 389 OLED_WriteDat(F6x8[c][i]); 390 } 391 x+=6; 392 j++; 393 return; 394 } 395 void OLED_8x16C(u8 x,u8 y, u8 ascii) 396 { 397 u8 i,j=0,ucDataTmp; 398 399 y <<= 1; 400 401 ucDataTmp = ascii - 32; 402 403 if(x > 120) 404 { 405 x = 0; 406 y += 2; 407 } 408 409 OLED_SetPos(x, y); 410 411 for(i = 0; i < 8; i++) 412 { 413 OLED_WriteDat(F8X16[(ucDataTmp << 4) + i]); 414 } 415 416 OLED_SetPos(x, y + 1); 417 418 for(i = 0; i < 8; i++) 419 { 420 OLED_WriteDat(F8X16[(ucDataTmp << 4) + i + 8]); 421 } 422 x += 8; 423 424 425 426 return; 427 } 428 429 430 431 432 void OLED_P8x16Str(u8 x, u8 y, u8 ucDataStr[]) 433 { 434 u8 i, j, ucDataTmp; 435 436 y <<= 1; 437 438 for (j = 0; ucDataStr[j] != '\0'; j++) 439 { 440 ucDataTmp = ucDataStr[j] - 32; 441 442 if(x > 120) 443 { 444 x = 0; 445 y += 2; 446 } 447 448 OLED_SetPos(x, y); 449 450 for(i = 0; i < 8; i++) 451 { 452 OLED_WriteDat(F8X16[(ucDataTmp << 4) + i]); 453 } 454 455 OLED_SetPos(x, y + 1); 456 457 for(i = 0; i < 8; i++) 458 { 459 OLED_WriteDat(F8X16[(ucDataTmp << 4) + i + 8]); 460 } 461 x += 8; 462 463 } 464 465 return; 466 } 467 468 469 void LED_P14x16Str(u8 x, u8 y, u8 ucDataStr[]) 470 { 471 u8 i, j; 472 u16 usAddress; 473 474 y <<= 1; 475 476 j = 0; 477 while(ucDataStr[j] != '\0') 478 { 479 i = 0; 480 usAddress = 1; 481 while(F14x16_Idx[i] > 127) 482 { 483 if(F14x16_Idx[i]==ucDataStr[j]) 484 { 485 if(F14x16_Idx[i + 1]==ucDataStr[j + 1]) 486 { 487 usAddress = i * 14; 488 break; 489 } 490 } 491 492 i += 2; 493 } 494 495 if(x > 114) 496 { 497 x = 0; 498 y += 2; 499 } 500 501 if(usAddress != 1)// 显示汉字 502 { 503 OLED_SetPos(x, y); 504 for(i = 0; i < 14; i++) 505 { 506 OLED_WriteDat(F14x16[usAddress]); 507 usAddress++; 508 } 509 510 OLED_SetPos(x,y + 1); 511 for(i = 0;i < 14;i++) 512 { 513 OLED_WriteDat(F14x16[usAddress]); 514 usAddress++; 515 } 516 j+=2; 517 } 518 else 519 { 520 OLED_SetPos(x,y); 521 for(i=0;i<14;i++) 522 { 523 OLED_WriteDat(0); 524 } 525 OLED_SetPos(x,y+1); 526 for(i=0;i<14;i++) 527 { 528 OLED_WriteDat(0); 529 } 530 j++; 531 } 532 x+=14; 533 } 534 return; 535 } 536 537 /***************************************************************************** 538 函 数 名 : LED_PXx16MixStr 539 功能描述 : 输出14x16汉字和字符混合字符串 (字符串表格中需含有此字) 540 输入参数 : UCHAR8 ucIdxX 为显示的横坐标0~114 541 UCHAR8 ucIdxY 为页范围0~3 542 UCHAR8 ucDataStr[] 要显示的中文字符串 543 输出参数 : NONE 544 返 回 值 : NONE 545 *****************************************************************************/ 546 void OLED_P14x16Str(u8 x, u8 y, u8 ucDataStr[]) 547 { 548 u8 ucTmpStr[3]; 549 u8 i = 0; 550 551 while(ucDataStr[i] != '\0') 552 { 553 if(ucDataStr[i] > 127) 554 { 555 ucTmpStr[0] = ucDataStr[i]; 556 ucTmpStr[1] = ucDataStr[i + 1]; 557 ucTmpStr[2] = '\0'; //汉字为两个字节 558 LED_P14x16Str(x, y, ucTmpStr); //显示汉字 559 x += 14; 560 i += 2; 561 } 562 else 563 { 564 ucTmpStr[0] = ucDataStr[i]; 565 ucTmpStr[1] = '\0'; //字母占一个字节 566 OLED_P8x16Str(x, y, ucTmpStr); //显示字母 567 x += 8; 568 i += 1; 569 } 570 } 571 572 return; 573 } 574 /***************************************************************************** 575 函 数 名 : LED_PrintImage 576 功能描述 : 将图像显示出来 577 输入参数 : UCHAR8 *pucTable 二维图像数组的地址 578 USHORT16 usRowNum 二维图像的行数1~64 579 USHORT16 usColumnNum 二维图像的列数1~128 580 输出参数 : none 581 返 回 值 : none 582 *****************************************************************************/ 583 void LED_PrintImage(u8 *pucTable, u16 usRowNum, u16 usColumnNum) 584 { 585 u8 ucData; 586 u16 i,j,k,m,n; 587 u16 usRowTmp; 588 589 m = usRowNum >> 3; //计算图片行数以8位为一组完整的组数 590 n = usRowNum % 8; //计算分完组后剩下的行数 591 592 for(i = 0; i < m; i++) //完整组行扫描 593 { 594 OLED_SetPos(0,(u8)i); 595 usRowTmp = i << 3; //计算当前所在行的下标 596 for(j = 0; j < usColumnNum; j++) //列扫描 597 { 598 ucData = 0; 599 for(k = 0; k < 8; k++) //在i组中对这8行扫描 600 { 601 ucData = ucData >> 1; 602 if((pucTable + (usRowTmp + k) * usColumnNum)[j] == 128) 603 { 604 ucData = ucData | 0x80; 605 } 606 607 } 608 OLED_WriteDat(ucData); 609 } 610 } 611 612 OLED_SetPos(0,(u8)i); //设置剩下的行显示的起始坐标 613 usRowTmp = i << 3; //计算当前所在行的下标 614 for(j = 0; j < usColumnNum; j++) //列扫描 615 { 616 ucData = 0; 617 for(k = 0; k < n; k++) //对剩下的行扫描 618 { 619 ucData = ucData >> 1; 620 if((pucTable + (usRowTmp + k) * usColumnNum)[j] == 128) 621 { 622 ucData = ucData | 0x80; 623 } 624 625 } 626 ucData = ucData >> (8 - n); 627 OLED_WriteDat(ucData); 628 } 629 630 return; 631 } 632 633