Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <LPC23xx.H>
- #define BIT_BTTN (1<<29)
- #define STB 26 // Port1.26
- #define CLK 27 // Port1.27
- #define DIO 28 // Port1.28
- void delay(unsigned int count) {
- unsigned int i;
- for (i = 0; i < count; i++) {}
- }
- void tm1638_sendbyte(unsigned int x) {
- unsigned int i;
- IODIR1 |= (1 << DIO); // Устанавливаем пин DIO на вывод
- for (i = 0; i < 8; i++) {
- IOCLR1 = (1 << CLK); // Сигнал CLK устанавливаем в 0
- delay(0xfff); // Задержка
- if (x & 1) { // Устанавливаем значение на выходе DIO
- IOSET1 = (1<<DIO);
- } else {
- IOCLR1 = (1<<DIO);
- }
- delay(0xfff); // Задержка
- x >>= 1;
- IOSET1 = (1 << CLK); // Сигнал CLK устанавливаем в 1
- delay(0x1fff);
- }
- }
- unsigned int tm1638_receivebyte() {
- unsigned int i;
- unsigned int x = 0;
- IODIR1 &= ~(1 << DIO); // Устанавливаем пин DIO на ввод
- for (i = 0; i < 32; i++) {
- IOCLR1 = (1 << CLK); // Сигнал CLK устанавливаем в 0
- delay(0xfff); // Задержка
- if (IOPIN1&(1 << DIO)) {
- x |= (1 << i);
- }
- delay(0xfff); // Задержка
- IOSET1 = (1 << CLK); // Сигнал CLK устанавливаем в 1
- delay(0x1fff);
- }
- return x;
- }
- void tm1638_sendcmd(unsigned int x) {
- // Устанавливаем пассивный высокий уровень сигнала STB
- IOSET1 = (1 << STB);
- // Устанавливаем пины CLK,DIO,STB на вывод
- IODIR1 = (1 << CLK) | (1 << DIO) | (1 << STB);
- // Устанавливаем активный низкий уровень сигнала STB
- IOCLR1 = (1 << STB);
- tm1638_sendbyte(x);
- }
- void tm1638_setadr(unsigned int adr) {
- // Установить адрес регистра LED инидикации
- tm1638_sendcmd(0xC0 | adr);
- }
- void tm1638_init() {
- unsigned int i;
- // Разрешить работу индикации
- tm1638_sendcmd(0x88);
- // Установить режим адресации: автоинкремент
- tm1638_sendcmd(0x40);
- // Установить адрес регистра LED инидикации
- tm1638_setadr(0);
- // Сбросить все
- for (i = 0; i <= 0xf; i++) {
- tm1638_sendbyte(0);
- }
- // Установить режим адресации: фиксированный
- tm1638_sendcmd(0x44);
- }
- int main (void) {
- unsigned int i;
- tm1638_init();
- while (1) {
- i = 1;
- // Проверка нажатия кнопки
- tm1638_sendcmd(0x46);
- i = tm1638_receivebyte();
- if (i != 0) { //0 - вкл, 1 - выкл
- tm1638_setadr(1); // starter
- tm1638_sendbyte(1); // Посылка данных
- tm1638_setadr(3); // klapan
- tm1638_sendbyte(1); // Посылка данных
- delay(0xffff);
- tm1638_setadr(3); // klapan
- tm1638_sendbyte(0); // Посылка данных
- tm1638_setadr(5); // zazhiganie
- tm1638_sendbyte(1); // Посылка данных
- delay(0xffff);
- } else {
- tm1638_setadr(1); // starter
- tm1638_sendbyte(0); // Посылка данных
- tm1638_setadr(3); // klapan
- tm1638_sendbyte(1); // Посылка данных
- delay(0xffff);
- tm1638_setadr(3); // klapan
- tm1638_sendbyte(0); // Посылка данных
- tm1638_setadr(5); // zazhiganie
- tm1638_sendbyte(1); // Посылка данных
- delay(0xffff);
- tm1638_setadr(5); // zazhiganie
- tm1638_sendbyte(0); // Посылка данных
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement