前阵子看到坛友的OLED12864+DS3231的万年历制作,带农历,大字体(单片机源码+实物),
正好手里也有这种DS3231模块,就也想制作一个。但手边没有OLED 12864,就改用KS0108 12864了,同时显示屏幕也比较大些。
单片机使用STC89C52RC。
制作实物如下:
为了便于改造代码,对原来的代码稍做了分离处理。感谢坛友分享!
代码片段如下。附件压缩包中有完整的代码。
// Define the register command code
#define Disp_On 0x3F
#define Disp_Off 0x3E
#define Col_Add 0x40
#define Page_Add 0xB8
#define Start_Line 0xC0
#define LCD_BUS P2 //MCU P2<------> LCM
sbit LCD_DI = P0 ^ 5; //rs, Data or Instrument Select
sbit LCD_RW = P0 ^ 6; //Write or Read
sbit LCD_ENABLE = P0 ^ 7; //6800 mode LCD_ENABLE single
sbit LCD_MCS = P0 ^ 2; //CS1, Master chip LCD_ENABLE
sbit LCD_SCS = P0 ^ 3; //CS2, Slave chip LCD_ENABLE
sbit LCD_RST = P0 ^ 4; //Lcm reset
#define OLED_WrCmd _WriteCmd
#define OLED_WrDat _WriteData
//延时子程序
// STC89Cxx @11.0592MHz
void delay(uint t)
{
uint i, j;
for (i = 0; i < t; i++)
for (j = 0; j < 10; j++)
;
}
/*
//STC12Cxx @11.0592MHz 延时100us
void delay(uint t)
{
uint k;
for(k=0; k < t; k++)
{
unsigned char i, j;
i = 2;
j = 15;
do
{
while (--j);
} while (--i);
}
}
*/
//写命令到LCD
void _WriteCmd(uchar cCmd)
{
LCD_DI = 0;
LCD_RW = 0;
LCD_BUS = cCmd;
delay(0);
LCD_ENABLE = 1;
delay(0);
LCD_ENABLE = 0;
}
//写数据到LCD
void _WriteData(uchar cData)
{
LCD_DI = 1;
LCD_RW = 0;
LCD_BUS = cData;
delay(0);
LCD_ENABLE = 1;
delay(0);
LCD_ENABLE = 0;
}
Keil代码下载:
万年历 (51Hei显示正负温度版).rar
(417.46 KB, 下载次数: 215)
|