标题: 怎么用单片机用定时器控制数码管的显示? [打印本页]

作者: lx驾    时间: 2018-12-24 18:53
标题: 怎么用单片机用定时器控制数码管的显示?
想实现数码管与定时器结合,依次显示数字并切换显示速度,现在遇到的问题是不会用定时器控制晶体管的显示,希望大神帮忙。


作者: shuisheng    时间: 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;
         }
        }}
       

作者: 周超然    时间: 2018-12-25 14:36
stc的那个isp下载器里面有详细的设置和介绍,去官网上下载。对理解单片机也快。
作者: lx驾    时间: 2018-12-25 15:52
shuisheng 发表于 2018-12-25 03:23
拿去吧,这有定时器不同时间的应用!用数组给定时器值
#include
#define uchar unsigned char

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

作者: wh8010jky    时间: 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就行。
作者: 一杯二锅头    时间: 2018-12-25 22:22
楼主可以尝试用lcd1602  挺方便的
作者: 1113634577    时间: 2018-12-26 07:25
定时器设置为2ms,对数码管定时扫描显示
作者: lx驾    时间: 2018-12-26 15:50
wh8010jky 发表于 2018-12-25 21:45
uchar TimeForSEG;    //定义一个专用于数码管(SEG)的计时变量
void main()
{

谢谢啦
作者: lx驾    时间: 2018-12-27 16:42
wh8010jky 发表于 2018-12-25 21:45
uchar TimeForSEG;    //定义一个专用于数码管(SEG)的计时变量
void main()
{

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




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