找回密码
 立即注册

QQ登录

只需一步,快速开始

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

大家好!请教大家关于定时器自己改的的问题

[复制链接]
跳转到指定楼层
楼主
ID:630579 发表于 2019-11-6 22:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
100黑币
大家好!小萌新想请教大家关于我自己改的定时器外部脉冲处的问题。题目大概是对T0引脚输入的外部脉冲进行计数,并在数码管上显示结果。外部脉冲由独立按键KEY2产生,要求KEY2每按一次,产生一个脉冲,数码管显示的数字加一。这个没有问题,主要是(第二个问:实现每当外部脉冲技术达到5个时,数码管显示的数字加一)自己改的不对。
以下是书上的代码,没有问题。大家可以忽略。
#include<reg52.h>
sbit KEY2=P3^4;
sbit LSA=P1^5;
sbit LSB=P1^6;
sbit LSC=P1^7;
unsigned char code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void Delayms(unsigned int );
void main(void)
{
bit keybuf=1;  //按键值暂存
bit backup=1;  //按键值备份
unsigned char cnt=0;   //按键计数
LSA=1;
LSB=0;
LSC=0;
P0=smgduan[cnt];
while(1)
{
  keybuf=KEY2;
  if(keybuf!=backup)
  {
   Delayms(10);
   if(keybuf == KEY2)
   {
    if(backup==0)
        {
         cnt++;
         if(cnt>=10)
         {
          cnt=0;
          }
          P0=smgduan[cnt];
          }
          backup=keybuf;
          }
         }
        }
   }


void Delayms(unsigned int xms)
{
  unsigned int i,j;
  for(i=xms;i>0;i--)
  {
   for(j=110;j>0;j--);
   }
   }

第二个问
是自己改的,但是感觉自己基础很薄弱,这个最后也没有跑出来。题目说是外部脉冲技术达到5个时,数码管显示数字加一,我自己认为是cnt>=0&&cnt<5的时候P0处的赋值不变,5<cnt<10的时候,P0处赋值加一,但是我这样的不对,没有什么基础,还想问问看啥书?

   if(keybuf==KEY2)
   {
    if(backup==0)
        {
         cnt++;
         if(cnt>=0&&cnt<5)
         {
      P0=smgduan[cnt];
          }
          if(cnt>=5&&cnt<10)
          {
          P0=smgduan[cnt+1];
          }
          if(cnt>=10)
          {
           cnt=0;
           }
想请教大家这里出现什么问题了?是if不可以这样用吗?

         
          
       

最佳答案

查看完整内容

按5次数字加1。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:213173 发表于 2019-11-6 22:07 | 只看该作者
一个杰 发表于 2019-11-7 17:38
每5个外部脉冲计数,数码管显示的数字加1,是按5次,数字加1,是我理解错了

按5次数字加1。

  1. #include<reg52.h>
  2. sbit KEY2=P3^4;
  3. unsigned char code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  4. void Delayms(unsigned int );

  5. void main(void)
  6. {
  7.         bit keybuf=1;  //按键值暂存
  8.         bit backup=1;  //按键值备份
  9.         unsigned char cnt=0;   //按键计数
  10.         unsigned char cnt1=0;
  11.         P0=smgduan[cnt];
  12.         while(1)
  13.         {
  14.                 keybuf=KEY2;
  15.                 if(keybuf!=backup)
  16.                 {
  17.                         Delayms(10);
  18.                         if(keybuf == KEY2)
  19.                         {
  20.                                 if(backup==0)
  21.                                 {
  22.                                         cnt1++;
  23.                                         if(cnt1>=5)
  24.                                         {
  25.                                                 cnt1=0;
  26.                                                 cnt++;
  27.                                                 if(cnt>=10)
  28.                                                         cnt=0;
  29.                                         }
  30.                                         P0=smgduan[cnt];
  31.                                 }
  32.                                 backup=keybuf;
  33.                         }
  34.                 }
  35.         }
  36. }


  37. void Delayms(unsigned int xms)
  38. {
  39.         unsigned int i,j;
  40.         for(i=xms;i>0;i--)
  41.                 for(j=110;j>0;j--);
  42. }
复制代码
回复

使用道具 举报

板凳
ID:584814 发表于 2019-11-7 12:27 | 只看该作者
扫一眼看就少2个右半边括号
回复

使用道具 举报

地板
ID:630579 发表于 2019-11-7 15:42 | 只看该作者
man1234567 发表于 2019-11-7 12:27
扫一眼看就少2个右半边括号

那个是省略的,主要的是代码
回复

使用道具 举报

5#
ID:630579 发表于 2019-11-7 17:38 | 只看该作者
每5个外部脉冲计数,数码管显示的数字加1,是按5次,数字加1,是我理解错了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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