📄 runled._c
字号:
#include <iom16v.h>
#include <macros.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define D01ON PORTB&=(~(1<<PB3)) //打开LED D1 与的方式置0
#define D01OFF PORTB|=(1<<PB3) //关闭LED D1 或的方式置1
#define D02ON PORTB&=(~(1<<PB2))
#define D02OFF PORTB|=(1<<PB2)
#define D03ON PORTB&=(~(1<<PB1))
#define D03OFF PORTB|=(1<<PB1)
#define D04ON PORTB&=(~(1<<PB0))
#define D04OFF PORTB|=(1<<PB0)
#define LED1 D01ON;D02OFF;D03OFF;D04OFF;delay_nms(100);
#define LED12 D01ON;D02ON;D03OFF;D04OFF;delay_nms(100);
#define LED14 D01ON;D02OFF;D03ON;D04OFF;delay_nms(100);
#define LED13 D01ON;D02OFF;D03OFF;D04ON;delay_nms(100);
#define LED2 D02ON;D01OFF;D03OFF;D04OFF;delay_nms(100);
#define LED21 D02ON;D01ON;D03OFF;D04OFF;delay_nms(100);
#define LED24 D02ON;D01OFF;D03ON;D04OFF;delay_nms(100);
#define LED23 D02ON;D01OFF;D03OFF;D04ON;delay_nms(100);
#define LED4 D03ON;D02OFF;D01OFF;D04OFF;delay_nms(100);
#define LED41 D03ON;D02OFF;D01ON;D04OFF;delay_nms(100);
#define LED42 D03ON;D02ON;D01OFF;D04OFF;delay_nms(100);
#define LED43 D03ON;D02OFF;D01OFF;D04ON;delay_nms(100);
#define LED3 D04ON;D02OFF;D03OFF;D01OFF;delay_nms(100);
#define LED31 D04ON;D02OFF;D03OFF;D01ON;delay_nms(100);
#define LED32 D04ON;D02ON;D03OFF;D01OFF;delay_nms(100);
#define LED34 D04ON;D02OFF;D03ON;D01OFF;delay_nms(100);
#define LED44 D01ON;D02ON;D03ON;D04ON;delay_nms(100); ///全亮
#define LED00 D01OFF;D02OFF;D03OFF;D04OFF;delay_nms(100); //全灭
#define BuzzerON PORTC|=(1<<PC6)
#define BuzzerOFF PORTC&=(~(1<<PC6))
//比#define BuzzerOFF PORTC=0x00全修改方式相对好,仅修改个别位
#define BuzzerLongON BuzzerON;delay_nms(500);BuzzerOFF;
#define BuzzerShortON BuzzerON;delay_nms(100);BuzzerOFF;
/*
void timer1_init(void);
void delay_nms(unsigned int n);
void timer1_init(void)///1秒中断初始化 定时1
{
TCCR1B=0x00;
TCNT1H=0xf0;
TCNT1L=0xBE;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TCCR1A=0x00;
TCCR1B=0x05;
}
uint count60s=0; //60秒=1分
uint count3600s=0; //60分钟=1时
uint count1h=0; //60分钟=1时
#pragma interrupt_handler timer1_ovf_isr:7
void timer1_ovf_isr(void) ///1秒中断
{
TCNT1H=0xf0;
TCNT1L=0xbe;
if (count60s<60)
{BuzzerShortON;
count60s++;
}
if (count60s>60)
{
count60s=1;
count3600s++;
if (count3600s<60)
{
count3600s++;
}
if (count3600s>60)
{
count3600s=1;
count1h++;
if (count1h=7)
{
count1h=0;
while(1)
{
BuzzerShortON;
}
}
}
}
}
#pragma interrupt_handler timer1_ovf_isr:7
void timer1_ovf_isr(void) ///1秒中断
{
TCNT1H=0xf0;
TCNT1L=0xbe;
BuzzerShortON;
if (count60s<60)
{
BuzzerShortON;
count60s++;
}
}
*/
void WDT_ON(void)
{
WDR(); //this prevents a timout on enabling
WDTCR|=(1<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x1F; //特别注意这一条不是ICC生成的,是后来加上的。
WDTCR&=(~(1<<WDTOE))|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
}
void delay_1ms(void)//1ms延时函数
{
unsigned int i;
for (i=0;i<150;i++)
WDR();
}
void delay_nms(unsigned int n)//延时n毫秒
{
unsigned int i;
for (i=0;i<n;i++)//执行n次1毫秒延时
{
delay_1ms();
}
WDR();
}
void LED_Run(void)
{
uint i;
for (i=5;i>0;i--){LED1;LED12;LED23;LED34;LED41;}
for (i=5;i>0;i--){LED1;LED14;LED43;LED32;LED21;}
for (i=4;i>0;i--){LED1;LED14;LED2;LED23;LED3;LED32;LED4;LED41;}
for (i=4;i>0;i--){LED1;LED13;LED2;LED24;LED3;LED31;LED4;LED42;}
for (i=3;i>0;i--){LED1;LED12;LED2;LED21;LED2;LED23;LED3;LED32;LED3;LED34;LED4;LED43;LED4;LED41;LED1;LED14}
for (i=3;i>0;i--){LED1;LED14;LED4;LED41;LED4;LED43;LED3;LED34;LED3;LED32;LED2;LED23;LED2;LED21;LED1;LED12}
}
void main(void)
{
OSCCAL=0xff; //系统时钟校准,不同的芯片和不同的频率,200%
PORTA = 0xff;DDRA = 0xff; PORTB = 0xff;DDRB = 0xff;
PORTC = 0x00;DDRC = 0xff; PORTD = 0x00;DDRD = 0x00;
WDT_ON(); //使能watchdog,并且采用2048K分频,典型溢出时间5V时2.1S
// timer1_init();
SEI();
LED44; //开放中断
delay_nms(500); //延时1秒
BuzzerShortON; //提示开始计时
while(1)
{
WDR(); //清看门狗
LED_Run();
BuzzerShortON
LED1;LED12;LED23;LED34;LED41;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -