|
- #include "MsTimer2.h"
- #define SHCP 2 //上升沿锁存数据到595内部
- #define STCP 3 //上升沿输出595内部数据
- #define OE 4 //高电平关闭595输出 (低电平打开输出,防止上电瞬间乱码)
- #define DS 5 //595被锁存的数据
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- #define hc595_num 3 //595级联数量
- u8 hc595_data[hc595_num]; //595数据容器
- const u8 seg[16] = { //共阴数码管段码16进制
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
- };
- void hc595(bool on){ //请将数据写入 hc595_data 数组 然后发送 参数:1打开输出 0高阻输出
- u8 j,k = hc595_num - 1;
- do {
- j = 7;
- do {
- digitalWrite(DS,hc595_data[k] & (1 << j) ? 1 : 0);
- digitalWrite(SHCP,0);
- digitalWrite(SHCP,1);
- } while(j--);
- } while(k--);
- digitalWrite(STCP,0);
- digitalWrite(STCP,1);
- digitalWrite(OE,!on);
- }
- void setup() {
- pinMode(SHCP, OUTPUT);
- pinMode(STCP, OUTPUT);
- pinMode(DS, OUTPUT);
- pinMode(OE, OUTPUT);
- MsTimer2::set(1,ms1); //1ms定时器
- MsTimer2::start(); //开定时器中断
- }
- void loop() {
- }
- void ms1(){ //1ms定时器中断
- static unsigned int i = 0;
- static unsigned int ms = 0;
- if(++ms >= 100) {
- ms = 0;
- hc595_data[0]=seg[(i/100)%10];
- hc595_data[1]=seg[(i/10)%10];
- hc595_data[2]=seg[i%10];
- hc595(1);
- if(++i >= 1000){
- i = 0;
- }
- }
- }
复制代码 |
|