Advertisement
Guest User

Untitled

a guest
May 30th, 2013
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.51 KB | None | 0 0
  1. #define HT1632_CMD_SYSDIS   0x00    // CMD= 0000-0000-x Turn off oscil
  2. #define HT1632_CMD_SYSON    0x01    // CMD= 0000-0001-x Enable system oscil
  3. #define HT1632_CMD_LEDOFF   0x02    // CMD= 0000-0010-x LED duty cycle gen off
  4. #define HT1632_CMD_LEDON    0x03    // CMD= 0000-0011-x LEDs ON
  5. #define HT1632_CMD_BLOFF    0x08    // CMD= 0000-1000-x Blink OFF
  6. #define HT1632_CMD_BLON     0x09    // CMD= 0000-1001-x Blink On
  7. #define HT1632_CMD_SLVMD    0x10    // CMD= 0001-00xx-x Slave Mode
  8. #define HT1632_CMD_MSTMD    0x14    // CMD= 0001-01xx-x Master Mode
  9. #define HT1632_CMD_RCCLK    0x18    // CMD= 0001-10xx-x Use on-chip clock
  10. #define HT1632_CMD_EXTCLK   0x1C    // CMD= 0001-11xx-x Use external clock
  11. #define HT1632_CMD_COMS00   0x20    // CMD= 0010-ABxx-x commons options
  12. #define HT1632_CMD_COMS01   0x24    // CMD= 0010-ABxx-x commons options
  13. #define HT1632_CMD_COMS10   0x28    // CMD= 0010-ABxx-x commons options
  14. #define HT1632_CMD_COMS11   0x2C    // P-MOS OUTPUT AND 16COMMON OPTION
  15. #define HT1632_CMD_PWM      0xA0    // CMD= 101x-PPPP-x PWM duty cycle
  16.  
  17. #define HT1632_ID_CMD   4   /* ID = 100 - Commands */
  18. #define HT1632_ID_RD    6   /* ID = 110 - Read RAM */
  19. #define HT1632_ID_WR    5   /* ID = 101 - Write RAM */
  20.  
  21. #define DATA_PIN 2
  22. #define WR_PIN 3
  23. #define CS_PIN 4
  24.  
  25. void setup() {
  26.   pinMode(DATA_PIN, OUTPUT);
  27.   pinMode(WR_PIN, OUTPUT);
  28.   pinMode(CS_PIN, OUTPUT);
  29.  
  30.   digitalWrite(DATA_PIN, HIGH);
  31.   digitalWrite(WR_PIN, HIGH);
  32.   digitalWrite(CS_PIN, HIGH);
  33.  
  34.   digitalWrite(CS_PIN, LOW);
  35.   /* init display once after startup */
  36.   ht1632_write_data_MSB(3, HT1632_ID_CMD, false); // IDs are 3 bits
  37.   ht1632_write_data_MSB(8, HT1632_CMD_SYSDIS, true); // 8 bits
  38.   ht1632_write_data_MSB(8, HT1632_CMD_SYSON, true); // 8 bits
  39.   ht1632_write_data_MSB(8, HT1632_CMD_COMS11, true); // 8 bits
  40.   ht1632_write_data_MSB(8, HT1632_CMD_LEDON, true); // 8 bits
  41.   ht1632_write_data_MSB(8, HT1632_CMD_BLOFF, true); // 8 bits
  42.   ht1632_write_data_MSB(8, HT1632_CMD_PWM+15, true); // 8 bits  
  43.   digitalWrite(CS_PIN, HIGH);
  44. }
  45.  
  46. void loop() {
  47.   // #####################################################
  48.   digitalWrite(CS_PIN, LOW);
  49.   ht1632_write_data_MSB(3, HT1632_ID_WR, false);
  50.   ht1632_write_data_MSB(7, 0, false);
  51.  
  52.   uint8_t i;
  53.   for(i = 0; i<48; ++i)
  54.   {
  55.     ht1632_write_data(8,0xFF); // I was sending "1" here, thats why I was getting only two rows to light up
  56.   }
  57.   digitalWrite(CS_PIN, HIGH);
  58.   // #####################################################
  59.  
  60.   delay(500);
  61.  
  62.   // #####################################################
  63.   digitalWrite(CS_PIN, LOW);
  64.   ht1632_write_data_MSB(3, HT1632_ID_WR, false);
  65.   ht1632_write_data_MSB(7, 0, false);
  66.  
  67.   for(i = 0; i<48; ++i)
  68.   {
  69.     ht1632_write_data(8,0);
  70.   }
  71.   digitalWrite(CS_PIN, HIGH);
  72.   // #####################################################
  73.  
  74.   delay(500);
  75. }
  76.  
  77. void ht1632_write_data_MSB(uint8_t cnt, uint8_t data, uint8_t extra)
  78. {
  79.   int8_t i;
  80.  
  81.   for(i = cnt - 1; i >= 0; i--)
  82.   {
  83.     digitalWrite(WR_PIN, LOW);
  84.     if ((data >> i) & 1)
  85.     {  
  86.       digitalWrite(DATA_PIN, HIGH);
  87.     }
  88.     else
  89.     {
  90.       digitalWrite(DATA_PIN, LOW);
  91.     }
  92.  
  93.     digitalWrite(WR_PIN, HIGH);
  94.   }
  95.  
  96.   // Send an extra bit
  97.   if (extra)
  98.   {
  99.     digitalWrite(WR_PIN, LOW);
  100.     digitalWrite(DATA_PIN, HIGH);
  101.     digitalWrite(WR_PIN, HIGH);
  102.   }
  103. }
  104.  
  105. void ht1632_write_data(uint8_t cnt, uint8_t data)
  106. {
  107.   uint8_t i;
  108.   for (i = 0; i < cnt; i++)
  109.   {
  110.     digitalWrite(WR_PIN, LOW);
  111.  
  112.     if ((data >> i) & 1) {
  113.       digitalWrite(DATA_PIN, HIGH);
  114.     }
  115.     else {
  116.       digitalWrite(DATA_PIN, LOW);
  117.     }
  118.  
  119.     digitalWrite(WR_PIN, HIGH);
  120.   }
  121. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement