📄 ocr0.c
字号:
//ICC-AVR application builder : 2007-5-16 1:38:35
// Target : M16
// Crystal: 8.0000Mhz
#include <iom16v.h>
#include <macros.h>
#include"delay.h"
void header(void)
{
PORTB=0x08;
DDRB=0x08;
delay_nus(5200);
DDRB=0x00;
delay_nus(2600); //header
}
void data_1(void)
{
DDRB=0x08;
delay_nus(310);
DDRB=0x00;
delay_nus(640);
}
void data_0(void)
{
DDRB=0x08;
delay_nus(310);
DDRB=0x00;
delay_nus(320);
}
void end(void)
{
DDRB=0x08;
delay_nus(310);
DDRB=0x00;
delay_nus(640);
}
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC=0xff;
DDRC=0x0f;
//PORTC = 0x00; //m103 output only
//DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x00;
}
//-----------------------timer0----------------//
//TIMER0 initialize - prescale:8
// WGM: CTC
// desired value: 39KHz
// actual value: 38.462KHz (-1.4%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0x00; //set count
OCR0 = 0x0C; //set compare
TCCR0 = 0x1A; //start timer
}
//-------------------------timer1-----------//
//call this routine to initialize all peripherals
void main(void)
{
unsigned char abc;
unsigned char keyval1,keyval2;
unsigned char i=0;
//abc=EEPROM_read(0x14);
//delay_1us();
//OSCCAL=abc;
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
//timer1_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
while(1)
{
//PORTB=0x00;
//DDRB=0x08;
scan_key();
keyval1=scan_key();
if (keyval1!=0x7f)
{
do
{
keyval2=scan_key();
}
while (keyval1==keyval2);
}
switch(keyval1)
{
case 1: //PORTB=0x01;
header();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 2: //PORTB=0x02;
header();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 3: //PORTB=0x03;
header();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 4: //PORTB=0x04;
header();
data_0();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 5: //PORTB=0x05;
header();
data_1();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 6: //PORTB=0x06;
header();
data_0();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 7: //PORTB=0x07;
header();
data_1();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 8: //PORTB=0x08;
header();
data_0();
data_0();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 9: // PORTB=0x09;
header();
data_1();
data_0();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 10: //PORTB=0x0a;
header();
data_0();
data_1();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 11: //PORTB=0x0b;
header();
data_1();
data_1();
data_0();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 12: //PORTB=0x0c;
header();
data_0();
data_0();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 13: //PORTB=0x0d;
header();
data_1();
data_0();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 14: //PORTB=0x0e;
header();
data_0();
data_1();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 15: //PORTB=0x0f;
header();
data_1();
data_1();
data_1();
data_1();
data_0();
data_0();
data_0();
data_0();
end();
break;
case 0: //PORTB=0x00;
header();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
data_0();
end();
break;
default: break;
}
}
}
//--------------------4x4key-----------------------------------//
unsigned char scan_key(void) //不作按键释放检查的键盘扫描函数
{
unsigned char i,temp;
DDRC=0x0f;
PORTC=0xff;
for(i=0;i<4;i++)
{
PORTC=~(1<<i);
delay(10);
temp=PINC&0xf0;
if(temp!=0xf0)
{
delay(15);
temp=PINC&0xf0;
if(temp!=0xf0)
{
temp&=0xf0;
switch(temp)
{
case 0x70: temp=15-(3-i)*4; break;
case 0xb0: temp=14-(3-i)*4; break;
case 0xd0: temp=13-(3-i)*4; break;
case 0xe0: temp=12-(3-i)*4; break;
default:temp=0x7f;
}
return temp;
}
}
PORTC=0xff;
}
return 0x7f;
}
unsigned char keypad(void) //有按键释放检查的键盘扫描函数
{
unsigned char temp1,temp2;
temp1=scan_key();
if (temp1==0x7f)
return 0x7f;
do
temp2=scan_key();
while (temp1==temp2);
return temp1;
}
unsigned char EEPROM_read(unsigned int uiAddress)
{
while(EECR&(1<<EEWE));
EEAR=uiAddress;
EECR|=(1<<EERE);
return EEDR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -