📄 mega48--定时器--学生会.txt
字号:
#include <iom48v.h>
#include <macros.h>
#define uchar unsigned char
unsigned led[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; //显示符0~9
uchar led_buff[3]={0x3f,0x3f,0x3f}; //显示缓冲区
uchar sec;
uchar dsec;
uchar ddsec;
uchar Key1_flag;
uchar Key2_flag;
uchar Key3_flag;
uchar Key4_flag;
/*************************延时***************************/
void delay_1ms(unsigned int n) //1ms延时
{
unsigned int i;
for(i=1;i<1142;i++)
;
}
/********************按键处理***************************/
void key_process(void)
{
while(PIND==0b01111100) //d7亮
{
Key1_flag=1;
}
while(PIND==0b10111100)//d6亮
{
Key2_flag=1;
}
while(PIND==0b11011100)//d5亮
{
Key3_flag=1;
}
}
/*******初始化系统,启动TIMER1溢出中断使能,用100ms定时****/
void sys_init(void)
{
DDRB=0xff;
DDRC=0xff;
PORTB=0x3f;
PORTC=0Xff;
DDRD=0xff;
PORTD=0xfc;
TIMSK1=0X01; //溢出中断使能
TCCR1B=0X00; //禁止TIMER1
TCNT1H=0X7c;
TCNT1L=0Xf3;
TCCR1A=0X00;
TCCR1B=0X04;
TCCR1C=0X00;
EICRA=0X02; //定义外部中断INT0为下降沿产生中断请求
EIMSK=0X01; //中断屏蔽寄存器开INT0
SEI();
}
/*********************timer1溢出中断程序******************/
#pragma interrupt_handler timer1_ovf_isr:14
void timer1_ovf_isr(void)
{
TCNT1H=0x7c; //重装载定时器
TCNT1L=0Xf3;
if(Key1_flag==1)
{
dsec++;
if(dsec>9)
{
dsec=0;
sec++;
if(sec>5)
{
sec=0;
ddsec++;
if(ddsec==2)
TIMSK1=0X00;
}
}
led_buff[0]=led[dsec];
led_buff[1]=led[sec];
led_buff[2]=led[ddsec];
}
if(Key2_flag==1)
{
dsec++;
if(dsec>9)
{
dsec=0;
sec++;
if(sec>5)
{
sec=0;
ddsec++;
if(ddsec==3)
TIMSK1=0X00;
}
}
led_buff[0]=led[dsec];
led_buff[1]=led[sec];
led_buff[2]=led[ddsec];
}
if(Key3_flag==1)
{
dsec++;
if(dsec>9)
{
dsec=0;
sec++;
if(sec>5)
{
sec=0;
ddsec++;
if(ddsec==5)
TIMSK1=0X00;
}
}
led_buff[0]=led[dsec];
led_buff[1]=led[sec];
led_buff[2]=led[ddsec];
}
}
/****************************动态显示函数************************/
void display(void)
{
unsigned char i;
for(i=0;i<3;i++)
{
PORTB=led_buff[i];
PORTC=(1<<i);
delay_1ms(2);
PORTC=0x00;
}
}
/*****************INT0中断函数*************************/
#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
Key4_flag^=1;
delay_1ms(10);
}
void chuli(void)
{
if(Key1_flag==1)
{
if(Key4_flag==1)
{
TIMSK1=0X00;
}
if((Key4_flag==0)&&(ddsec<2))
{
TIMSK1=0X01;
}
}
if(Key2_flag==1)
{
if(Key4_flag==1)
{
TIMSK1=0X00;
}
if((Key4_flag==0)&&(ddsec<3))
{
TIMSK1=0X01;
}
}
if(Key3_flag==1)
{
if(Key4_flag==1)
{
TIMSK1=0X00;
}
if((Key4_flag==0)&&(ddsec<5))
{
TIMSK1=0X01;
}
}
}
/*******************************主函数*****************************/
void main(void)
{
MCUCR=0;
sys_init();
Key1_flag=0;
Key2_flag=0;
Key3_flag=0;
Key4_flag=0;
for(;;)
{
key_process();
chuli();
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -