标题: 51单片机倒计时99秒 [打印本页]

作者: lagong    时间: 2019-3-19 16:10
标题: 51单片机倒计时99秒
用,38译码器,数码管,51单片机(普中科技单片机的板子)
下面是程序
#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int  u16;

sbit LSA=P2^2;//38译码器控制位选
sbit LSB=P2^3;
sbit LSC=P2^4;

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

u16 s=1000;  //int
u8 sec=100,mb[2]; //char

void Timer0Init()  //定时器0初始化
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
        TH0=0XFC;        //给定时器赋初值,定时1ms
        TL0=0X18;       
        TR0=1;//打开定时器                       
}

void delay(u16 i) //延时函数,延时1ms(这个不准,配合消影使用)
{
        while (i--);
}


void Digdisplay()//数码管显示函数
{
        u8 i;
        for(i=0;i<2;i++)
        {
          switch(i)
          {
                         case(0):
                         LSA=0;LSB=0;LSC=0; break;
                         case(1):
                       LSA=1;LSB=0;LSC=0; break;
           }
        P0=smgduan[mb[1-i]]; //发送段码
        delay(1); //间隔扫描
        P0=0x00; //消影
}
}

void main()
{
        Timer0Init();//定时器初始化
        while(1)
        {
                if(TF0==1) //溢出归零
                {
                        TF0=0;
                        TH0=0xFC;
                        TL0=0x18;
                        s++;
                }
                if(s==1000)
                {
                        s=0;
                        sec--;      //每秒以后减一
                        if(sec==0)sec=100;  //计时100秒以后重新开始
                }
                mb[0]=sec%10; //秒表个位
                mb[1]=sec/10; //秒表十位
                Digdisplay();
        }
}

按照写好的正计时99秒,自己改的
       


作者: zhang1314hong    时间: 2019-5-12 15:52
赞一个
作者: zhang1314hong    时间: 2019-5-12 18:21
我也是普中的板子,用你的程序我的个位十位是反的, P0=smgduan[mb[1-i]]; //这里改为P0=smgduan[mb[i]],谢谢你的分享!
作者: 超级大铭    时间: 2019-7-26 11:39
感谢大佬分享,菜鸟每天飞过
作者: 是否x    时间: 2020-10-27 20:35
兄弟问一下那个mb是什么




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1