📄 时钟.c
字号:
#include <avr/io.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#define uint unsigned int
#define uchar unsigned char
void mcu_init(void);
void key_inter(void);
uchar key1(void);
uint display(uchar num);
uchar led[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
uchar flag[8]={0,0,0,0,0,0,0,0};
uchar flag_d[8]={0,0,0,0,0,0,0,0};
uchar n=0;
uchar ENTER=1;
int main()
{
uchar i;
mcu_init();
for(i=0;i<8;i++)
display(flag[i]);
while(1)
{
key_inter();
}
}
void mcu_init(void)
{
DDRB=0xFF;
PORTB=0x00;
DDRC=0xFF;
PORTC=0x00;
DDRD=0x00;
PORTD=0x00;
TIMSK=(1<<TOIE1);
TCNT1L=0x05;
TCNT1H=0xE9;
TCCR1A=0x00;
TCCR1B=0x05;
sei();
}
SIGNAL(SIG_OVERFLOW1)
{
uchar i;
uchar j;
TCNT1H=0xE9;
TCNT1L=0x05;
flag[0]++;
for(i=0;i<8;i++)
{
if(flag[i]>9)
{
flag[i]=0;
flag[i+1]++;
}
}
for(j=0;j<8;j++)
display(flag[j]);
}
void key_inter()
{
uint j;
uchar i;
uint k;
uchar key_num;
uchar key;
DDRA=0x0F;
PORTA=0x00;
while((PINA&0xF0)==0xF0);
for(j=0;j<25000;j++);
if((PINA&0xF0)!=0xF0)
{
ENTER=1;
key=PINA;//&0xF0;
key_num=key;
DDRA=0xF0;
PORTA=key&0xF0;
key=PINA;//&0x0F;
//key_num&=key;
//PORTA=PINB;
if(PINA==0xBe)
{
TCCR1B=0x00;
TCNT1L=0x05;
TCNT1H=0xE9;
for(k=0;k<8;k++)
flag_d[k]=flag[k];
flag_d[n]=10;
while(ENTER)
{
for(i=0;i<8;i++)
display(flag[i]);
for(j=0;j<60000;j++)
key1();
for(i=0;i<8;i++)
display(flag_d[i]);
for(k=0;k<60000;k++);
}
TCCR1B=0x05;
}
}
}
uchar key1(void)
{
uint j;
uchar key,key_num;
DDRA=0x0F;
PORTA=0x00;
while((PINA&0xF0)==0xF0)
return 1;
for(j=0;j<25000;j++);
if((PINA&0xF0)!=0xF0)
{
key=PINA;//&0xF0;
key_num=key;
DDRA=0xF0;
PORTA=(key&0xF0);
//PORTA=PINB;
switch(PINA)
{
case 0xe7:
flag[n]=0;break;
case 0xd7:
flag[n]=1;break;
case 0xb7:
flag[n]=2;break;
case 0x77:
flag[n]=3;break;
case 0xeb:
flag[n]=4;break;
case 0xdb:
flag[n]=5;break;
case 0xbb:
flag[n]=6;break;
case 0x7b:
flag[n]=7;break;
case 0xed:
flag[n]=8;break;
case 0xdd:
flag[n]=9;break;
case 0xbd:
{
if(flag[n]>=9)
flag[n]=9;
else
flag[n]+=1;
}
break;
case 0x7d:
{
if(flag[n]<=0)
flag[n]=0;
else
flag[n]-=1;
}
break;
case 0xee:
{
if(n>=7)
n=7;
else
{
flag_d[n]=flag[n];
n++;
flag_d[n]=10;
}
} break;
case 0xde:
{
if(n<=0)
n=0;
else
{
flag_d[n]=flag[n];
n--;
flag_d[n]=10;
}
} break;
case 0x7e:
ENTER=0; break;
default:
return(1);
}
}
return(1);
}
uint display(uchar num) //显示函数
{
uchar j;
uchar ram;
uchar q;
ram=led[num];
for(j=0;j<8;j++)
{
q=ram&0x80;
if(q==0x80)
{
PORTB=0x01;
PORTB=0x03;
asm("nop");
ram<<=1;
asm("nop");
PORTB=0x01;
}
else
{
PORTB=0x00;
PORTB=0x02;
asm("nop");
ram<<=1;
asm("nop");
PORTB=0x00;
}
//利用PB0位数据线,PB1为时钟,自制串口时序
}
return(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -