前陣子看到壇友的OLED12864+DS3231的萬年歷制作,帶農(nóng)歷,大字體(單片機源碼+實物),
正好手里也有這種DS3231模塊,就也想制作一個。但手邊沒有OLED 12864,就改用KS0108 12864了,同時顯示屏幕也比較大些。
單片機使用STC89C52RC。
制作實物如下:
KS0108+DS3231萬年歷
為了便于改造代碼,對原來的代碼稍做了分離處理。感謝壇友分享!
代碼片段如下。附件壓縮包中有完整的代碼。
// 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;
}
//寫數(shù)據(jù)到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, 下載次數(shù): 215)
2023-1-20 12:03 上傳
點擊文件名下載附件
|