设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1397|回复: 1
收起左侧

STC12C5A60S2 单片机 使用硬件SPI驱动两片74HC595+8位共阴数码管显示C源码

[复制链接]
发表于 2021-9-11 08:22:29 | 显示全部楼层 |阅读模式
SPI.png
  1. #include "stc12ca60s2.h"        //必须支持硬件SPI的型号才可以使用本程序
  2. #define u8 unsigned char
  3. #define u16 unsigned int
  4. #define u32 unsigned long
  5. #define txd595(dat) SPDAT = (dat);while(!(SPSTAT & 0x80));SPSTAT = 0xC0                //595发送字节(硬件SPI)
  6. #define out595() STCP=0;STCP=1                //硬件级联几片595 必须执行几次 txd595() 才可以输出锁存,不能多也不能少

  7. sbit STCP = P1^4;         //上升沿输出595内部数据                PIN12        (SPI片选,任意IO)
  8. //硬件SPI定义的IO口 (不同型号的定义可能会有不同,不可随意更改,具体见STC手册)
  9. sbit DS = P1^5;         //595被锁存的数据                PIN14        (SPI_MOSI)        P1.5
  10.                         //        (SPI_MISO)        P1.6        (不使用)
  11. sbit SHCP = P1^7;         //上升沿锁存数据到595内部        PIN11        (SPI_SCL)        P1.7


  12. u8 code nbr[16]={        //共阴数码管段码16进制
  13.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
  14. };

  15. void ShowHEX(unsigned long c){                //数码管显示8位16进制
  16.         u8 a=1,b=0,d=28;
  17.         do {
  18.                 txd595(nbr[(c>>d)&0xF]);                //发送段码
  19.                 txd595(~a);                                //发送位码
  20.                 out595();
  21.                 a<<=1;
  22.                 d-=4;
  23.         } while(a);
  24. }


  25. void main(){
  26.         u32 a=0;
  27.         SPCTL = 0xDC;                        //配置寄存器 开硬件SPI 使用方法见STC手册
  28.         while(1){
  29.         ShowHEX(a++);                        //演示16进制累加
  30.         }
  31. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-19 19:23 , Processed in 0.635037 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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