历史上的今天

今天是:2024年09月16日(星期一)

2020年09月16日 | avr单片机秒表Proteus仿真程序 tm1637数码管显示

发布者:asa1670 来源: 51hei关键字:avr单片机  秒表  tm1637  数码管显示 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

/**


*版权所有(c)2018,艁ukasz Marcin Podkalicki

*2009年12月13日            

*简单定时器(启动/复位/停止),使用基于TM1637的一个按钮和7段显示模块。              *            

*注意,这个ATtiny13项目使用的内部时钟并不精确            

*时间可以向前或向后流动,但是嘿!            

*它仍然足够做一个好的鸡蛋计时器:)


*/



//#include


#include


#include


#include


#include "tm1637.h"




#define        BUTTON_PIN        PB2




#define        TIMER_UPDATE        (1 << 1)


#define        TIMER_STOP        (1 << 2)


#define        TIMER_START        (1 << 3)


#define        TIMER_RESET        (1 << 4)




static volatile uint8_t timer_counter;


static volatile uint8_t timer_events;


static volatile uint8_t timer_seconds;


static volatile uint8_t timer_minutes;


static volatile uint8_t timer_colon;




static void timer_init(void);


static void timer_handler(void);


static void timer_process(void);


static void timer_display(const uint8_t minutes, const uint8_t seconds, const uint8_t colon);




ISR(TIM0_COMPA_vect)


{




        timer_handler();


}




int main(void)


{


        /* setup */


        timer_init();




        /* loop */


        while (1) {


                timer_process();


        }


}




void  timer_init(void)


{




        TM1637_init(1, 4);


        DDRB &= ~_BV(BUTTON_PIN); //明确设置按钮针作为输入


        PORTB |= _BV(BUTTON_PIN); // 设置按钮销的上拉电阻


        TCCR0A |= _BV(WGM01); // 将计时器计数器模式设置为CTC


        TCCR0B |= _BV(CS01)|_BV(CS00); // 将预分频器设置为64(CLK=1200000Hz/64/250=75Hz)


        OCR0A = 249; // 设置定时器计数器最大值(250-1)



TIMSK |= _BV(OCIE0A);// 启用定时器CTC中断


        timer_counter = timer_seconds = timer_minutes = 0; // 重置计数器


        timer_events = TIMER_UPDATE | TIMER_RESET; // 重置计时器和更新显示


        timer_colon = 1; // 显示冒号


        sei(); //启用全局中断


}




void  timer_handler(void)


{




        if (!(timer_events & TIMER_START)) {


                return;


        }




        timer_counter++;


        if (timer_counter == 38) {


                timer_colon = 1;


                timer_events |= TIMER_UPDATE;


        } else if (timer_counter == 75) {


                timer_colon = 0;


                timer_counter = 0;


                if (++timer_seconds == 60) {


                        timer_seconds = 0;


                        if (++timer_minutes == 100) {


                                timer_minutes = 0;


                        }


                }


                timer_events |= TIMER_UPDATE;


        }


}




void  timer_process(void)


{




        /* 过程启动/停止/重置 */


        if ((PINB & _BV(BUTTON_PIN)) == 0) {


                _delay_ms(10); // 去噪时间


                while((PINB & _BV(BUTTON_PIN)) == 0);


                if (timer_events & TIMER_START) {


                        timer_colon = 1;


                        timer_events = TIMER_UPDATE | TIMER_STOP;


                } else if (timer_events & TIMER_STOP) {


                        timer_minutes = timer_seconds = 0;


                        timer_colon = 1;


                        timer_events = TIMER_UPDATE | TIMER_RESET;


                } else if (timer_events & TIMER_RESET) {


                        timer_events = TIMER_START;


                }


        }




        /* 更新显示 */


        if (timer_events & TIMER_UPDATE) {


                timer_display(timer_minutes, timer_seconds, timer_colon);


                timer_events &= ~TIMER_UPDATE;


        }


}




void  timer_display(const uint8_t minutes, const uint8_t seconds, const uint8_t colon)


{




        /* 显示分钟数*/


        TM1637_display_digit(0, minutes / 10);


        TM1637_display_digit(1, minutes % 10);




        /* 显示秒数 */


        TM1637_display_digit(2, seconds / 10);


        TM1637_display_digit(3, seconds % 10);




        /* 显示/隐藏冒号 */


        TM1637_display_colon(colon);


}


关键字:avr单片机  秒表  tm1637  数码管显示 引用地址:avr单片机秒表Proteus仿真程序 tm1637数码管显示

上一篇:MikroC写的ATmega16驱动spi接口128x64屏例子
下一篇:AT90S8515单片机SPI驱动74LS595源程序

推荐阅读

STM32定时器有编码器接口,但是它的计数器只有16位。当要记录的数过大时,会溢出。下文介绍了一种方法,能有效解决因计数器位数过少引起的溢出问题。(在网上搜了好多,感觉不他们说的方法都不准。这个方法经过我自己验证,可以准确记录编码器的位置) 原理一: unsigned short int j;(j的长度为16bit)① 当j=65535 ,运行j++后,j=0;② ...
文/国网浙江丽水供电公司总经理  邵学俭 近年来,为贯彻落实党的十九大关于实施乡村振兴战略的决策部署,浙江省开展了“全国民族乡村振兴示范省”创建活动和争当全国民族乡村振兴排头兵行动计划。丽水是浙江省少数民族主要聚居地,有全国唯一畲族自治县——景宁畲族自治县,以及7个民族乡(镇),212个民族村,集中了全省约20%的少数民族户籍人口。 ...
电源电路就是单片机的供电电路,一般是3.3V或者5V,具体多少要参考各种型号的单片机的工作电压,通常情况下是5V,这里是指通常情况下。整体设计思路:单片机中断初始化程序应完成du如下工作:1、对TMOD赋值,以确定T0和T1的工作方式。2、计算初值,并将其写入TH0、TL0或TH1、TL1。3、中断方式时,则对IE赋值,开放中断。4、使TR0或TR1置位,启动定时/计数器...
1、USART1接收完成标志检测USART1->SR&0X40 == 0USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET2、USART1发送数据USART1->DR = (u8) ch;USART_SendData(USART1,(u8)ch);

史海拾趣

问答坊 | AI 解惑

在同一个公司做三年可以吗?

在新公司上班一周了,今天主管跟我谈话了,要求我原则上做三年以后才能离开。我口头上答应他了,心想:半年的试用期还没过呢!以后的事也很难说清楚。是吧?…

查看全部问答∨

让你少奋斗10年的工作经验(1)

每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去关心别人,不愿意去思考别人还有什么没有想到。这在学生时代是很容易被理解的 ...…

查看全部问答∨

好人帮忙

有哪位哥们有DM9000AE网卡驱动的C源码,能否给小弟我提供一份? 我的板子是SMDK2410:ARM4,WINCE4.2自带的SMDK2410:ARM4 的BSP里没有这种型号的网卡驱动 兄弟我急啊!!!! 小弟我先叩谢了。…

查看全部问答∨

请教:如何得知板子上网卡的mac地址?

我用别人做好的一个板子,需要知道上面网卡的mac地址。这个地址最初是怎么决定的?由出厂芯片还是做硬件的人制定的(好像说要根据时序烧录进去)?可以根据芯片查到么?如果是做硬件的人制定,而他当时就没有烧mac地址进去,是不是网卡就不能用? ...…

查看全部问答∨

请大家给我点学习建议

说来惭愧,小弟28了,想沉下心来作技术,想做一些unix/linux 底层驱动开发方面的学习,苦于无从下手,所以请教大家给小弟指点一下大致的学习步骤和建议,以前有一些浅薄的c语言毛皮基础,最近把《c primer plus》精读了几遍,目前正在看《unix环境 ...…

查看全部问答∨

FPGA FIR滤波器仿真

在matlab FDATOOL里面设计一个15阶FIR滤波器,对系数进行量化 得到FIR滤波器系数,使用verilog进行实现   如何在modelsim里面进行仿真 O(∩_∩)O谢谢…

查看全部问答∨

请问stm32的iar开发环境,怎么定位ram地址和flash地址,语法怎

                                 请问stm32的iar开发环境,怎么定位ram地址和flash地址,语法怎样…

查看全部问答∨

由flash模拟作EEPROM联想到的问题!!!!

各位大虾,本人刚刚接触STM32,有以下问题不明白,望大虾们指教!         看网上说STM32的嵌入式闪存即flash可以模拟做EEPROM,现在问题来了,   程序代码不是存在flash里面嘛,如果flash又模拟做 ...…

查看全部问答∨

avr学习资料

avr单片机从入门到精通…

查看全部问答∨

lm3m8962上SD卡文件系统读写例程串口助手显示乱码

在lm3m8962上跑SD卡文件系统读写程序例程,为什么显示的是乱码?…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved