Основные функции таймера:
1. Установка времени таймера от 0 часов 0 минут до 99 часов 59 минут;
2. При обратном отсчете во время последней минуты отображать только количество секунд;
3. При достижении показаний экрана 00:00 включается звуковой сигнал продолжительностью 1 минута;
4. Во время звучания сигнала достаточно нажать кнопки +, - для его отмены;
Принципиальная схема выглядит следующим образом:
Исходный код прошивки:
1. Установка времени таймера от 0 часов 0 минут до 99 часов 59 минут;
2. При обратном отсчете во время последней минуты отображать только количество секунд;
3. При достижении показаний экрана 00:00 включается звуковой сигнал продолжительностью 1 минута;
4. Во время звучания сигнала достаточно нажать кнопки +, - для его отмены;
Принципиальная схема выглядит следующим образом:
Исходный код прошивки:
/************* Описание программы ****************************** Простой бытовой таймер на микросхеме STC15F204EA (диапазон от 0 до 99 часов 59 минут) Основные функции таймера: 1. Установка времени таймера от 0 часов 0 минут до 99 часов 59 минут; 2. При обратном отсчете во время последней минуты отображать только количество секунд; 3. При достижении показаний экрана 00:00 включается звуковой сигнал продолжительностью 1 минута; 4. Во время звучания сигнала достаточно нажать кнопки +, - для его отмены; Сайт: http://mynobook.blogspot.com/ Примечание: При использовании материалов данного сайта ссылка на него обязательна! ***************************************************/ #include <REG51.H> //Цифровой индикатор:светодиодный многоразрядный цифровой семисегментный с общим анодом unsigned char code table[]= {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F, 0x01,0x09,0x11,0xC1,0x63,0x85,0x61,0x71, 0xFD,0xff};//0-9,A-F,-,выкл. #define LED_D P2 //Сегменты индикатора #define LED_S P3 //Разряды индикатора sfr AUXR=0x8E; //0000,0000 Вспомогательный регистр sfr P3M0=0xB2; //P3 регистр статуса sbit Beep=P1^3;//Пин зуммера sbit K1=P1^0; // Пин кнопки "Выбор" sbit K2=P1^1; // Пин кнопки "+" sbit K3=P1^2; // Пин кнопки "-" unsigned char L,TZFlash,Ledcount,timeover,timestop,timeoversecend; unsigned int timecount;//Переменная секунд таймера unsigned char H,M,S; unsigned char cnt=0;//Переменная меню unsigned char show[4]={0,0,0,0}; void delay(unsigned int x) { while(x--); } //Функция управления цифровым дисплеем void deal_show(void) { if( (timeover==1)&&(timestop==0))//После окончания времени отсчета, дисплей начинает мигать { if(TZFlash==0) // дисплей погашен { show[0]=show[1]=show[2]=show[3]=0x11; } else //Дисплей показывает "00:00" { show[0]=show[1]=show[2]=show[3]=0; } } else { if( (cnt!=0)&&(TZFlash==0) ) //Регулировка частоты мигания { switch(cnt) { case 1: show[0]=M%10; show[1]=M/10; show[2]=0x11; show[3]=0x11;break; case 2: show[0]=0x11; show[1]=0x11; show[2]=H%10; show[3]=H/10;break; } } else { //Последнее минуту время отображается в секундах if( (M==0)&&(H==0)&&(cnt==0)&&(timeover==0) ) { show[0]=S%10; show[1]=S/10; show[2]=0x11; show[3]=0x11; } else //Нормальное отображение времени { show[0]=M%10; show[1]=M/10; show[2]=H%10; show[3]=H/10; } } } } //Функция сигнала зуммера void bell(void) { unsigned char c; Beep=0; for(c=0;c<100;c++) //Сигнал, примерно каждые 30мс delay(1500); Beep=1; } void key(void) { if(K1==0) //Функции клавиш { bell(); S=0; if(++cnt==3)//1=H;2=M; { cnt=0;S=3; //После установки времени инициализация 3сек timeover=timestop=timeoversecend=0; } while(K1==0)deal_show(); } if(K2==0) //"+" { bell(); if(cnt!=0) { switch(cnt) { case 1: if(++H==99) H=0; break; case 2: if(++M==60){M=0; S=0;}break; } } if(timeover==1) //Отключение звука timestop=1; while(K2==0)deal_show(); } if(K3==0) //"-" { bell(); if(cnt!=0) { switch(cnt) { case 1: if(H--==0) H=99; break; case 2: if(M--==0) {M=59; S=0;} break; } } if(timeover==1) //Отключение звука timestop=1; while(K3==0)deal_show(); } } void Timer0Init(void) //2мс @ 12.000MHz { AUXR |= 0x80; //Режим таймера TMOD &= 0xF0; //Установка режима таймера TL0 = 0x40; //Установка начального значения TH0 = 0xA2; //Установка начального значения TF0 = 0; //Очистить значение TF0 TR0 = 1; //Начало отсчета таймера ET0 = 1; } void main () { Timer0Init();//Инициализация таймера, прерывание 2мс EA=1; //EA P3M0=0xf0; // набор выходных пинов P3 timecount=Ledcount=timeover=timestop=timeoversecend=0; H=0;M=3;S=3; //Начальное значение 3мин while(1) { deal_show();//Вывод на дисплей key(); //Опрос клавиш } } void time0(void) interrupt 1 //2мс { if(++timecount==500) //1 секунда { timecount=0; if((timeover==0)&&(cnt==0))//Значение не достигло нормального времени { if( S--==0 ) { if(M--==0) { if(H--==0) { timeover=1; S=H=M=0; } else M=59; } else S=59; } } else //Время ожидания - одна минута {timeoversecend++;} } switch(timecount) //Настройка сигнала { case 0: TZFlash=0;L=1; break;//Мигание case 50: TZFlash=1; break; case 100: TZFlash=0; break; case 150: TZFlash=1; break; case 200: TZFlash=0; break; case 250: TZFlash=1;L=0; break;//Мигание case 300: TZFlash=0; break; case 350: TZFlash=1; break; case 400: TZFlash=0; break; case 450: TZFlash=1; break; default: break; } if((timeover==1)&&(timestop==0))//Время таймера не достигло конца { if(timeoversecend<60) //Сигнал окончания, 1 мин=60сек Beep=TZFlash; else //Время таймера окончено { timestop=1; timeoversecend=0; } } if(Ledcount++==4) //Сканирование разрядов индикатора Ledcount=0; LED_S = 0x0F;//Разряды индикатор,обнуление switch(Ledcount) //Секунды, запись 0x11 { case 0: if((timeover==0)&&(show[3]==0))//Десятки часов LED_D=table[0x11]; //Первый разряд=0, не отображается else LED_D=table[show[3]]; break; case 1: if(timeover==0) //Позиция часов { if(L==1) //Мигание LED_D=table[show[2]]&0xFE; else LED_D=table[show[2]]; } else //Отображение секунд LED_D=table[show[2]]&0xFE; break; case 2: LED_D=table[show[1]]; break;//Десятки минут case 3: LED_D=table[show[0]]; break;//Минуты default: break; } LED_S=(0x10<<Ledcount); //Выбор позиции }Оригинал статьи здесь.
В1 на схеме это электродетонатор? )))))
ОтветитьУдалить:) Электроденонатор это что-то из взрывотехники
УдалитьB1 - это пьезоэлектрический динамик