一段I/O口模拟SPI驱动墨水屏的程序下载到AI8051U以8bit模式运行时刷屏没问题,程序中换了8H.h并且主函数中注释掉WTST=0;CKCON=0;这两句后下载到8H8K64U中刷屏失败(实验板为开天斧三),给所有涉及控制的I/O口都配置内部上拉电阻也没效果(擎天柱板子I/O有外部上拉电阻),最近这两款芯片我都在用,在8bit工作模式下感觉两者的代码一直是可以通用的,这次有些蒙,弄了两天了也没弄出头绪。用简易的逻辑分析仪检测SPI数据完全正常,请各位高手指点下是哪里不对劲了。
下面是主函数代码:(keil uv3编译)
- #include "STC8H.h"
- #include "SSD1680EPD.h"
- #include "delay.h"
- #include "Ap_29demo.h"
-
- //---------------------------------------------------
- void main()
- {
- EAXSFR();//允许访问扩展RAM区特殊功能寄存器( XFR)
- //WTST = 0;
- //CKCON = 0;
- GPIO_set();//预置所有I/O口全部为准双向口
-
- P1M0 = 0x28;//P1.3、P1.5推挽输出(SPI通道1)
- P1M1 = 0x00;
- P1PU |= 0x28;//P1.3、P1.5配置上拉电阻
-
- P3M0 = 0x2c;//P3.2、P3.3、P3.5推挽输出,P3.4高阻输入
- P3M1 = 0x10;
- P3PU = 0x3c;
-
- delay_500ms();
-
- EPD_HW_Init(Hor);
- EPD_WhiteScreen_White();
- EPD_sleep();
- delay_500ms();
-
- P20 = 1;
-
- while(1)
- {
- P20 = ~P20;
- delay_500ms();
- }
- }
复制代码
以下为SPI代码:
- //----I/O模拟SPI总线发送字节数据函数--------------------
- void SPI_WriteByte(u8 value)
- {
- u8 i, dat;
- dat = value;
- SPI_CLK = 0;
-
- for(i = 0; i < 8; i++)
- {
- if(dat & 0x80)
- {
- SPI_SDA = 1;
- }
- else
- {
- SPI_SDA = 0;
- }
-
- SPI_CLK = 1;
- NOP7();
- dat = dat << 1;
- SPI_CLK = 0;
- }
- }
- //----写指令-------------------------------------------
- void Write_command(u8 command)
- {
- CS = 0;
- NOP10();
- DC = 0;
- SPI_WriteByte(command);
- NOP5();
- CS = 1;
- NOP30();
- }
- //----写数据-------------------------------------------
- void Write_data(u8 dat)
- {
- CS = 0;
- NOP10();
- DC = 1;
- SPI_WriteByte(dat);
- NOP5();
- CS = 1;
- NOP30();
- }
复制代码
端口定义如下:
- //----EPD端口设置---------------------------------------------------
- sbit CS = P3 ^ 2;
- sbit DC = P3 ^ 3;
- sbit BY = P3 ^ 4;
- sbit RST = P3 ^ 5;
- sbit SPI_SDA = P1 ^ 3;
- sbit SPI_CLK = P1 ^ 5;
复制代码
|