找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6537|回复: 11
收起左侧

怎么用单片机用定时器控制数码管的显示?

  [复制链接]
回帖奖励 1 黑币 回复本帖可获得 1 黑币奖励! 每人限 3 次
ID:452212 发表于 2018-12-24 18:53 | 显示全部楼层 |阅读模式
想实现数码管与定时器结合,依次显示数字并切换显示速度,现在遇到的问题是不会用定时器控制晶体管的显示,希望大神帮忙。

回复

使用道具 举报

ID:454000 发表于 2018-12-25 03:23 | 显示全部楼层
拿去吧,这有定时器不同时间的应用!用数组给定时器值
#include<reg51.h>
#define uchar unsigned char
#define uchar unsigned char
#define uint unsigned int
unsigned int i=0;  f=0;
unsigned char mm[ ] = {0x04,0xf5,0x56,0xef,0x14,0xb1,0xc7,0x98,0xe2,0x25,0xd4,0x02,0x11,0xa8,0xb7,0x03};
sbit led=P1^0;
void main()
{
        TMOD=0x01;               //T0工作在方式1下,16位定时功能
    TH0=f;  //定时器T1的高8位赋初值
    TL0=f;  //定时器T1的高8位赋初值
        TF0=0;                        //清除TF0标志位
        TR0=1;                        //启动T0
        while(1)
        {
                if(TF0==1)                //判断T0溢出标志位是否为1
                {         
                        TF0=0;
                    i++;
         if(i==16)

                   f=mm[i];

                        TH0=f;  //定时器T1的高8位赋初值
            TL0=f;  //定时器T1的高8位赋初值
               
                        led=~led;
                        i=0;
         }
        }}
       

评分

参与人数 3黑币 +30 收起 理由
还有谁? + 15
jinsheng7533967 + 10 回帖助人的奖励!
lx驾 + 5 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:449525 发表于 2018-12-25 14:36 | 显示全部楼层
stc的那个isp下载器里面有详细的设置和介绍,去官网上下载。对理解单片机也快。
回复

使用道具 举报

ID:452212 发表于 2018-12-25 15:52 来自手机 | 显示全部楼层
shuisheng 发表于 2018-12-25 03:23
拿去吧,这有定时器不同时间的应用!用数组给定时器值
#include
#define uchar unsigned char

谢谢啦
回复

使用道具 举报

ID:134430 发表于 2018-12-25 21:19 | 显示全部楼层
uchar TimeForSEG;
回复

使用道具 举报

ID:451718 发表于 2018-12-25 21:33 | 显示全部楼层
如果你刚接触单片机,在了解中断之前去学定时器,这是一个好思路。  但是不建议你通过看程序去体会, 还是要找一本不是太老,并且又通俗的教程仔细研读,光看程序,往往会走弯路。  http://www.51hei.com/bbs/dpj-26246-1.html
这个教程里面,关于定时器讲得很透彻,不像高校的教材,照本宣科,看得人满头雾水。
一楼的程序也不错,很单纯的讲解了定时器的用法。但是定时器的附初值的方式,很可能会误导人的。
回复

使用道具 举报

ID:134430 发表于 2018-12-25 21:45 | 显示全部楼层
uchar TimeForSEG;    //定义一个专用于数码管(SEG)的计时变量
void main()
{
    TMOD=0x01;      //定时器0工作方式
    TH0=oxfc;         //   ims定时,(晶振12M)
    TL0=0x18;

    if(TimeForSEG>=xx)     //xx:需要控制数码管的时间
    {
        TimeForSEG=0;       //清0,为下次计时
         Wei=0;                 //打开数码管位控制(低电平启动)
    }
}

vod TimeCount() interrupt 1     //中断程序
{
    TH)=0xfc;                         //定时器重装初值
    TL)=0x18
    TimeForSEG++;                 //计时;ims+1
}

我一般是如上写程序的,这样做有一个好处,更改时间方便,如果要控制多个元件,只要增加TimeForXX就行。
回复

使用道具 举报

ID:454949 发表于 2018-12-25 22:22 | 显示全部楼层
楼主可以尝试用lcd1602  挺方便的
回复

使用道具 举报

ID:371527 发表于 2018-12-26 07:25 | 显示全部楼层
定时器设置为2ms,对数码管定时扫描显示
回复

使用道具 举报

ID:452212 发表于 2018-12-26 15:50 | 显示全部楼层
wh8010jky 发表于 2018-12-25 21:45
uchar TimeForSEG;    //定义一个专用于数码管(SEG)的计时变量
void main()
{

谢谢啦
回复

使用道具 举报

ID:452212 发表于 2018-12-27 16:42 | 显示全部楼层
wh8010jky 发表于 2018-12-25 21:45
uchar TimeForSEG;    //定义一个专用于数码管(SEG)的计时变量
void main()
{

想问一下可以随意得更改时间吗?还是只能+1?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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