找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8406|回复: 5
收起左侧

51单片机60s倒计时动态显示仿真图和程序

[复制链接]
ID:628948 发表于 2019-11-17 16:44 | 显示全部楼层 |阅读模式
51单片机60s动态显示程序
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4, 0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
sbit gew=P2^1;
sbit shiw=P2^0;
sbit k2=P1^0;
uchar num,num1=60,num2,shi,ge;
void Init()                                                         //初始化子函数
{
        TMOD=0X01;                                                //设定定时器0的工作方式为1
        TH0=(65536-50000)/256;                        //定时器装初值一个周期50ms
        TL0=(65536-50000)%256;
        EA=1;                                                        //开总中断
        ET0=1;                                                    //开定时器0中断
        TR0=1;                                                        //启动定时器0

}
void delay(uint xms)                                //延时子函数
{
        uint i,j;
        for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
}

void scankey()                                                //键盘检测子函数
{
        if(k2==0)                                                //检测键是否被按下
        {
                delay(5);                                        //延时消除抖动
                if(k2==0)                                        //重新读取k2的值
                {                                                       
                        num2++;                                        //num2为按次数标志位
                        while(!k2);                                //等待按键释放
                        if(num2==1)                                //按键一次计时停止
                           TR0=0;
                        if(num2==2)                                //按键两次计时开始
                        {               
                                  TR0=1;
                        }
                }
        }
}

void main()                                                         //主函数
{
        Init();                                                         //初始化子函数调用
        while(1)
        {
                scankey();                                         //不断键盘扫描
                gew=1;                                                 //打开数码管个位位选                                         
                P0=table[ge];                                 //数码管个位赋值
                delay(1);                                         //延时 送入数据的反应时间
                gew=0;                                                 //关闭数码管个位位选
                delay(1);

                shiw=1;                                                  //打开数码管十位位选       
                P0=table[shi];                                  //送入数据
                delay(1);                                          
                shiw=0;                                                  //关闭数码管十位位选
                delay(1);
        }
}
void Timer0()interrupt 1                          
{
        TH0=(65536-50000)/256;                          //定时器重装初值
        TL0=(65536-50000)%256;
        num++;
        if(num==20)                                                  //定时器每进行一个周期num加1,运行20个周期即为1s
        {
                num=0;                                                  //到1秒,num清0重新开始
                num1--;                                                  //倒计时1秒
                if(num1==0)
                num1=60;
                shi=num1/10;                                  //两位数分离赋给数码管十位显示
                ge=num1%10;                                          //两位数分离赋给数码管个位显示
        }
}

仿真图片

仿真图片
回复

使用道具 举报

ID:628948 发表于 2019-11-17 16:46 | 显示全部楼层
希望能够给大家带来帮助
回复

使用道具 举报

ID:628948 发表于 2019-11-17 16:46 | 显示全部楼层
希望大家多多支持,非常感谢
回复

使用道具 举报

ID:644349 发表于 2019-11-18 19:52 来自手机 | 显示全部楼层
1242714238 发表于 2019-11-17 16:46
希望能够给大家带来帮助

这咋总是显示两个警告啊运行不了
回复

使用道具 举报

ID:644705 发表于 2019-11-19 15:07 | 显示全部楼层
谢谢楼主
回复

使用道具 举报

ID:645963 发表于 2019-11-20 18:32 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表