📄 avrinit.c
字号:
#include "includes.h"
/*********************************************************************
*********************************************************************/
unsigned char displaycode(const unsigned char discodep)
{
unsigned char discode=0x00;
switch(discodep)
{
case '0':
case 0: discode=0x3f; break;
case '1':
case 1: discode=0x06; break;
case '2':
case 2: discode=0x5b; break;
case '3':
case 3: discode=0x4f; break;
case '4':
case 4: discode=0x66; break;
case '5':
case 5: discode=0x6d; break;
case '6':
case 6: discode=0x7d; break;
case '7':
case 7: discode=0x07; break;
case '8':
case 8: discode=0x7f; break;
case '9':
case 9: discode=0x6f; break;
case 'A':
case 10: discode=0x88; break;
case 'B':
case 11: discode=0x83; break;
case 'C':
case 12: discode=0xc6; break;
case 'D':
case 13: discode=0xa1; break;
case 'E':
case 14: discode=0x86; break;
case 'F':
case 15: discode=0x8e; break;
case 'G': discode=0x3d; break;
case 'H': discode=0x89; break;
case 'I': discode=0xcf; break;
case 'J': discode=0xe1; break;
case 'K': discode=0x8f; break;
case 'L': discode=0xc7; break;
case 'M': discode=0xaa; break;
case 'N': discode=0xab; break;
case 'O': discode=0xa3; break;
case 'P': discode=0x8c; break;
case 'Q': discode=0x98; break;
case 'R': discode=0xcc; break;
case 'S': discode=0xd2; break;
case 'T': discode=0xce; break;
case 'U': discode=0xc1; break;
case 'V': discode=0xe3; break;
case 'W': discode=0xe2; break;
case 'X': discode=0x9b; break;
case 'Y': discode=0x6e; break;
case 'Z': discode=0x49; break;
case '-': discode=0x40; break;
case '.': discode=0x80; break;
//set a b c.....
case 0x8a: discode=0x01; break;
case 0x8b: discode=0x02; break;
case 0x8c: discode=0x04; break;
case 0x8d: discode=0x08; break;
case 0x8e: discode=0x10; break;
case 0x8f: discode=0x20; break;
case 0x90: discode=0x40; break;
case 0x91: discode=0x80; break;
case 0x92: discode=0x11; break;
case 0x93: discode=0x22; break;
case 0x94: discode=0x44; break;
case 0x95: discode=0x88; break;
case 0x96: discode=0x03; break;
case 0x97: discode=0x06; break;
case 0x99: discode=0x0c; break;
case 0x9a: discode=0x18; break;
case 0x9b: discode=0x30; break;
case 0x9c: discode=0x60; break;
case 0x9d: discode=0xc0; break;
case 0x9e: discode=0x07; break;
case 0x9f: discode=0x1c; break;
case 0xa0: discode=0x38; break;
case 0xa1: discode=0x70; break;
case 0xa2: discode=0xe0; break;
case 0xa3: discode=0x0f; break;
case 0xa4: discode=0x1e; break;
case 0xa5: discode=0x3c; break;
case 0xa6: discode=0x78; break;
case 0xa7: discode=0xf0; break;
case 0xa8: discode=0xff; break;
default : discode=0xaa; break;
}
return(discode);
}
void LedRefresh(unsigned char data,unsigned char bit)
{
data=displaycode(data);
switch(bit)
{
case 1:bit=(1<<0);break;
case 2:bit=(1<<1);break;
case 3:bit=(1<<2);break;
case 4:bit=(1<<3);break;
case 5:bit=(1<<4);break;
case 6:bit=(1<<5);break;
case 7:bit=(1<<6);break;
case 8:
bit=(1<<7);
break;
case 0xff:
bit=0xff;
break;
default:
bit=0x00;
break;
}
LedDrive(data,bit);
}
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0b11111000; //m103 output only
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
DDRA=0xff;
DDRC|=0b00000100;
DDRD=0xff;
}
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 100Hz
// actual value: 100.160Hz (0.2%)
void timer0_init(void)
{
TIMSK&=0xFC;
#if OS_TICKS_PER_SEC <= (F_CPU/1024/256)
#error "OS_TICKS_PER_SEC < (F_CPU/1024/256) "
#endif
TCCR0 = 0x00; //stop
OCR0 = (F_CPU/1024/OS_TICKS_PER_SEC);
TCNT0 = 0x00; //set count
TCCR0=(1<<WGM01)|0x05; //start timer
TIMSK |= 0x02; //timer interrupt sources
}
//TIMER2 initialize - prescale:1024
// WGM: Normal
// desired value: 100Hz
// actual value: 100.160Hz (0.2%)
void timer2_init(void)
{
TCCR2 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT2 = 0xB2; //setup
OCR2 = 0x4E;
TCCR2 = 0x07; //start
TIMSK|= 0x90;
}
//call this routine to initialize all peripherals
void TargetInit(void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
cpu_sr = 0;
#endif
//stop errant interrupts until set up
OS_ENTER_CRITICAL();
MCUCR = 0x00;
GICR = 0x00;
port_init();
timer0_init();
timer2_init();
OS_EXIT_CRITICAL();
//all peripherals are now initialized
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -