历史上的今天
今天是:2024年11月26日(星期二)
2021年11月26日 | 【C51单片机】数码管实现99秒倒计时
2021-11-26 来源:eefocus
C51单片机之数码管实现99秒倒计时(结合定时器)—STC89C52单片机
代码如下:
#include typedef unsigned char u8; typedef unsigned int u16; sbit b1 = P2^2; sbit b2 = P2^3; sbit b3 = P2^4; u8 duan[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; u16 count = 99; u16 digit = 0; //延时函数 void delay(u16 a){ while(a--); } //数码管实现函数 void timeSub(){ u8 j; for( j=0; j<2; j++){ //只有两个数码管 switch(j){ case(0): b1 = 0, b2 = 0, b3 = 0 ,P0 = duan[count%10];break; //取得十位上的数字 case(1): b1 = 1, b2 = 0, b3 = 0, P0 = duan[count/10];break; //取得个位上的数字 } delay(100); //数码管显示相应的数字 } } void Tim0() interrupt 1 //定时器函数,选择方式一,实现定时器0中断 { TH0 = 0xfc; TL0 = 0x18; //再次赋初值 digit++; //全局变量,累加中断的次数 if(digit >= 1000){ //精准的实现定时1s digit = 0; //置0,重新开始 if(count>=0){ count--; //定时器实现1s时,数码管显示的值实现递减 } } } void main(){ TMOD |= 0x01; //门开了,定时器,方式一,16位计数 TH0 = 0xfc; TL0 = 0x18; //通过计算得到定时器的初值2^16 - 1000 ET0 = 1; //定时器0开关打开 TR0 = 1; //定时器运行开关打开 EA = 1; //打开总开关 while(1){ timeSub(); //数码管实现倒计时 } }
史海拾趣
|
我用的LPC2378,使用H-JTAG几乎都可以查询到芯片,再用H-FLASHER时大多数只能查到\"Target:ARM7TDMI-S Little-Endian\",而在\"Flash:ERROR\"。在H-FLASHER里选芯片选过LPC 2378和LPC2378_A都不好用。我的并口设置的是SPP模式。… 查看全部问答> |
|
◆ 全面替代S3C2440,且性价比更优 ◆ 模块背面无任何器件,方便直接贴焊或通过插针与底板相连 ◆ 商业级(0°~70°)、工业级(-40°~85°) ◆ 微尺寸(40x40x4mm)、低价格(千片价… 查看全部问答> |
|
vs2005 用VC++建立的基于对话框的智能设备MFC应用程序,当包含afxinet.h头文件时,出现下面的错误,是什么原因呀?高手进,在线等之 如题:我想在winCE里写一个FTP上传文件的程序,vs2005 用VC++建立的基于对话框的智能设备MFC应用程序,当包含afxinet.h头文件时,出现下面的错误,是什么原因呀?高手进,在线等之 错误 1 ...… 查看全部问答> |
|
MARVELL PXA310+WM6.0(littleton的BSP)下添加usb mass storage 功能: 以便设备连接到PC上时,能使SD卡像U盘一样在“我的电脑”里呈现出一个盘符, 不通过ActiveSync而是通过usb直接访问。 现在注册表设置好了(99%没错),usbmsfn.dll也已经 ...… 查看全部问答> |
|
大家好,我最近在做RC522读卡方面的程序,在板子上实现了卡的密码校验,修改密码,加数据减数据的操作。我想问一下大家尝试过没有中断方式实现对读卡器的操作的?就是我开启天线寻卡,这个时候单片机去干其他的事情,如果寻到卡直接给单片机一个中 ...… 查看全部问答> |




