历史上的今天
返回首页

历史上的今天

今天是:2025年10月08日(星期三)

正在发生

2022年10月08日 | 51单片机STC89C52定时器中断法扫描数码管及秒表的实现

2022-10-08 来源:csdn

定时器中断法扫描数码管及秒表的实现


程序源码

/*-----------------------包含头文件区域-------------------------*/

#include  //单片机头文件 

/*-----------------------数据类型定义区域-----------------------*/

typedef unsigned char u8; //定义类型unsigned char别名为u8

typedef unsigned int u16; //定义类型unsigned int别名为u16

/*-----------------------用户自定义数据区域---------------------*/

#define FOSC 11059200L    //系统时钟

#define Timer_value (65536-(FOSC/12/1000)*1)//定时器值=(定时器溢出值-(系统时钟/12T模式/1000=定时1ms的定时器值))*定时时间ms) 

//共阳数码管显示字符数组,分别对应的字符为“0123456789ABCDEF-”

code u8 LED_Table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF,0xFF};

u8 LED_show[8]; //数码管显示的数据数组

u8 second; //秒

/*-----------------------函数声明区域---------------------------*/ 

void Timer0_Init(void); //定时器0初始化函数声明

void LED_Scan(void);    //数码管扫描函数声明

/*-----------------------主函数区域-----------------------------*/

void main()

{

second=0; //初始化设定秒

LED_show[6]=LED_Table[second/10]; //第7个数码管显示秒的十位

LED_show[7]=LED_Table[second%10]; //第8个数码管显示秒的个位

//第1~6个数码管显示0

LED_show[0]=LED_Table[0];

LED_show[1]=LED_Table[0];

LED_show[2]=LED_Table[0];

LED_show[3]=LED_Table[0];

LED_show[4]=LED_Table[0];

LED_show[5]=LED_Table[0];

Timer0_Init(); //定时器初始化

while(1);  //死循环,主程序停留在此不再往下执行

/*-----------------------定时器0中断函数区域--------------------*/

void Timer0()interrupt 1

{

static u16 count1s;

TH0=Timer_value>>8; //重置定时器值的高8位

TL0=Timer_value; //重置定时器值的低8位

    LED_Scan(); //数码管扫描

if(++count1s>=1000) //自增1后判断是否大于等于1000ms

{

count1s=0; //清0重新计数

LED_show[6]=LED_Table[second/10]; //第7个数码管显示秒的十位

LED_show[7]=LED_Table[second%10]; //第8个数码管显示秒的个位   

if(++second>99)  //自加1如果秒>99

{

second=0;//秒清0

}

}

}

/*----------------------------------------------------------------

    函数名称:Timer0_Init()

    函数功能:定时器0初始化

    函数形参:无

    返 回 值:无

----------------------------------------------------------------*/

void Timer0_Init(void)

{

TMOD=0x01;          //设置定时器0为模式1(16位计数模式)

TH0=Timer_value>>8; //设定定时器值的高8位

TL0=Timer_value; //设定定时器值的低8位

TR0=1;              //定时器0计数器开始计数

ET0=1;              //允许定时器0中断

EA=1;               //打开总中断

}

/*----------------------------------------------------------------

函数名称:LED_Scan()

函数功能:数码管扫描

函数形参:无

返 回 值:无

----------------------------------------------------------------*/

void LED_Scan(void)

{

static u8 i=0;

P0=0xFF; //显示消影(消影电平跟有效电平相反,如果先使能位选再显示段选数据那么消影就是段选,反则消影位选)

P2=~(0x01< //使能第(i+1)个数码管位选

P0=LED_show[i]; //显示第(i+1)位数码管段选数据

i=(i+1)%8; //显示8个数码管

}


仿真电路

在这里插入图片描述

推荐阅读

史海拾趣

Engelking Elektronik GmbH公司的发展小趣事

为了进一步提升技术实力和产品竞争力,Engelking Elektronik积极寻求与高校和研究机构的合作。通过与多家知名科技院校的合作,公司获得了多项技术专利和研发成果。其中,一项重要的技术突破是开发了一种新型的高效能电子元件,该元件在能效和可靠性方面均达到了行业领先水平。这一成果不仅为公司带来了可观的经济效益,也提升了公司在业界的地位。

Friedrich Lütze GmbH公司的发展小趣事

随着工业自动化需求的不断增长,Friedrich Lütze GmbH 敏锐地捕捉到了这一市场机遇。公司开始加大研发投入,不断推出新产品,如可编程逻辑控制器(PLC)、传感器和执行器等,以满足不同行业对自动化控制解决方案的需求。同时,公司积极拓展国内外市场,与多家知名企业建立了长期合作关系,进一步巩固了其在工业自动化领域的领先地位。

ADDtek公司的发展小趣事

进入21世纪,随着信息技术的飞速发展和工业4.0时代的到来,电子行业面临着前所未有的技术变革。Friedrich Lütze GmbH 积极应对这一挑战,致力于将物联网(IoT)、大数据、人工智能等先进技术融入产品之中,推动公司向智能化、网络化方向转型升级。公司通过建立智能制造体系,提升生产效率和产品质量,同时开发出更加智能、便捷的工业自动化解决方案,为客户提供更加全面的服务。

BILIN公司的发展小趣事

在电子行业的萌芽期,Friedrich Lütze GmbH 由弗里德里希·吕策(虚构姓名,代表公司创始人)于20世纪中期创立。当时,电子行业正处于快速发展阶段,吕策凭借对电气技术的深厚理解和敏锐的市场洞察力,决定专注于工业自动化控制领域。公司初期主要研发和生产电子控制元件,如继电器和接触器,这些产品凭借高质量和稳定性迅速在市场上获得认可,为公司的后续发展奠定了坚实基础。

Carlisle Interconnect Components公司的发展小趣事

在追求经济效益的同时,Carlisle Interconnect Components公司也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和生产工艺,减少对环境的影响。此外,公司还积极参与社会公益事业,为社会做出贡献。这种负责任的态度不仅赢得了社会各界的认可,更为公司的长远发展奠定了坚实的基础。

这五个故事展示了Carlisle Interconnect Components公司在电子行业中的发展历程和取得的成就。通过不断创新、品质管理、技术研发、战略合作以及履行社会责任等措施,公司逐渐在电子连接器领域树立起了自己的品牌形象和市场地位。

得力(deli)公司的发展小趣事

得力公司在国内市场取得成功后,开始积极拓展海外市场。公司在全球建立了多个生产基地和创新研发中心,整合全球人才和资源,为用户提供卓越的产品和服务。同时,得力还注重品牌本土化经营和国际化运营,努力融入当地市场和文化,赢得了全球客户的信赖和认可。

问答坊 | AI 解惑

FPGA基础知识2

这将使你在设计的初始阶段就和布局工程师一起工作,共同规划PCB的走线、冗余规划、散热问题和信号完整性。FPGA工具可能可以在这些方面提供帮助,并协助你解决这些问题,因此你必须确保了解你的工具包的功能。   你咨询一位布局专家的时间越晚, ...…

查看全部问答>

EVC listCtrl背景透明

  怎样使listCtrl透明(有背景图,EVC)…

查看全部问答>

VS2005有几个版本,我装的VS2005怎么打不了SP1的补丁?VS2005中怎么导出支持MFC的SDK包?WINCE6。0中没有MFC组件,WINCE6。0

VS2005有几个版本,我装的VS2005怎么打不了SP1的补丁?VS2005中怎么导出支持MFC的SDK包?WINCE6。0中没有MFC组件,WINCE6。0不支持MFC? 望在做的人谈谈,我写MFC的应用程序,用我自己导出的SDK包,老是报错,什么WCSFTIME函数不认识,为什么?…

查看全部问答>

救命啊。。。。。。。

我刚配的电脑,不知道是什么原因,我每次一编译NIOS工程,电脑就自动的从新启动 重装了系统也不行,问问,到底是什么原因啊。。。 谁遇到过类似问题的,谢谢给我答案.......…

查看全部问答>

关于串行通信

我用msp430f169+max3221E,例子程序下载到里边可是 串口调试助手发了字符却什么也收不到。 我用万用表量了一下,发现Pc-Txd输出-11V不变,Rxd输出0.5V不变, 大侠给我解答一下,到底怎么回事,电压应该多少才对。…

查看全部问答>

MSP430 支持触摸IO的使用

小弟快要毕业了  毕设是MSP430电容触摸按键的实现   我选用的是MSP430G2553单片机    单片机说多达24个支持触摸感应IO   像知道这IO是怎么使用的谢谢了 …

查看全部问答>

【TI文献】LED 参考设计指南ZHCT063A

LED 参考设计指南ZHCT063A,欢迎下载!…

查看全部问答>

LCD1602液晶的数据传输问题?

碰到一个弱弱的问题:DB0~DB7是LCD1602液晶的数据传输口, 通常我们写数据都是这种形式:PORTA=dat;就是说PA0~PA7用来传输数据到DB0~DB7; 但是如果PA0因为需要ADC转换使用而只能PA1~PA7这7个口对接DB1~DB7,还有一个口我用PB0对接DB0,此时先前的表示 ...…

查看全部问答>

电流最大为350mA,电源和地线宽度为10mil可以吗?

网上查询推荐电源线和地线宽度比我的10mil大得多,但是我的最大电流也就350mA,这样可以吗?…

查看全部问答>

stm32F1的19264显示程序????

HG19264测试程序出问题了,没有显示内容,有测试过的么?…

查看全部问答>