📄 amend1.0.h
字号:
#define uchar unsigned char
#define uint unsigned int
#define K1 0x01 //按键K0与PC0相连 启动键(start)
#define K0 0x02 //按键K1与PC1相连 调节键(adjust)
#define K6 BIT(6) //按键K6与PC6相连 休眠键(sleep)
#define K7 BIT(7) //按键K7与PC7相连 暂停键(pause)
#define dig0 (1<<6) //推荐用这种形式,简单形象
#define dig1 (1<<7)
#define LED PORTD
#define LED1 PORTA
uchar BCD0, BCD1,m;
uchar sleep=0;
signed char i,j,k,f;
uint Key_New,Key_val;
uchar Key_Pro,Key_time,Setup_time;
char segconv[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0xC0/*,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xbf*/};
//需要在库文件重新定义i,k,f变量
/********************************************************************
** 函数名称 :port_init()
** 函数功能 :端口初始化
** 入口参数 :无
** 出口参数 :无
********************************************************************/
void port_init(void) // the initialization function
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0xFF; //set the default
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFF;
}
/********************************************************************
** 函数名称 :delay_ms()
** 函数功能 :短暂去抖延时函数
** 入口参数 :无
** 出口参数 :无
********************************************************************/
void delay_ms(unsigned int Time)
{
unsigned char n=0;
while(Time>0)
{
for (n=1;n<187;n++)
{
NOP();
}
Time--;
}
}
/********************************************************************
** 函数名称: BinToBCD()
** 功能描述: 预给值分位函数
** 入口参数 :预给数值
** 出口参数 :无
********************************************************************/
void BinToBCD(int data)
{
if(sleep) return;
BCD0=0;
BCD1=0;
if(data>=10)
{
BCD1=data/10;
data=data%10;
}
BCD0=data;
}
/********************************************************************
** 函数名称: dispseg() ;
** 功能描述: 按位显示八段LED数;
** 入口参数 :无
** 出口参数 :无
********************************************************************/
void dispseg(void)
{
PORTB=segconv[BCD0];
PORTA=dig0;
delay_ms(10);
PORTB=segconv[BCD1];
PORTA=dig1;
delay_ms(10);
}
/********************************************************************
** 函数名称: display()
** 功能描述: 按所预给数显示
** 入口参数 :data 预给数值
** 出口参数 :无
********************************************************************/
void display(int data)
{
BinToBCD(data);
dispseg();
}
/**********************************************************
**函数名称: state_bit()
**函数功能: 状态标志位函数
**入口参数: 无
**出口参数: k
***********************************************************/
uchar state_bit(void)
{
if((PINC&K0)==0)
{
delay_ms(5);
if((PINC&K0)==0)
{
k=!k;
if(k)
{
SEI();
TCCR1B = 0x03; //★start Timer
PORTD|=0X80; //代表启动加热
}
else
{
TCCR1B = 0x00; //★stop
PORTD&=~0X80; //代表停止/暂停加热
}
}
}
return(k);
}
//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1Hz
// actual value: 1.000Hz (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xC2; //setup
TCNT1L = 0xF7;
OCR1AH = 0x3D;
OCR1AL = 0x09;
OCR1BH = 0x3D;
OCR1BL = 0x09;
ICR1H = 0x3D;
ICR1L = 0x09;
TCCR1A = 0x00;
}
#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
TCNT1H = 0xC2; //reload counter high value
TCNT1L = 0xF7; //reload counter low value
if(i>0)
{
i--;
if(i==0)
{
f=1; //定时结束时,结束状态标志位置一
TCCR1B = 0x00; //stop timer
}
else f=0;
}
if(i<0)
{
i=0;
}
}
//TIMER0 initialize - prescale:1024
// WGM: Normal
// desired value: 16Hz
// actual value: 16.009Hz (0.1%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
TCNT0 = 0xC3; //set count
OCR0 = 0x3D; //set compare
}
#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)
{
TCNT0 = 0xC3; //reload counter value
Key_time++;
if(m==1)
{
j++;
if(j>=8)
{
j=0;
if(i>90)
{
i=i%10;
i-=10;
}
i=i+10;
}
}
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer1_init();
timer0_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x05; //timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -