Рис1
и Рис2
разный результат как на Рис3
уже голову сломал.
Вот сам код:
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#define CHISLO PORTD
#define RAZRIAD PORTB
unsigned int razr1 = 0, razr2 = 0, razr3 = 0, razr4 = 0, razr5 = 0, razr6 = 0;
unsigned char reg = 1;
unsigned int z, a=0, i=0, k=0, j=0;
unsigned int comma=0x80;
unsigned int chisla [11] = {
// числа от 0 до 9
0x3f, 0x6, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x80
};
void vse_chislo (unsigned int razbivka_chisla)
{
// индикация первого дисплея 4 индикатора
razr1 = razbivka_chisla/1000; // тысячи
razr2 = razbivka_chisla%1000/100; // сотни
razr3 = razbivka_chisla%100/10; // десятки
razr4 = razbivka_chisla%10; // единицы
}
void vse_chislo1 (unsigned int razbivka_chisla1)
{
// индикация второго дисплея 2 индикатора
razr5= razbivka_chisla1%100/10;// десятки
razr6= razbivka_chisla1%10;// единицы
}
ISR (TIMER0_OVF_vect)
{
//переключение разрядов для обоих дисплеев
if (reg == 1) {RAZRIAD = 0b00000001; CHISLO = chisla[razr1];} //включаем 1-й разряд, остальные выключаем
if (reg == 2) {RAZRIAD = 0b00000010; CHISLO = chisla[razr2];} //включаем 2-й разряд, остальные выключаем
if (reg == 3) {RAZRIAD = 0b00000100; CHISLO = chisla[razr3];} //включаем 3-й разряд, остальные выключаем
if (reg == 4) {RAZRIAD = 0b00001000; CHISLO = chisla[razr4] | comma;} //включаем 4-й разряд, остальные выключаем
if (reg == 5) {RAZRIAD = 0b00010000; CHISLO = chisla[razr5];} //включаем 5-й разряд, остальные выключаем
if (reg == 6) {RAZRIAD = 0b00100000; CHISLO = chisla[razr6];} //включаем 6-й разряд, остальные выключаем
reg++; // добавляем к переменной reg единицу
if (reg > 6) reg = 1; // отслеживаем переменную reg, чтобы она не превысила значение 4
}
int main(void)
{
// Настройка портов ввода-вывода
DDRD = 0xFF;
DDRB = 0xFF;
DDRC &= ~((1<<4) | (1<<5));
PORTC |= (1<<2) | (1<<3)| (1<<4)| (1<<5);
RAZRIAD = 0b00000001;
CHISLO = 0xff;
// Настройка 0-го таймер счетчика на прерывание по переполнению
TCCR0 |= (1<<1); TCCR0 &= ~((1<<0) | (1<<2)); // f/8
TIMSK |= (1<<0);
TCNT0 = 0;
sei ();
while (1)
{
vse_chislo1(i); //вывод на первый дисплей
vse_chislo(j); //вывод на второй дисплей
//*---------------------------------Дисплей 1-------------------------------------------------------*/
/* switch(i){
case 1: z=1; break;
case 2: z=5; break;
case 3: z=10; break;
case 4: z=20; break;
case 5: z=50; break;
default : z=0;
}
*/
if (bit_is_clear(PINC, 2)){
if(i<99){
i=i+1;
_delay_ms(2500);
}else { i=99;}
}
if (bit_is_clear(PINC, 3)){
if(i>1){
i=i-1;
_delay_ms(2500);
}else { i=0;}
}
/*-------------------------------Дисплей 2---------------------------------------------------------*/
/* switch(j){
case 1: k=1500; break;
case 2: k=500; break;
case 3: k=300; break;
case 4: k=200; break;
case 5: k=100; break;
default : k=0;
}*/
if (bit_is_clear(PINC, 4)){
if(j<9999){
j=j+1;
_delay_ms(500);
}else { j=9999;}
}
if (bit_is_clear(PINC, 5)){
if(j>1){
j=j-1;
_delay_ms(500);
}else { j=0;}
}
}
}
- Вложения
-
- 2020-05-17_18-20-17.png
- Рис3
- (13.84 КБ) 889 скачиваний
-
- 2020-05-17_18-18-20.png
- Рис2
- (4.45 КБ) 880 скачиваний
-
- 2020-05-17_18-17-19.png
- Рис1
- (3.59 КБ) 910 скачиваний


