登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] 定时器和数码管

[复制链接]
发表于 2019-2-2 21:54:31 | 显示全部楼层 |阅读模式
学习笔记
学习科目: C语言
学习安排: 使用定时器将小灯以一秒的间隔闪烁;
数码管显示
开始时间: 2019-01-30
结束时间: 2019-02-01
定时器的应用
第一步:设置特殊功能寄存器 TMOD,配置好工作模式。 第二步:设置计数寄存器 TH0 和 TL0 的初值。 第三步:设置 TCON,通过 TR0 置 1 来让定时器开始计数。 第四步:判断 TCON 寄存器的 TF0 位,监测定时器溢出情况。下面的程序是数码管示数的显示,用到了定时器

#include<reg52.h>

sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit ENLED = P1^1;
unsigned char code LedChar[]={
  0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
  0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};

void main()
{
    unsigned char cnt = 0;     //记录T0中断次数
  unsigned char sec = 0;      //记录经过的秒数
   
  ENLED = 0;            //使能 U3,选择数码管 DS1
  P23 = 1;
  P22 = 0;
  P21 = 0;
  P20 = 0;
  
  TMOD = 0x01;      //设置 T0 为模式 1
  TH0 = 0xB8;           //为 T0 赋初值 0xB800
  TL0 = 0x00;
  TR0 = 1;                //启动 T0
  while(1)
  {
     if(TF0 == 1)        //判断 T0 是否溢出
    {
       TF0 = 0;                 //T0 溢出后,清零中断标志
     TH0 = 0xB8;
     TL0 = 0x00;
     cnt++;
     if(cnt >= 50)            //判断 T0 溢出是否达到 50 次   
     {
         cnt = 0;
       P0 = LedChar[sec];         //当前秒数对应的真值表中的值送到 P0 口      
       sec++;
       if(sec >= 16)
       {
           sec = 0;
       }
      
     }
   }   
   
  }
   
}

批注 2019-02-02 200154.jpg
批注 2019-02-02 200239.jpg
批注 2019-02-02 203541.jpg
知行合一
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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