找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7203|回复: 3
收起左侧

(分享设计)通过51单片机定时器1实现99秒倒计时

[复制链接]
ID:84566 发表于 2015-7-9 21:12 | 显示全部楼层 |阅读模式
今天刚刚完成了一个新的单片机实验,犯了一个小小的错误,导致不能够倒计时,弄了几个小时, 结果发现是变量的取值范围出错了
任何一个实验都应该自己动手去实践,没有实践是不知道自己少了什么的。只有实践才能够获得更多的调试经验!
程序虽小,但只要实际去做了,就能获得不少的经验! 这就是做复杂程序的基础!
共享自己写的程序,毕竟是自己劳动了几个小时的结果!与大家分享!
程序太小了,就没有多少注释了电路图 详见:http://www.51hei.com/f/ks51.pdf
/******************************************************
                    项目名称:99秒倒计时
                    时间:2015-7-9
                    目的:使用51单片机的定时器1实现99秒倒计时
                    单片机平台:KST51单片机开发平台-金沙滩单片机
                    注意:unsigned char 的取值范围为0-255
                                unsigned char 的取值范围为0-65535
                                要结合单片机的硬件来看程序
**********************************************************/

#include<reg52.h>

sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned int sec = 99;

unsigned char code LedChar[] ={
    0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,
    0x80,0x90,0X88,0x83,0XC6,0xA1,0x86,0x8E
};

unsigned char LedBuff[6] = {
    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};


void LedScan()   //此函数实现Led的动态扫描
{
    static unsigned char i = 0;
   
    P0 = 0xFF;
    P1 = (P1 & 0xF8)| i;
    P0 = LedBuff[ i];
    if(i < 2)
        i++;
    else
        i = 0;
}

void main()
{
   
   
    ENLED =  0;
    ADDR3 = 1;
   
    //定时器寄存器初始化
    TMOD = 0X01;  
    TH0 = 0xFC;    //1 ms定时
    TL0 = 0x67;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
   
    while(1)
    {
        LedBuff[0] = LedChar[sec % 10];
        LedBuff[1] = LedChar[sec/10 %10];
    }
   
}

//中断服务函数
void InterruptTimer0() interrupt 1
{
    static unsigned int cnt = 0;
   
    //Range of "unsigned char" is 0 to 255
    //Range of "unsigned int"  is 0 to 65535
   
    TH0 = 0xFC;
    TL0 = 0x67;
    cnt++;   
    LedScan();
   
    if(cnt >= 1000)
    {
        cnt = 0;
        if(sec >0)
            sec --;
        else
            sec = 99;
    }
   
}

在实际运行中发现第一次计时后重新上初值时会显示“55”,刚才程序已经更正了

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 共享资料的积分奖励!

查看全部评分

相关帖子

回复

使用道具 举报

ID:84566 发表于 2015-7-9 21:30 | 显示全部楼层
给管理员造成重复的劳动感到抱歉
回复

使用道具 举报

ID:85192 发表于 2015-7-9 21:35 | 显示全部楼层
以前曾经犯过同样的错误,先收藏了,谢谢楼主分享,以免以后再犯.
回复

使用道具 举报

ID:77282 发表于 2015-7-9 21:59 | 显示全部楼层
都犯过 我也犯过这样的错误 呵呵
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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