找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2673|回复: 1
收起左侧

改动了一个单片机程序,希望用定时器代替延时函数,并改变数字切换速度,求助

[复制链接]
回帖奖励 6 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次
ID:452212 发表于 2018-12-27 16:19 | 显示全部楼层 |阅读模式
主要问题是不知道怎么加上定时器程序,以及切换显示速度,希望有人指点。

#include "reg52.h"   
typedef unsigned int u16;  
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[17]={0x3f,0x5b,0x3f,0x4f,0x66,0x06,0x3f};
         
void delay(u16 i)
{
while(i--);
}

void DigDisplay()
{
u8 i;
for(i=0;i<7;i++)
{
  switch(i)  
  {
   case(0):
    LSA=1;LSB=1;LSC=1; break;
   case(1):
    LSA=0;LSB=1;LSC=1; break;
   case(2):
    LSA=1;LSB=0;LSC=1; break;
   case(3):
    LSA=0;LSB=0;LSC=1; break;
   case(4):
    LSA=1;LSB=1;LSC=0; break;
   case(5):
    LSA=0;LSB=1;LSC=0; break;
   case(6):
    LSA=1;LSB=0;LSC=0; break;
  }
  P0=smgduan[ i];
  delay(100);
  P0=0x00;
}
}

void main()
{
while(1)
{
  DigDisplay();   
}  
}



回复

使用道具 举报

ID:123289 发表于 2018-12-27 22:07 | 显示全部楼层
定时器是独立运行硬件设备。
用它替代延时要解决以下:
1、何时开始延时,做一个标记吧:B_START.
2、何时结束延时,再做一个标记:B_END
3、计多长时间,需要做一个计数器,用于计时。设计时器为R_JS。
4、初始化时,以上三个参数全清0。
5、主程序开始计时时:将B_START置1,并置R_JS=xx时间。是否延时结束,就查B_END是否=1,=1就表示延时时间结束,即时间到了。
6、定时器:当B_START=1时,将R_JS-1,当B_START=0时,不处理它。当R_JS-1=0时,置 B_END=1,表示时间到了,顺便将B_START清0,停止计时。
7、记住:主程序查到时间到了(B_END=1),处理完事件后记得将B_END清0,以便下次再用。

评分

参与人数 1黑币 +6 收起 理由
lx驾 + 6 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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