完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define F_CPU 7372800 // 单片机主频为7.3728MHz,用于延时子程序和计算定时器初始值 #include til/delay.h> #include #include #include //*********************************************************************** // 定义变量区 //*********************************************************************** #define f_count 182 //定时器初值,定时器加一计数 #define timer_clk 0x07 //时钟1024分频 #define delay_us(x) _delay_us(x) //AVR GCC延时函数 x(us) #define delay_ms(x) _delay_ms(x) //AVR GCC延时函数 x(ms) #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define Data_IO PORTA //数码管数据口 #define Data_DDR DDRA //数码管数据口方向寄存器 #define D_LE0 PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据 #define D_LE1 PORTD |= (1 << PD4) //数码管段控制位为1,锁存器输出与端口一致 #define W_LE0 PORTD &= ~(1 << PD5) //数码管位控制位为0 #define W_LE1 PORTD |= (1 << PD5) //数码管位控制位为1 uchar time_1s_count=0; //volatile uchar time_1s_flag; uint second; //*********************************************************************** // IO端口初始化 //*********************************************************************** void system_init() { // Data_IO=0xFF; //数据口为输出 // Data_DDR=0xFF; PORTD=0xFF; //74HC573的控制口,设置为输出 DDRD=0xFF; PORTB=0XFF; DDRB=0XFF; D_LE1; //关掉数码管,以免显示乱码 W_LE1; Data_IO=0xFF; //关数码管 W_LE0; } //************************************************************************* // 定时器0初始化子程序 //************************************************************************* void timer0_init() //定时器初始化 { TCCR0=0x07; //普通模式,OC0不输出,1024分频 TCNT0=f_count; //初值,定时为10ms TIFR=0x01; //清中断标志位 TIMSK=0x01; //使能定时器0溢出中断 } void light() { PORTB=0XFF; } //************************************************************************* // 定时器0中断服务子程序 //************************************************************************* ISR(SIG_OVERFLOW0) //中断服务程序 { TCNT0=f_count; //定时器赋初值,非自动重装模式 if(time_1s_count!=100) { time_1s_count++; //定时器定时10ms,计数100次为1s // time_1s_flag=0; //未到1s,标志位为0 } else { if(second!=2) { second++; } else second=0; //到999s则清0 time_1s_count=0; // time_1s_flag=1; light(); //将秒转化为BCD码,供显示 } } //************************************************************************* // 主程序 //************************************************************************* int main(void) { system_init(); //系统初始化 timer0_init(); //定时器0初始化,完成定时器相关配置 PORTB=0X00; time_1s_count=0; //计数值清0 SREG|=0x80; //开启全局中断 while(1); }为什么不能关闭LED呢? |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
869个成员聚集在这个小组
加入小组AVR Atmega16 Bootloader程序与上位机LabView程序
5210 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7810 浏览 0 评论
3096 浏览 2 评论
3138 浏览 1 评论
10137 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-12 14:32 , Processed in 0.511115 second(s), Total 44, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号