STC8H1K08可以替代過去的STC15W408as,但需要對程序進行必要的修改。大致需要注意以下三點:
1、使用STC官方提供的STC8Hxx系列頭文件替代stc15.h;
2、使用IO口時需要事先進行設置;
3、需要注意延時函數的修改。
本人在將STC15W408as驅動i2c接口OLED的程序,移植用于STC8H1K08時多次沒有通過,后來下載時將程序運行IRC頻率降至5.5MHz時才通過,判斷應該適當增加延時。在原來的void i2c_Start()、void i2c_Stop()和void Write_i2c_Byte(unsigned char i2c_Byte)增加了最短的延時,最后IRC頻率在5.5~35MHz下均可正常運行。所有程序代碼附在stc8h_oled.rar中。包含stc8H.h頭文件
單片機源程序如下:- #include "stc8H.h"
- sbit SCL=P3^6;
- sbit SDA=P3^7;
- void delay()
- {
- char i;
- for(i=0;i<1;i++);
- }
- void delay_us(char us)
- {
- char i;
- for(i=0;i<us;i++);
- }
- void delay_ms(int ms)
- {
- int i,j,n;
- //n=1100; //11.0592MHz
- //n=2200; //24MHz
- n=3300; //35MHz
- for(j=0;j<ms;j++)
- {
- for(i=0;i<n;i++);
- }
- }
- /*----- oled DATA ---------------------------------------------------------------*/
- unsigned char code zk[]=
- {
- /* "0" Gulim12 8x16 -0-*/
- 0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
- /* "1" Gulim12 8x16 -15-*/
- 0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,
- /* "2" Gulim12 8x16 -31-*/
- 0x00,0x30,0x08,0x04,0x04,0x04,0x88,0x70,0x00,0x30,0x28,0x24,0x22,0x21,0x20,0x20,
- /* "3" Gulim12 8x16 -47-*/
- 0x00,0x10,0x08,0x84,0x84,0x84,0x48,0x30,0x00,0x08,0x10,0x20,0x20,0x20,0x11,0x0E,
- /* "4" Gulim12 8x16 -63-*/
- 0x00,0x80,0x60,0x18,0x04,0xFC,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x3F,0x04,0x04,
- /* "5" Gulim12 8x16 -79-*/
- 0x00,0xFC,0x84,0x44,0x44,0x44,0x84,0x04,0x00,0x09,0x10,0x20,0x20,0x20,0x10,0x0F,
- /* "6" Gulim12 8x16 -95-*/
- 0x00,0xF0,0x88,0x44,0x44,0x44,0x88,0x10,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,
- /* "7" Gulim12 8x16 -111-*/
- 0x00,0x04,0x04,0x04,0x84,0x64,0x14,0x0C,0x00,0x00,0x00,0x3C,0x03,0x00,0x00,0x00,
- /* "8" Gulim12 8x16 -127-*/
- 0x00,0x30,0x48,0x84,0x84,0x84,0x48,0x30,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x0E,
- /* "9" Gulim12 8x16 -143-*/
- 0x00,0xF0,0x08,0x04,0x04,0x04,0x08,0xF0,0x00,0x08,0x11,0x22,0x22,0x22,0x11,0x0F,
- /* "." Gulim12 8x16 -159-*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
- /* ":" Gulim12 8x16 -175-*/
- 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,
- /* "%" Gulim12 8x16 -191-*/
- 0x00,0x18,0x24,0x24,0x98,0x40,0x20,0x00,0x00,0x04,0x02,0x19,0x24,0x24,0x18,0x00,
- /* "A" Gulim12 8x16 -207-*/
- 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
- /* "B" Gulim12 8x16 -223-*/
- 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
- /* "C" Gulim12 8x16 -239-*/
- 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
- /* "D" Gulim12 8x16 -255-*/
- 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
- /* "E" Gulim12 8x16 -271-*/
- 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
- /* "F" Gulim12 8x16 -287-*/
- 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
- /* "G" Gulim12 8x16 -303-*/
- 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
- /* "H" Gulim12 8x16 -319-*/
- 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
- /* "I" Gulim12 8x16 -335-*/
- 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
- /* "J" Gulim12 8x16 -351-*/
- 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
- /* "K" Gulim12 8x16 -367-*/
- 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
- /* "L" Gulim12 8x16 -383-*/
- 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
- /* "M" Gulim12 8x16 -399-*/
- 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
- /* "N" Gulim12 8x16 -415-*/
- 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
- /* "O" Gulim12 8x16 -431-*/
- 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
- /* "P" Gulim12 8x16 -447-*/
- 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
- /* "Q" Gulim12 8x16 -463-*/
- 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
- /* "R" Gulim12 8x16 -479-*/
- 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
- /* "S" Gulim12 8x16 -495-*/
- 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
- /* "T" Gulim12 8x16 -511-*/
- 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
- /* "U" Gulim12 8x16 -527-*/
- 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
- /* "V" Gulim12 8x16 -543-*/
- 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
- /* "W" Gulim12 8x16 -559-*/
- 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
- /* "X" Gulim12 8x16 -575-*/
- 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
- /* "Y" Gulim12 8x16 -591-*/
- 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
- /* "Z" Gulim12 8x16 -607-*/
- 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
- /* "sui" song12 16x16 623--*/
- 0x00,0xFE,0x22,0x5A,0x86,0x08,0x10,0x44,0x24,0xF4,0x2C,0x27,0x24,0xE4,0x04,0x00,
- 0x00,0xFF,0x04,0x08,0x87,0x41,0x3F,0x40,0x80,0xBF,0x85,0x95,0xA5,0x9F,0x80,0x00,
- /* "yuan" song12 16x16 -655-*/
- 0x20,0x30,0xAC,0x63,0x30,0x00,0x20,0x2C,0xAB,0x6A,0xAA,0x2A,0x3A,0x26,0xA0,0x00,
- 0x22,0x67,0x22,0x12,0x12,0x00,0x49,0x49,0x24,0x52,0x89,0x7F,0x02,0x0D,0x10,0x00,
- /* "zhai" song12 16x16 -687-*/
- 0x80,0x84,0x84,0x44,0x4C,0x54,0x25,0x26,0x24,0x54,0x4C,0x44,0x84,0x84,0x80,0x00,
- 0x00,0x00,0xF8,0x09,0x09,0x7D,0x0B,0x09,0x79,0x09,0x49,0x89,0x78,0x00,0x00,0x00,
- /* "ju" song12 16x16 -719-*/
- 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xF2,0x92,0x92,0x92,0x9E,0x80,0x80,0x00,
- 0x40,0x30,0x0F,0x00,0xFC,0x44,0x44,0x44,0x47,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,
- /* "shi" song12 16x16 -751-*/
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,
- 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
- /* "sheshidu" 16X16 -783-*/
- 0x00,0x0C,0x12,0x12,0x0C,0xC0,0x20,0x10,0x10,0x10,0x10,0x10,0x20,0x40,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x20,0x20,0x20,0x20,0x20,0x10,0x08,0x00,0x00,
- /* "%" 16X16 -815-*/
- 0x00,0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x10,0x08,0x04,0x02,0x01,0x00,0x1C,0x22,0x22,0x22,0x1C,0x00,0x00,
- };
- /*----- oled DATA -----------------------------------------------------------------------------*/
- /*----- oled_12832 -------------------------------*/
- void i2c_Start()
- {
- SCL = 1;
- delay();
- SDA = 1;
- delay();
- SDA = 0;
- delay();
- SCL = 0;
- }
- void i2c_Stop()
- {
- SCL = 0;
- delay();
- SDA = 0;
- delay();
- SCL = 1;
- delay();
- SDA = 1;
- }
- void Write_i2c_Byte(unsigned char i2c_Byte)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- if(i2c_Byte & 0x80)
- SDA=1;
- else
- SDA=0;
- delay();
- SCL=1;
- delay();
- SCL=0;
- delay();
- i2c_Byte<<=1;
- }
- SDA=1;
- delay();
- SCL=1;
- delay();
- SCL=0;
- }
- void Write_i2c_Cmd(unsigned char i2c_Cmd)
- {
- i2c_Start();
- Write_i2c_Byte(0x78);
- Write_i2c_Byte(0x00);
- Write_i2c_Byte(i2c_Cmd);
- i2c_Stop();
- }
- void Write_i2c_Data(unsigned char i2c_Data)
- {
- i2c_Start();
- Write_i2c_Byte(0x78);
- Write_i2c_Byte(0x40);
- Write_i2c_Byte(i2c_Data);
- i2c_Stop();
- }
- void Init_ssd1306_32()
- {
- Write_i2c_Cmd(0xAE);
- Write_i2c_Cmd(0x20);
- Write_i2c_Cmd(0x00);
- Write_i2c_Cmd(0xb0);
- Write_i2c_Cmd(0xc8);
- Write_i2c_Cmd(0x00);
- Write_i2c_Cmd(0x10);
- Write_i2c_Cmd(0x40);
- Write_i2c_Cmd(0x81);
- Write_i2c_Cmd(0xdf);
- Write_i2c_Cmd(0xa1);
- Write_i2c_Cmd(0xa6);
- Write_i2c_Cmd(0xa8);
- Write_i2c_Cmd(0x1F);
- Write_i2c_Cmd(0xa4);
- Write_i2c_Cmd(0xd3);
- Write_i2c_Cmd(0x00);
- Write_i2c_Cmd(0xd5);
- Write_i2c_Cmd(0xf0);
- Write_i2c_Cmd(0xd9);
- Write_i2c_Cmd(0x22);
- Write_i2c_Cmd(0xda);
- Write_i2c_Cmd(0x12);
- Write_i2c_Cmd(0xdb);
- Write_i2c_Cmd(0x20);
- Write_i2c_Cmd(0x8d);
- Write_i2c_Cmd(0x14);
- Write_i2c_Cmd(0xDA);
- Write_i2c_Cmd(0x02);
- Write_i2c_Cmd(0xaf);
- }
- void Clear_top()
- {
- int i;
- Write_i2c_Cmd(0x22);
- Write_i2c_Cmd(0xb0);
- Write_i2c_Cmd(0xb1);
- Write_i2c_Cmd(0x21);
- Write_i2c_Cmd(0);
- Write_i2c_Cmd(127);
- for(i=0;i<512;i++) Write_i2c_Data(0x00);
- }
- void Clear_buttom()
- {
- int i;
- Write_i2c_Cmd(0x22);
- Write_i2c_Cmd(0xb2);
- Write_i2c_Cmd(0xb3);
- Write_i2c_Cmd(0x21);
- Write_i2c_Cmd(0);
- Write_i2c_Cmd(127);
- for(i=0;i<512;i++) Write_i2c_Data(0x00);
- }
- void Write_8X16(char c0,l0,int add)
- {
- char m;
- Write_i2c_Cmd(0x22);
- Write_i2c_Cmd(c0);
- Write_i2c_Cmd(c0+1);
- Write_i2c_Cmd(0x21);
- Write_i2c_Cmd(l0);
- Write_i2c_Cmd(l0+7);
- for(m=0;m<16;m++) Write_i2c_Data(zk[add++]);
- }
- void Write_16X16(char c0,l0,int add)
- {
- char m;
- Write_i2c_Cmd(0x22);
- Write_i2c_Cmd(c0);
- Write_i2c_Cmd(c0+1);
- Write_i2c_Cmd(0x21);
- Write_i2c_Cmd(l0);
- Write_i2c_Cmd(l0+15);
- for(m=0;m<32;m++) Write_i2c_Data(zk[add++]);
- }
- char i;
- void main()
- {
- P3M0 |= (0x01<<6); //指定P36
- P3M1 |= 0x08; //設置為準雙向模式
- P3M0 |= (0x01<<7); //指定P37
- P3M1 |= 0x08; //設置為準雙向模式
-
- Init_ssd1306_32();
- Clear_top();
- Clear_buttom();
- Write_16X16(0xb0,24,623);
- Write_16X16(0xb0,40,655);
- Write_16X16(0xb0,56,687);
- Write_16X16(0xb0,72,719);
- Write_16X16(0xb0,88,751);
-
- while(1)
- {
- for(i=0;i<15;i++) Write_8X16(0xb2,i*8,i*16);
- Write_16X16(0xb2,14*8,783);
- Write_16X16(0xb2,12*8,815);
- delay_ms(2000);
- Clear_buttom();
- delay_ms(100);
- }
- }
復制代碼
stc8H.h頭文件下載:
stc8h頭文件.7z
(23.81 KB, 下載次數: 109)
2022-5-27 16:27 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|