找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1735|回复: 4
打印 上一主题 下一主题
收起左侧

请教下各位高人这个单片机程序加个调时程序怎么加?

[复制链接]
跳转到指定楼层
楼主
ID:229641 发表于 2018-2-12 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
吃灰了很久的一块单片机开发板,当初怎么没有翻到这里来呢,,配送的资料看的我云里雾里的,这两天弄下这个想改个可调的时钟,最起码不用放着吃灰了,看了几天资料,看到定时器就晕了,想移植个调时程序不知道从哪里下手,热心的坛友帮我看看怎么弄。。。。。这个垃圾板只有一个74H573段选,位选是138的译码器,感觉应该是动这块的数据完全不知道怎么下手,这几天的成果也就是可以点灯了。。

#include<reg51.h>
#include"ds1302.h"

//数码管IO
#define DIG    P0
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char Num=0;
unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};

void LcdDisplay();
void Timer0Configuration();

/*******************************************************************************
* 函数名         : main
* 函数功能           : 主函数
* 输入           : 无
* 输出              : 无
*******************************************************************************/

void main()
{
    Ds1302Init();
    Timer0Configuration();
    while(1)
    {   
        Ds1302ReadTime();
        disp[7] = DIG_CODE[TIME[0]&0x0f];
        disp[6] = DIG_CODE[TIME[0]>>4];
        disp[5] = 0X40;
        disp[4] = DIG_CODE[TIME[1]&0x0f];
        disp[3] = DIG_CODE[TIME[1]>>4];
        disp[2] = 0X40;
        disp[1] = DIG_CODE[TIME[2]&0x0f];
        disp[0] = DIG_CODE[TIME[2]>>4];   
    }
   
}

/*******************************************************************************
* 函数名         : Timer0Configuration()
* 函数功能           : 设置计时器
* 输入           : 无
* 输出              : 无
*******************************************************************************/

void Timer0Configuration()
{
    TMOD=0X02;//选择为定时器模式,工作方式2,仅用TRX打开启动。

    TH0=0X9C;    //给定时器赋初值,定时100us
    TL0=0X9C;   
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器        
}

/*******************************************************************************
* 函数名         : DigDisplay() interrupt 1
* 函数功能           : 中断数码管显示
* 输入           : 无
* 输出              : 无
*******************************************************************************/

void DigDisplay() interrupt 1
{
//定时器在工作方式二会自动重装初,所以不用在赋值。
//    TH0=0X9c;//给定时器赋初值,定时1ms
//    TL0=0X00;        
    DIG=0; //消隐
    switch(Num)     //位选,选择点亮的数码管,
    {
        case(7):
            LSA=0;LSB=0;LSC=0; break;
        case(6):
            LSA=1;LSB=0;LSC=0; break;
        case(5):
            LSA=0;LSB=1;LSC=0; break;
        case(4):
            LSA=1;LSB=1;LSC=0; break;
        case(3):
            LSA=0;LSB=0;LSC=1; break;
        case(2):
            LSA=1;LSB=0;LSC=1; break;
        case(1):
            LSA=0;LSB=1;LSC=1; break;
        case(0):
            LSA=1;LSB=1;LSC=1; break;   
    }
    DIG=disp[Num]; //段选,选择显示的数字。
    Num++;
    if(Num>7)
        Num=0;
}


数码管显示时钟.rar

47.1 KB, 下载次数: 6

这个就是全部程序了

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:275468 发表于 2018-2-13 13:55 | 只看该作者
是什么板子?有些老板子东西比较特殊,
回复

使用道具 举报

板凳
ID:283974 发表于 2018-2-13 16:47 | 只看该作者
我也有这样的问题
回复

使用道具 举报

地板
ID:229641 发表于 2018-2-13 20:29 来自手机 | 只看该作者
396934940 发表于 2018-2-13 13:55
是什么板子?有些老板子东西比较特殊,

普中科技的板子,看了很多教程其它家的板都是两个74h573控制段选和位选,这家奇葩的用138译码器位选.74h573段选……还好这个我还能搞懂操作方法,就是这个例程程序给的是数码管时钟蛋疼的是没有调时程序,另外跟着一个大神折腾胸牌改时钟,调时键程序消抖有毛病,还有一个也是根本没有调时功能……我也是醉了……这个开发板买了3年左右了,当初卡在了生成hex文件那步……吃灰了几年……前段时间跟着折腾胸牌的gd32f150我发现只烧录别人的程序太痛苦了,所以硬着头皮开始学习单片机,无奈逻辑,与,非,或……到中断卡住了……初中的知识学这个比较吃力啊……

评分

参与人数 2黑币 +70 收起 理由
davg1 + 20 有用,谢谢!
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:229641 发表于 2018-2-13 20:29 来自手机 | 只看该作者
hmbb123 发表于 2018-2-13 16:47
我也有这样的问题

解决了吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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