- #include "at32l021_board.h"
- #include "at32l021_clock.h"
- #include "OLED.h"
- /** @addtogroup AT32L021_periph_examples
- * @{
- */
- #define uint unsigned int
- #define u8 unsigned char
- #define READ_INSTRUCTION 0x03 // ???(??25LC040,????????????)
- #define WRITE_INSTRUCTION 0x02 // ???(??,??????????)
- #define WREN_INSTRUCTION 0x06 // ?????
- unsigned char readData,readData1,readData2;
- void _nop_(void)
- {
- int i;
- for(i=0;i<20;i++);
- }
- void SPI_Init(void) {
- // ???SPI??,????????
- }
-
- void SPI_SendByte(unsigned char byte) {
- // ??SPI??????
- u8 i;
- for(i=0;i<8;i++)
- {
- //SCK=0;
- at32_lc040_off(SCK1);
- _nop_();
- _nop_();
- if((byte&0x80)==0x80)
- at32_lc040_on(SI);
- else
- at32_lc040_off(SI);
- _nop_();
- _nop_();
- byte<<=1;
- //SCK=1;
- at32_lc040_on(SCK1);
- _nop_();
- _nop_();
- }
- }
- u8 SPI_SendByte1(unsigned char byte) {
- // ??SPI??????
- u8 i,date=0;
- for(i=0;i<8;i++)
- {
- date<<=1;
- //SCK=0;
- at32_lc040_off(SCK1);
- _nop_();
- _nop_();
- if((byte&0x80)==0x80)
- at32_lc040_on(SI);
- else
- at32_lc040_off(SI);
- _nop_();
- _nop_();
- byte<<=1;
- //SCK=1;
- at32_lc040_on(SCK1);
- _nop_();
- _nop_();
- //SO=1;
- if(at32_soin_state())
- date|=1;
- }
- return date;
- }
-
- unsigned char SPI_ReceiveByte(void) {
- // ??SPI??????
- u8 i,dat=0;
- for(i=0;i<8;i++)
- {
- dat<<=1;
- //SCK=1; //第一位
- at32_lc040_on(SCK1);
- _nop_();
- _nop_();
- //SCK=0;
- at32_lc040_off(SCK1);
- _nop_();
- _nop_();
- //SO=1;
- if(at32_soin_state())
- dat|=1;
-
- _nop_();
- _nop_();
-
- }
-
-
- return dat; // ??????????????
- }
-
- void SPI_CS_Low(void) {
- // ???????
- //CS = 0; // ?????????P1.0??
- at32_lc040_off(CS1);
- }
-
- void SPI_CS_High(void) {
- // ???????
- //CS = 1; // ?????????P1.0??
- at32_lc040_on(CS1);
- }
- // ????
- void EEPROM_WriteByte(unsigned char address, unsigned char date) {
- SPI_CS_Low(); // ??????
- SPI_SendByte(WREN_INSTRUCTION); // ???????
- SPI_CS_High(); // ??????,???????(??????)
-
- SPI_CS_Low(); // ????????
- SPI_SendByte(WRITE_INSTRUCTION); // ?????
- //SPI_SendByte((address >> 8) & 0xFF); // ???????(??25LC040,?????)
- SPI_SendByte(address); // ???????
- SPI_SendByte(date); // ????
- SPI_CS_High(); // ??????,?????
-
- // ???????????,?????EEPROM????
- }
-
- unsigned char EEPROM_ReadByte(unsigned char address) {
- unsigned char date;
-
- SPI_CS_Low(); // ??????
- SPI_SendByte(READ_INSTRUCTION); // ?????
- //SPI_SendByte((address >> 8) & 0xFF); // ???????(??25LC040,?????)
- SPI_SendByte(address ); // ???????
- date = SPI_SendByte1(0 ); // ????
- SPI_CS_High(); // ??????,?????
-
- return date;
- }
- void EEPROM_ReadByte1(unsigned char address) {
- //unsigned char date;
-
- SPI_CS_Low(); // ??????
- SPI_SendByte(READ_INSTRUCTION); // ?????
- //SPI_SendByte((address >> 8) & 0xFF); // ???????(??25LC040,?????)
- SPI_SendByte(address ); // ???????
- readData = SPI_ReceiveByte(); // ????
- readData1 = SPI_ReceiveByte();
- readData2 = SPI_ReceiveByte();
- SPI_CS_High(); // ??????,?????
-
- // return date;
- }
-
- void MS_delay(uint MS)
- {
- uint x,y;
- for(y=MS;y>0;y--)
- {
- for(x=796;x>0;x--);
- }
- }
- /** @addtogroup 021_GPIO_led_toggle GPIO_led_toggle
- * @{
- */
- /**
- * [url=home.php?mod=space&uid=247401]@brief[/url] main function.
- * @param none
- * @retval none
- */
- int main(void)
- {
- u8 bai,shi,ge;
- uint i=0;
- system_clock_config();
- at32_board_init();
- LCD_Init();
- LCD_CLS();
- //LCD_P8x16Str(45,5,(u8*)"EASEAR");
- //LCD_P6x8Str(0,7,(u8*)"www.holteksupport.com");
- //Draw_BMP(0,0,100,3,(u8*)Dot);
- SPI_Init(); // ???SPI??
-
- // ??:?????EEPROM
- EEPROM_WriteByte(0x00, 169); // ???0x0000??0xAB
- for(i=0;i<30000;i++);
- EEPROM_WriteByte(0x01, 208); // ???0x0000??0xAB
- for(i=0;i<30000;i++);
- EEPROM_WriteByte(0x02, 135); // ???0x0000??0xAB
- for(i=0;i<30000;i++);
- readData=EEPROM_ReadByte(0); // ???0x0000????
- bai= readData/100+'0';
- shi=readData%100/10+'0';
- ge=readData%10+'0';
- LCD_P8x16Char(0,0,bai);
- LCD_P8x16Char(8,0,shi);
- LCD_P8x16Char(16,0,ge);
- readData1 = EEPROM_ReadByte(0x01); // ???0x0000????
- bai= readData1/100+'0';
- shi=readData1%100/10+'0';
- ge=readData1%10+'0';
- LCD_P8x16Char(0,2,bai);
- LCD_P8x16Char(8,2,shi);
- LCD_P8x16Char(16,2,ge);
- _nop_();
- readData2 = EEPROM_ReadByte(0x02); // ???0x0000????
- bai= readData2/100+'0';
- shi=readData2%100/10+'0';
- ge=readData2%10+'0';
- LCD_P8x16Char(0,4,bai);
- LCD_P8x16Char(8,4,shi);
- LCD_P8x16Char(16,4,ge);
- while(1)
- {
- at32_led_toggle(LED2);
- // at32_oled_on(SCL);
- // at32_oled_on(SDA);
- // at32_oled_on(RST);
- // at32_oled_on(DC);
- // delay_ms(10);
- // at32_oled_off(SCL);
- // at32_oled_off(SDA);
- // at32_oled_off(RST);
- // at32_oled_off(DC);
- delay_ms(1000);
- //at32_led_toggle(LED3);
- //delay_ms(200);
- ///at32_led_toggle(LED4);
- //delay_ms(200);
- }
- }
运行效果图: