Вот нашел готовое нужное мне решение, но для ОА , мои пробы переделать это под ОК никак не получаются,
Помогите пожалуйста, переделать это под ОК ....
Спойлер
Код: Выделить всё
/*****************************************************
CodeWizardAVR V2.05.3 Standard
Date : 29.07.2013
Chip type : ATmega8
AVR Core Clock frequency: 8,000000 MHz
*****************************************************/
#include <mega8.h>
#include <delay.h>
#define a 128 // q0
#define b 64 // q1
#define c 32 // q2
#define d 16 // q3 Меняем эти числа для другого индикатора
#define e 8 // q4
#define f 4 // q5
#define g 2 // q6
#define dp 1 // q7
typedef unsigned char byte ;
// byte dig[] = {
// (a+b+c+d+e+f), //0 Для общего катода
// (b+c), //1
// (a+b+g+e+d), //2
// (a+b+g+c+d), //3
// (f+g+b+c) , //4
// (a+f+g+c+d) , //5
// (a+f+g+c+d+e) , //6
// (a+b+c) , //7
// (a+b+c+d+e+f+g), //8
// (a+b+c+d+f+g) , //9
// (c+e+g) , // n
// (a+e+f+g) , // f
// (c+d+e+g) , // o
// 0, //пусто
// dp} ; // точка №14
byte dig[] = {
~(a+b+c+d+e+f), //0 Для общего анода
~(b+c), //1
~(a+b+g+e+d), //2
~(a+b+g+c+d), //3
~(f+g+b+c) , //4
~(a+f+g+c+d) , //5
~(a+f+g+c+d+e) , //6
~(a+b+c) , //7
~(a+b+c+d+e+f+g), //8
~(a+b+c+d+f+g) , //9
~(c+e+g) , // n
~(a+e+f+g) , // f
~(c+d+e+g) , // o
~0, //пусто
~dp} ; // точка №14
byte number_razr[] = { 8 , 4 , 2 , 1 } ; // Для общего анода
byte ind[4]; // массив индикатора 0-единицы , 3 - тысячи
unsigned char cursor=0; // номер разряда
void reg_out(byte tmp) // output function in 74hc595 reg
{ byte i;
for (i=0;i<8;i++) // для всех 8-ми битов числа tmp
{ PORTD=PIND&0b00011111; // сброс в 0 входов регистра
PORTD.6 = (tmp)&0b00000001 ; // мл разряд на данные
PORTD.5 = 0b00000001; // строб
tmp= tmp>>1; // подготовка след разряда
}
PORTD.7 = 1; // после 8-го данные защелкнуть
}
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
PORTD=0b00000000; //гашение индикатора PORTB=0b11110000; //гашение индикатора
reg_out(ind[cursor]); // подаем в регистр число
PORTD=(PIND&0b11110000) | number_razr[cursor] ;// засвеч. разряд
cursor++; //
if (cursor>3) // индекс
cursor=0; // сброс индекса
}
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{ TCNT1H=0xFF; // перезапуск таймера 1
TCNT1L=0x00;
}
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
}
void main(void)
{
PORTB=0b00000000;
DDRB=0b00000000;
PORTC=0b00000000;
DDRC=0b00000000;
PORTD=0b00000000;
DDRD=0b11101111;
TCCR0=0x03;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x03;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x07;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x45;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
#asm("sei")
while (1)
{
ind[3] =dig[1] ;
ind[2] =dig[2] & dig[14] ;
ind[1] =dig[3] ;
ind[0] =dig[4] ;
};
}
- Вложения
-
- OA_OK.rar
- (54.02 КБ) 147 скачиваний


