📄 main.i
字号:
d=0x00;
if(display_bit==3)
d=0x00;
}
PORTA=d;
PORTB=shu_bit[display_bit]&LED;
display_bit+=1;
if(display_bit>=4)
display_bit=0;
show_add=0;
}
if(mode==3)
{
PORTC=PORTC|0x01;//不锁
if(flash_add<800)
{
if(display_bit==0)
d=shu_data[(sethour%100)/10];
if(display_bit==1)
d=shu_data[sethour%10]|0x80;
}
if(flash_add>800)
{
if(display_bit==0)
d=0x00;
if(display_bit==1)
d=0x00|0x80;
}
if(display_bit==2)
d=shu_data[(setmin%100)/10];
if(display_bit==3)
d=shu_data[setmin%10];
PORTA=d;
PORTB=shu_bit[display_bit]&LED;
display_bit+=1;
if(display_bit>=4)
display_bit=0;
show_add=0;
}
}
}
// CodeVisionAVR C Compiler
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.
// I/O registers definitions for the ATmega16
unsigned int setadd=0;
unsigned int setadd=0;
unsigned int donwadd=0;
unsigned int upadd=0;
void key(void)
{
if(!(PINC & (1<<5))&&(PINC & (1<<3))&&(PINC & (1<<4)))
{
setadd+=1;
if(setadd>30000)
setadd=30001;
if(setadd==29000) //三秒不放
{
if(mode!=0)
mode+=1;
if(mode>=4)
mode=2;
}
}
else
{
if((setadd>199)&&(setadd<25000)) //设置键
{
if(mode!=1)
mode=1;
else mode=0;
}
setadd=0;
}
if(!(PINC & (1<<3))&&(PINC & (1<<5))&&(PINC & (1<<4)))
{
upadd+=1;
if(upadd>=30000) //快加键
{
rapidness+=1;
if(rapidness>=2000)
{ if(mode==2)
{
setmin+=1;
if(setmin>60)
setmin=0;
}
if(mode==3)
{
sethour+=1;
if(sethour>99)
sethour=0;
}
rapidness=0;
flash_add=0;
}
upadd=30001;
}
}
else
{
if((upadd>199)&&(upadd<25000)) //加键
{
if(mode==2)
{
setmin+=1;
if(setmin>60)
setmin=0;
}
if(mode==3)
{
sethour+=1;
if(sethour>99)
sethour=0;
}
}
upadd=0;
}
if(!(PINC & (1<<4))&&(PINC & (1<<3))&&(PINC & (1<<5)))
{
donwadd+=1;
if(donwadd>30000) //快减
{ rapidness+=1;
if(rapidness>=2000)
{
if(mode==2)
{
if(setmin==0)
setmin=60;
if(setmin>0)
setmin-=1;
}
if(mode==3)
{
if(sethour==0)
sethour=100;
if(sethour>0)
sethour-=1;
}
rapidness=0;
flash_add=0;
}
donwadd=30001;
}
}
else
{
if((donwadd>199)&&(donwadd<25000)) //减键
{
if(mode==2)
{
if(setmin==0)
setmin=60;
if(setmin>0)
setmin-=1;
}
if(mode==3)
{
if(sethour==0)
sethour=100;
if(sethour>0)
sethour-=1;
}
}
donwadd=0;
}
if((!(PINC & (1<<5)))&&(!(PINC & (1<<3)))) //开始
{
b_time=1;
LED=0xff;
}
if((!(PINC & (1<<5)))&&(!(PINC & (1<<4)))) //暂停
{
b_time=0;
LED=0xef;
b_sec=1;
}
if((!(PINC & (1<<3)))&&(!(PINC & (1<<4)))) //停止
{
hour=0;
min=0;
sec=0;
b_time=0;
LED=0xef;
b_sec=1;
}
}
unsigned int time_sec_add=0;
//******************************中断函数************************************
//定时器1中断函数
interrupt [9] void timer1_capt_isr(void)//1mS
{
TCNT1H = 0xE3; //reload counter high value
TCNT1L = 0x34; //reload counter low value
flash_add+=1;
if(flash_add>=1000)
flash_add=0;
if(b_time)
time_sec_add+=1;
if(time_sec_add>=1000) //1秒
{ b_sec=~b_sec;
sec+=1;
time_sec_add=0;
}
if(sec>=60) //1分
{
min+=1;
sec=0;
}
if(min>=60) //1小时
{
hour+=1;
min=0;
}
if(hour>99)
{
hour=99;
}
if((hour>=sethour)&&(min>=setmin))
{
b_time=0;
b_sec=1;
LED=0xef;
}
}
//******************************主函数************************************
void main(void)
{
init_devices();
sethour= eeprom_shu[0];
setmin= eeprom_shu[1];
hour= eeprom_shu[2];
min= eeprom_shu[3];
sec= eeprom_shu[4];
LED= eeprom_shu[5];
b_time= eeprom_shu[6];
while (1)
{
#asm("wdr")
if(!(PINC & (1<<6)))
{
show();
key();
}
else
{
PORTA=0X00;
eeprom_shu[0]=sethour;
eeprom_shu[1]=setmin;
eeprom_shu[2]=hour;
eeprom_shu[3]=min;
eeprom_shu[4]=sec;
eeprom_shu[5]=LED;
eeprom_shu[6]=b_time;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -