📄 miaobiao.c
字号:
/*****************************************************
Project : miaobiao
Date : 2007-11-3
Author : LaoLang
Chip type : ATmega16
Clock frequency : 4.000000 MHz
*****************************************************/
//INT0:500HZ
//INT1:key 键盘输入
#include <delay.h>
#include <mega16.h>
flash unsigned char led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flash unsigned char position[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
char tempbuff[6]; //缓存
char min,sec,dsec;
bit point_on;
bit time_ds=0;
int counter_ds=0; //百分之一秒统计
int counter_s=0; //秒统计
char pos=0;
char key=0;
void display(void) //显示函数
{
PORTC=0XFF; //关字型
if(++pos>=6)
{
pos=0;
}
PORTA=led[tempbuff[pos]]; //送字形
if(point_on)
{
if(pos==2 || pos==4)
{
PORTA |= 0x80;
}
}
PORTC=position[pos];
}
interrupt [EXT_INT0] void ext_int0_isr(void) //外部中断0服务程序
{
display();
if(++counter_ds>=5)
{
time_ds=1;
counter_ds=0;
}
if(++counter_s>=500)
{
point_on=~point_on;
counter_s=0;
}
}
interrupt [EXT_INT1] void ext_int1_isr(void) //外部中断1服务程序
{
delay_ms(20); //如果确认有键盘按下就改变当前状态
if(PIND.3==0)
{
++key;
}
}
void time_to_buff(void)
{
tempbuff[0]=dsec%10;
tempbuff[1]=dsec/10;
tempbuff[2]=sec%10;
tempbuff[3]=sec/10;
tempbuff[4]=min%10;
tempbuff[5]=min/10;
}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTC=0xFF;
DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
dsec=sec=min=0;
time_to_buff();
PORTA=led[0];
PORTC=0;
// External Interrupt(s) initialization
// INT0: Off
// INT1: On
// INT1 Mode: Falling Edge
// INT2: Off
GICR=0x80; //开中断1关中断0
MCUCR=0x08;
MCUCSR=0x00;
GIFR=0x80;
#asm("sei")
while (1)
{
if(key==1) //状态1
{ //开中断0,计时
GICR=0xC0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xC0;
if(time_ds)
{
time_ds=0;
if(++dsec>=100)
{
dsec=0;
if(++sec>=60)
{
sec=0;
if(++min>=100)
{
min=0;
}
}
}
time_to_buff();
}
}
if(key==2){} //状态2停止计时
if(key==3) //状态3
{
key=0; //状态清0
GICR=0x80; //关中断0
MCUCR=0x08;
MCUCSR=0x00;
GIFR=0x80;
PORTA=led[0];
PORTC=0; //清0
dsec=0;
sec=0;
min=0;
}
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -