Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.54 KB | None | 0 0
  1. #include <LPC23xx.H>
  2.  
  3. #define BIT_BTTN (1<<29)
  4.  
  5. #define STB 26 // Port1.26
  6. #define CLK 27 // Port1.27
  7. #define DIO 28 // Port1.28
  8.  
  9. void delay(unsigned int count) {
  10. unsigned int i;
  11. for (i = 0; i < count; i++) {}
  12. }
  13.  
  14. void tm1638_sendbyte(unsigned int x) {
  15. unsigned int i;
  16. IODIR1 |= (1 << DIO); // Устанавливаем пин DIO на вывод
  17.  
  18. for (i = 0; i < 8; i++) {
  19. IOCLR1 = (1 << CLK); // Сигнал CLK устанавливаем в 0
  20. delay(0xfff); // Задержка
  21.  
  22. if (x & 1) { // Устанавливаем значение на выходе DIO
  23. IOSET1 = (1<<DIO);
  24. } else {
  25. IOCLR1 = (1<<DIO);
  26. }
  27.  
  28. delay(0xfff); // Задержка
  29. x >>= 1;
  30. IOSET1 = (1 << CLK); // Сигнал CLK устанавливаем в 1
  31. delay(0x1fff);
  32. }
  33. }
  34.  
  35. unsigned int tm1638_receivebyte() {
  36. unsigned int i;
  37. unsigned int x = 0;
  38. IODIR1 &= ~(1 << DIO); // Устанавливаем пин DIO на ввод
  39.  
  40. for (i = 0; i < 32; i++) {
  41. IOCLR1 = (1 << CLK); // Сигнал CLK устанавливаем в 0
  42. delay(0xfff); // Задержка
  43.  
  44. if (IOPIN1&(1 << DIO)) {
  45. x |= (1 << i);
  46. }
  47.  
  48. delay(0xfff); // Задержка
  49. IOSET1 = (1 << CLK); // Сигнал CLK устанавливаем в 1
  50. delay(0x1fff);
  51. }
  52.  
  53. return x;
  54. }
  55.  
  56. void tm1638_sendcmd(unsigned int x) {
  57. // Устанавливаем пассивный высокий уровень сигнала STB
  58. IOSET1 = (1 << STB);
  59.  
  60. // Устанавливаем пины CLK,DIO,STB на вывод
  61. IODIR1 = (1 << CLK) | (1 << DIO) | (1 << STB);
  62.  
  63. // Устанавливаем активный низкий уровень сигнала STB
  64. IOCLR1 = (1 << STB);
  65. tm1638_sendbyte(x);
  66. }
  67.  
  68. void tm1638_setadr(unsigned int adr) {
  69. // Установить адрес регистра LED инидикации
  70. tm1638_sendcmd(0xC0 | adr);
  71. }
  72.  
  73. void tm1638_init() {
  74. unsigned int i;
  75.  
  76. // Разрешить работу индикации
  77. tm1638_sendcmd(0x88);
  78.  
  79. // Установить режим адресации: автоинкремент
  80. tm1638_sendcmd(0x40);
  81.  
  82. // Установить адрес регистра LED инидикации
  83. tm1638_setadr(0);
  84.  
  85. // Сбросить все
  86. for (i = 0; i <= 0xf; i++) {
  87. tm1638_sendbyte(0);
  88. }
  89.  
  90. // Установить режим адресации: фиксированный
  91. tm1638_sendcmd(0x44);
  92. }
  93.  
  94. int main (void) {
  95. unsigned int i;
  96. tm1638_init();
  97.  
  98. while (1) {
  99. i = 1;
  100.  
  101. // Проверка нажатия кнопки
  102. tm1638_sendcmd(0x46);
  103. i = tm1638_receivebyte();
  104. if (i != 0) { //0 - вкл, 1 - выкл
  105. tm1638_setadr(1); // starter
  106. tm1638_sendbyte(1); // Посылка данных
  107. tm1638_setadr(3); // klapan
  108. tm1638_sendbyte(1); // Посылка данных
  109. delay(0xffff);
  110. tm1638_setadr(3); // klapan
  111. tm1638_sendbyte(0); // Посылка данных
  112. tm1638_setadr(5); // zazhiganie
  113. tm1638_sendbyte(1); // Посылка данных
  114. delay(0xffff);
  115. } else {
  116. tm1638_setadr(1); // starter
  117. tm1638_sendbyte(0); // Посылка данных
  118. tm1638_setadr(3); // klapan
  119. tm1638_sendbyte(1); // Посылка данных
  120. delay(0xffff);
  121. tm1638_setadr(3); // klapan
  122. tm1638_sendbyte(0); // Посылка данных
  123. tm1638_setadr(5); // zazhiganie
  124. tm1638_sendbyte(1); // Посылка данных
  125. delay(0xffff);
  126. tm1638_setadr(5); // zazhiganie
  127. tm1638_sendbyte(0); // Посылка данных
  128. }
  129.  
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement