历史上的今天
返回首页

历史上的今天

今天是:2024年11月26日(星期二)

正在发生

2020年11月26日 | STC89单片机+TM1638超级秒表程序

2020-11-26 来源:51hei


超级秒表,具有计时功能,暂停功能,定时器功能,用起来超级好玩。


单片机源程序如下:

#ifndef        _TM1638_H

#define        _TM1638_H


#include       


#define        DATA_COMMAND        0X40

#define        DISP_COMMAND        0x80

#define        ADDR_COMMAND        0XC0


//TM1638模块引脚定义

sbit        DIO=P1^0;

sbit        CLK=P1^1;

sbit        STB=P1^2;


//共阴数码管显示代码

unsigned char code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,

                           0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};



void TM1638_Write(unsigned char        DATA)                        //写数据函数

{

        unsigned char i;

        for(i=0;i<8;i++)

        {

                CLK=0;

                if(DATA&0x01)

                {

                        DIO=1;

                }

                else

                {

                        DIO=0;

                }

                CLK=1;

                DATA>>=1;

        }

}

unsigned char TM1638_Read(void)                                        //读数据函数

{

        unsigned char i;

        unsigned char temp=0x00;

        DIO=1;

        for(i=0;i<8;i++)

        {

                temp>>=1;

                CLK=0;

                if(DIO)

                {

                        temp|=0x80;

                }

                else

                {

                        temp&=0x7f;

                }

                CLK=1;

        }

        return temp;

}


void Write_COM(unsigned char cmd)                //发送命令字

{

        STB=0;

        TM1638_Write(cmd);

        STB=1;

}


unsigned char Read_key()

{

        unsigned char Key[4],i,Keyvalue=0;

        STB=0;       

//        Write_COM(0x42);

TM1638_Write(0x42);       

        for(i=0;i<4;i++)

        {

                Key[i]=TM1638_Read();

        }

        STB=1;

        for(i=0;i<4;i++)

        {

                Keyvalue|=Key[i]<        }

        for(i=0;i<8;i++)

        {

                if((0x01<                {break;}

        }

        return i;

}

/*

unsigned char Read_key(void)

{

        unsigned char c[4],i,key_value=0;

        STB=0;

        TM1638_Write(0x42);                           //读键扫数据 命令

        for(i=0;i<4;i++)               

                c[i]=TM1638_Read();

        STB=1;                                                   //4个字节数据合成一个字节

        for(i=0;i<4;i++)

                key_value|=c[i]<        for(i=0;i<8;i++)

                if((0x01<                        break;

        return i;

}

*/

void Write_DATA(unsigned char add,unsigned char DATA)                //指定地址写入数据

{

        Write_COM(0x44);

        STB=0;

        TM1638_Write(0xc0|add);

        TM1638_Write(DATA);

        STB=1;

}

/*

void Write_oneLED(unsigned char num,unsigned char flag)        //单独控制一个LED函数,num为需要控制的led序号,flag为0时熄灭,不为0时点亮

{

        if(flag)

                Write_DATA(2*num+1,1);

        else

                Write_DATA(2*num+1,0);

}          */

void Write_allLED(unsigned char LED_flag)                                        //控制全部LED函数,LED_flag表示各个LED状态

{

        unsigned char i;

        for(i=0;i<8;i++)

                {

                        if(LED_flag&(1<                                //Write_DATA(2*i+1,3);

                                Write_DATA(2*i+1,1);

                        else

                                Write_DATA(2*i+1,0);

                }

}


//TM1638初始化函数

void init_TM1638(void)

{

        unsigned char i;

        Write_COM(0x8b);       //亮度 (0x88-0x8f)8级亮度可调

        Write_COM(0x40);       //采用地址自动加1

        STB=0;                           //

        TM1638_Write(0xc0);    //设置起始地址


        for(i=0;i<16;i++)           //传送16个字节的数据

                TM1638_Write(0x00);

        STB=1;

}

#endif

复制代码

#include

#include "tm1638.h"

#define u16 unsigned int

#define u8 unsigned char

/*

制作一个秒表 要求: a. 可以计时至少 10 分钟,并且精确到0.01s,在数码管上实时显示 当前时间;

b. 按下 S1,开始计时;按下 S2 暂停/启动;按下 S3 结束计时;

c.(选做)增加一个模式选择键以及数字输入按键,按下后可在计时模 式和设置模式切换。

在设置模式中,可设置一个时间(利用按键输入), 切换回计时模式时,当计到设置时间时,蜂鸣器响。

*/


u16 TIMERBAT=0;

bit flag=0;

u8 state=0;  //0没开始计时或者暂停   1开始计时   2设置模式

u8 hym;//按键键码控制

void Timer0Init(void);

void Display();

void Set_Bell();

void Clock_System();

void CLR_Time();

void CLRBell();

bit Judge_Baba();


u8 code distab[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};

u8 shijian[5];  //0爸爸 1秒 2分 3时

u8 shijianshezhi[4];  //0秒 1分 2时


void main()

{

        init_TM1638();

        Timer0Init();

        flag=0;

        while(1)

        {

                if(state==2)

                {

                        Set_Bell();

                }

                else

                {

                        Clock_System();

                }

               

        }

}


void Set_Bell()

{

        TR0=0;

        while(state==2)

        {

                hym=Read_key();

                if(hym!=8)

                {

                        switch(hym)

                        {

                                case 3:state=0;break;

                                case 4:shijianshezhi[2]++;shijianshezhi[2]%=24;break;

                                case 5:shijianshezhi[1]++;shijianshezhi[1]%=60;break;

推荐阅读

史海拾趣

DBS Microwave Inc公司的发展小趣事

DBS Microwave Inc公司起源于XXXX年,当时由几位志同道合的电子工程师创立。他们共同意识到,随着无线通信技术的飞速发展,微波器件的市场需求将会急剧增长。于是,他们凭借丰富的专业知识和对市场趋势的敏锐洞察,决定专注于研发和生产高质量的微波射频器件。起初,公司面临着资金紧张、市场竞争激烈等诸多挑战,但创始人团队凭借坚韧不拔的精神和对技术的执着追求,逐步在市场上崭露头角。

芯源半导体(CW)公司的发展小趣事

随着公司产品的逐步成熟,芯源半导体(CW)公司开始寻求与行业内其他企业的合作。经过深入的市场调研和谈判,公司成功与多家知名电子企业建立了战略合作伙伴关系。这些合作伙伴为芯源半导体(CW)公司提供了更多的市场机会和技术支持,使公司得以迅速扩大市场份额,提升品牌影响力。

安路科技(Anlogic)公司的发展小趣事

安路科技始终将技术创新作为公司发展的核心驱动力。公司不断加大研发投入,引进高端人才,建立了一支具有强大研发实力的团队。通过持续的技术创新,安路科技在FPGA领域取得了多项重要突破,推出了多款具有领先水平的产品,进一步巩固了公司在市场中的地位。

Codeco Corporation Of Vermont公司的发展小趣事

在追求商业成功的同时,Codeco也积极履行企业社会责任。他们注重环保和可持续发展,在生产过程中采用环保材料和技术,减少对环境的影响。此外,Codeco还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也赢得了员工和消费者的尊重与认可。


您可以根据这个框架,结合您对电子行业和Codeco Corporation Of Vermont的了解,撰写具体的故事内容。请注意,这些故事应基于事实或合理的推测,避免涉及未经证实的信息或夸大其词的描述。

Gold Peak Group公司的发展小趣事
在控制电路周围设置必要的安全防护措施,如防护罩、警示标志等,防止人员误操作或触电事故的发生。
DURABLE公司的发展小趣事

在竞争激烈的电子行业中,DURABLE公司深知单打独斗难以取得长远发展。因此,公司积极寻求与其他行业的跨界合作机会。通过与汽车制造商、医疗设备制造商等行业的合作,DURABLE成功将自身的技术优势应用于更多领域的产品中。这种跨界合作模式不仅拓宽了公司的业务领域和收入来源,还为公司带来了更多的创新灵感和市场机遇。通过与其他行业的合作,DURABLE实现了资源共享和优势互补,实现了共赢发展。

问答坊 | AI 解惑

单片机学习的误区

 单片机因其优异的性能得到了越来越广泛的应用,现在几乎所有的电子产品都用到了它,因此学习单片机的人也越来越多。随着技术的进步,单片机的种类也层出不穷,不断有新型高性能的单片机出现,令学习者看得眼花缭乱,忙不暇接,经常有人问学那一种 ...…

查看全部问答>

电子类笔试技巧及相关基础问题

一、模拟电路设计    基础知识(笔试时候容易遇到的题目)    1.最基本的如三极管曲线特性(太低极了点)    2.基本放大电路(电压放大器,电流放大器,互导放大器和互阻放大器),种类,优      &nb ...…

查看全部问答>

基于FPGA的B超成像系统图像采集的原理和实现

1、引言 医学超声诊断成像技术大多数采用超声脉冲回波法,即利用探头产生超声波进入人体,由人体组织反射产生的回波经换能器接收后转换为电信号,经过提取、放大、处理,再由数字扫描变换器转换为标准视频信号,最后由显示器进行显示。在基于FPGA+ ...…

查看全部问答>

请教9261的串口收发问题

请教9261的串口收发问题 我在核中添加了下面的代码: at91_register_uart(AT91SAM9261_ID_US1, 1, ATMEL_UART_RTS); at91_register_uart(AT91SAM9261_ID_US2, 2, ATMEL_UART_RTS); at91_register_uart(AT91SAM9261_ID_US3, 3, ATMEL_UART_RTS ...…

查看全部问答>

EVC下EDIT控件为何无法进行输入法的输入

编辑完对话框类后无法在EDIT里输入汉字; 还有请帮忙看看一下代码怎么修改 LOGFONT m_lf;                 //字体结构 strcpy(m_lf.lfFaceName,ipadress ); 报错:error C2664: \ ...…

查看全部问答>

为什么直接耦合共射放大电路的直流负载线和交流负载线重合?

图为直接耦合共射放大电路~ 直流通路里有直流电源Vcc,可是交流通路里没有Vcc啊,负载线方程怎么会相同呢? 请最好把Uce和Ic的函数关系式即负载线方程写出来~…

查看全部问答>

敢不敢公布第二批的触摸板发货名单?

大哥大嫂们,等触摸板都等我得发癫了。行行好,赶紧吧…

查看全部问答>

【低功耗】COOLRUNNER CPLD低功耗设计

英文资料   [ 本帖最后由 ddllxxrr 于 2011-11-12 21:36 编辑 ]…

查看全部问答>

大家有没有学MSP5438A系列的,交流交流啊

5438A刚买了板子,还没入门,想求一些易入门的资料…

查看全部问答>