|
- #include "stc12ca60s2.h" //必须支持硬件SPI的型号才可以使用本程序
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- #define txd595(dat) SPDAT = (dat);while(!(SPSTAT & 0x80));SPSTAT = 0xC0 //595发送字节(硬件SPI)
- #define out595() STCP=0;STCP=1 //硬件级联几片595 必须执行几次 txd595() 才可以输出锁存,不能多也不能少
- sbit STCP = P1^4; //上升沿输出595内部数据 PIN12 (SPI片选,任意IO)
- //硬件SPI定义的IO口 (不同型号的定义可能会有不同,不可随意更改,具体见STC手册)
- sbit DS = P1^5; //595被锁存的数据 PIN14 (SPI_MOSI) P1.5
- // (SPI_MISO) P1.6 (不使用)
- sbit SHCP = P1^7; //上升沿锁存数据到595内部 PIN11 (SPI_SCL) P1.7
- u8 code nbr[16]={ //共阴数码管段码16进制
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
- };
- void ShowHEX(unsigned long c){ //数码管显示8位16进制
- u8 a=1,b=0,d=28;
- do {
- txd595(nbr[(c>>d)&0xF]); //发送段码
- txd595(~a); //发送位码
- out595();
- a<<=1;
- d-=4;
- } while(a);
- }
- void main(){
- u32 a=0;
- SPCTL = 0xDC; //配置寄存器 开硬件SPI 使用方法见STC手册
- while(1){
- ShowHEX(a++); //演示16进制累加
- }
- }
复制代码 |
|