完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示)
图1 二,调整原理图大小,适合可视,另存工程文件。(如下图2,3,4所示) 图2 图3 图4 三,点击Source Code标签。(如下图5所示) 图5 四,编辑main.c 代码如Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a05_TIMER1_2十字路口 (如下图6所示) 图6 五,Main.c 代码: #include “myfunc01.h” //0-9的数码管段码 INT16U Count_A= 0; INT16U Count_B= 0; extern int Remain_Second; extern INT8U Second_Display_Buffer[]; enum TRAFFIC_DIRECTION{EW, SN} Current_Direct; //------------------------------------------------------------------ // 主程序 //------------------------------------------------------------------ int main() { Current_Direct= EW; Remain_Second= MAX_SECOND; Refresh_Second_Display_Buffer(); TCCR1B= 0x03;TCNT1= 65536- F_CPU/ 64.0* 1.0;TCCR2= 0x04;TCNT2=256- F_CPU/ 64.0* 0.004;TIMSK= _BV(TOIE1) | _BV(TOIE2);DDRB= 0xFF;DDRC= 0xFF;DDRD= 0xFF;sei();while(1); } //----------------------------------------------------------------- // T1定时器溢出中断程序,控制倒计时 //----------------------------------------------------------------- ISR (TIMER1_OVF_vect) { TCNT1= 65536- F_CPU/ 64.0* 1.0; if(–Remain_Second== -1) { Remain_Second= MAX_SECOND; Current_Direct= Current_Direct== EW? SN: EW; } Refresh_Second_Display_Buffer(); if(Remain_Second<= 5) Alarm(); else { UNBEEP(); _delay_ms(20); } } //----------------------------------------------------------------- // T2定时器溢出中断程序,控制数码管扫描显示 //----------------------------------------------------------------- ISR (TIMER2_OVF_vect) { static INT8U i= 0; TCNT2=256- F_CPU/ 64.0* 0.004; PORTC= 0xFF; PORTC= SEG_CODE[Second_Display_Buffer]; if(Current_Direct== EW) PORTD = _BV(i); else PORTD = _BV(i+ 2); i=(i==0) ? 1: 0; } Myfunc01.k: //****************************************************************************************** #ifndef MYFUNC01_H #define MYFUNC01_H //#define F_CPU 2000000UL #include #include #include #define INT8U unsigned char #define INT16U unsigned int #define BEEP() (PINB ^= 0x01) #define UNBEEP() (PINB &= 0x01) #define MAX_SECOND 12 //0-9的数码管段码 static INT8U SEG_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void Refresh_Second_Display_Buffer(); void Alarm(); #endif 六,点击构建工程按钮,编译工程。(如下图7所示) 图7 七,点击窗口左下方仿真按钮,可见虚拟数字屏显示。 (如下图8,9,10所示) 图8 图9 图10 八,选择release,点击构建工程按钮,编译工程生成Hex文件。(如下图11所示) 图1 附件Proteus8.9 VSM Studio WINAVR编译器仿真ATmega16系列a05_TIMER1_2十字路口在已安装Proteus8.9的计算机文件夹中打开即可 |
|
|
|
只有小组成员才能发言,加入小组>>
3326 浏览 9 评论
3006 浏览 16 评论
3503 浏览 1 评论
9079 浏览 16 评论
4096 浏览 18 评论
1208浏览 3评论
618浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
607浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2345浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1905浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-1 21:03 , Processed in 0.997754 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号