数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4363|回复: 20

[C51] 点屏再战记,成功用STC15W4K56S4点亮广发银行蓝牙key盾12864屏

[复制链接]
发表于 2023-7-27 15:40:25 | 显示全部楼层
IlovePLC 发表于 2023-7-27 01:39
楼主研究好硬件SPI后,能否把经验分享给我一下,我也在学习

硬件SPI挺简单的。
在main()函数里设置一下引脚,然后把代码里的引脚改一下就行了
    P_SW2 |= 0x80; // 使能访问XFR
    // P_SW1 = 0x00;  //0000:SS-P1.2orP5.4, MOSI-P1.3, MISO-P1.4, SCLK-P1.5 SPI功能脚切换
    // P_SW1 = 0x04;  //0100:SS-P2.2, MOSI-P2.3, MISO-P2.4, SCLK-P2.5 SPI功能脚切换
    // P_SW1 = 0x08;  //1000:SS-P5.4, MOSI-P4.0, MISO-P4.1, SCLK-P4.3 SPI功能脚切换
    P_SW1 = 0x0c; // 1100:SS-P3.5, MOSI-P3.4, MISO-P3.3, SCLK-P3.2 SPI功能脚切换
    SPI_init();   // 初始化硬件SPI

  1. /********************引脚定义区********************/
  2. sbit    LCD_CS =  P3 ^ 7; //片选                   CS
  3. sbit    LCD_RST = P3 ^ 6; //复位                   RST
  4. sbit    LCD_RS =  P3 ^ 5; //数据指令           A0/DC
  5. sbit    LCD_CLK = P3 ^ 2; //串行时钟           SCL
  6. sbit    LCD_DAT = P3 ^ 4; //串行数据           SDA
  7. //   7       6       5       4       3       2       1       0            Reset Value
  8. //        SSIG        SPEN        DORD        MSTR        CPOL        CPHA        SPR1        SPR0                0x00
  9. #define        SSIG                1        //1: 忽略SS脚,由MSTR位决定主机还是从机                0: SS脚用于决定主从机。
  10. #define        SPEN                1        //1: 允许SPI,                                                                0:禁止SPI,所有SPI管脚均为普通IO
  11. #define        DORD                0        //1:LSB先发,                                                                0:MSB先发
  12. #define        MSTR                1        //1:设为主机                                                                0:设为从机
  13. #define        CPOL                1        //1: 空闲时SCLK为高电平,                                        0:空闲时SCLK为低电平
  14. #define        CPHA                1        //
  15. #define        SPR1                0        //SPR1,SPR0   00: fosc/4,     01: fosc/8
  16. #define        SPR0                0        //            10: fosc/16,    11: fosc/32 or fosc/2(快速SPI模式时)
  17. #define        SPEED_4                0        // fosc/4
  18. #define        SPEED_16        1        // fosc/8
  19. #define        SPEED_64        2        // fosc/16
  20. #define        SPEED_2         3        // fosc/32 or fosc/2(快速SPI模式时)
  21. //#define        SPEED_128        3        // fosc/32

  22. //sfr SPSTAT  = 0xCD;        //SPI状态寄存器
  23. //   7       6      5   4   3   2   1   0            Reset Value
  24. //        SPIF        WCOL        -        -        -        -        -        -
  25. #define        SPIF        0x80                //SPI传输完成标志。写入1清0。
  26. #define        WCOL        0x40                //SPI写冲突标志。写入1清0。
  27. /*********************************
  28. 函数名称:SPI_init
  29. 功能:SPI初始化
  30. 输入:无
  31. 输出:无
  32. 备注:无
  33. *********************************/
  34. void        SPI_init(void)       
  35. {
  36.         SPCTL = (SSIG << 7)+(SPEN << 6)+(DORD << 5)+(MSTR << 4)+(CPOL << 3)+(CPHA << 2)+SPEED_2;
  37. }

  38. /*********************************
  39. 函数名称:Lcd_write_byte
  40. 功能:LCD通过硬件SPI发送一个字节
  41. 输入:写入内容
  42. 输出:无
  43. 备注:硬件SPI串口
  44. *********************************/
  45. void Lcd_write_byte(unsigned char Byte)
  46. {
  47.     SPDAT = Byte;                //发送一个字节
  48.     while((SPSTAT & SPIF)==0)        ;        //等待发送完成
  49.     SPSTAT = SPIF+WCOL;                        //清0 SPIF和WCOL标志
  50. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2023-7-27 15:46:39 | 显示全部楼层
我写了一个手推车的微秒带参数延时函数,需要的话可以到坛子里找桃源客大神双路电压电流表那个帖子里找一下。每调用一次比实际需求多5个机器周期。你这个毫秒级的应该比较好写,随便改一下软件自动生成的那个代码或者网上能找到现成的函数
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-28 03:30 , Processed in 0.062400 second(s), 9 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表