欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3511|回復(fù): 14
收起左側(cè)

單片機(jī)程序按鍵后怎么顯示的數(shù)字不自動(dòng)增加

  [復(fù)制鏈接]
ID:347814 發(fā)表于 2019-6-19 12:19 | 顯示全部樓層 |閱讀模式
功能:我想通過(guò)按鍵時(shí)把一個(gè)初始值(本例是50)通過(guò)數(shù)碼管顯示出來(lái),以后每按一次按鍵,數(shù)值就加1,
    但我仿真時(shí),按鍵卻不能自動(dòng)增加,不知是什么原因?

單片機(jī)源程序如下:
/*兩位靜態(tài)數(shù)碼管顯示按鍵次數(shù)*/
//頭文件
#include "reg51.h"
/* 定義 uint uchar  */
typedef unsigned int uint;
typedef unsigned char uchar;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,  
         0x92,0x82,0xf8,0x80,0x90};   //0~9的數(shù)組   (共陽(yáng)極)

sbit key = P1^0;                          //定義按鍵
void Delay_ms(uint z);       //聲明延時(shí)函數(shù)
void main(void)                           //主函數(shù)
{
uint i;     
while(1)
{   
  if(key == 0)                      //判斷按鍵是否按下
  {
   Delay_ms(10);      //延時(shí)10ms
   if(key == 0)      //再次判斷
   {
   i=50; i++;       //按鍵次數(shù)
    while(key == 0);    //判斷是否松開(kāi)按鍵
    if(i == 100) i=0;    //如果到達(dá)99,下一次回到0
   }
  }         
  P2 = table[i/10];          //顯示十位
  P3 = table[i%10];          //顯示各位   
}
}

void Delay_ms(uint z)                 //延時(shí)函數(shù)
{
while(z--) 12.000MHz
{
  unsigned char i, j;

  i = 2;
  j = 239;
  do
  {
   while (--j);
  } while (--i);
}
}

回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2019-6-19 15:50 | 顯示全部樓層
i=50;移動(dòng)到按鈕外面
回復(fù)

使用道具 舉報(bào)

ID:564631 發(fā)表于 2019-6-19 17:43 | 顯示全部樓層
i=50;i++;這兩條有問(wèn)題,i=50放的位置錯(cuò)了,每次按鍵進(jìn)入都重新賦值50,永遠(yuǎn)都是51的值,沒(méi)有任何的變化,建議放在全局變量,或者i定義成靜態(tài)全局變量
回復(fù)

使用道具 舉報(bào)

ID:452821 發(fā)表于 2019-6-19 19:11 | 顯示全部樓層
每次按鍵計(jì)數(shù)之前先給賦50所以每次按下都是51,初值要在循環(huán)外面賦值一次即可
回復(fù)

使用道具 舉報(bào)

ID:565305 發(fā)表于 2019-6-19 19:56 | 顯示全部樓層
很明顯,每次進(jìn)入下述代碼時(shí)
   if(key == 0)      //再次判斷
   {
   i=50; i++;       //按鍵次數(shù)
    while(key == 0);    //判斷是否松開(kāi)按鍵

你的 i 又被賦值為 50 了

把 i=50 放到初始化的地方寫(xiě)吧
回復(fù)

使用道具 舉報(bào)

ID:424598 發(fā)表于 2019-6-19 20:23 來(lái)自觸屏版 | 顯示全部樓層
你每次都重置i=50,變量怎么能增加
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2019-6-19 20:37 | 顯示全部樓層
修改2處uint i=50;       i=50; i++;       //按鍵次數(shù)   此處刪除  i=50;
回復(fù)

使用道具 舉報(bào)

ID:567243 發(fā)表于 2019-6-19 21:01 | 顯示全部樓層
i=50; i++;       //按鍵次數(shù)     你每次進(jìn)按鍵后都賦了50,后面++,應(yīng)該是在50-51這兩個(gè)數(shù)了,你看對(duì)?
回復(fù)

使用道具 舉報(bào)

ID:567243 發(fā)表于 2019-6-19 21:03 | 顯示全部樓層
i=50; i++;       //按鍵次數(shù)     你每次進(jìn)按鍵后都賦了50,后面++,應(yīng)該是在50-51這兩個(gè)數(shù)了,你看對(duì)?
回復(fù)

使用道具 舉報(bào)

ID:293363 發(fā)表于 2019-6-19 21:08 | 顯示全部樓層
按鍵處理程序沒(méi)對(duì)   i=50;要放在while(1)之前,你的程序是每次按下按鍵都給i賦值50,然后+1肯定不會(huì)加啊
if(key == 0)                      //判斷按鍵是否按下
  {
   Delay_ms(10);      //延時(shí)10ms
   if(key == 0)      //再次判斷
   {
   i++;       //按鍵次數(shù)
    while(key == 0);    //判斷是否松開(kāi)按鍵
    if(i == 100) i=0;    //如果到達(dá)99,下一次回到0
   }
  }         
  P2 = table[i/10];          //顯示十位
  P3 = table[i%10];          //顯示各位   
}
}
回復(fù)

使用道具 舉報(bào)

ID:552614 發(fā)表于 2019-6-19 21:14 | 顯示全部樓層
你把i定義成全局變量試一下,因?yàn)槟阋恢痹趙hile語(yǔ)句里一直讓i=50,它執(zhí)行完加一跳出去再進(jìn)來(lái)還是等于50
回復(fù)

使用道具 舉報(bào)

ID:105364 發(fā)表于 2019-6-19 21:28 | 顯示全部樓層
  if(key == 0)      //再次判斷
   {
   i=50; i++;       //按鍵次數(shù)
    while(key == 0);    //判斷是否松開(kāi)按鍵
    if(i == 100) i=0;    //如果到達(dá)99,下一次回到0
   }
每次進(jìn)入按鍵代碼,i都賦值50;
回復(fù)

使用道具 舉報(bào)

ID:567323 發(fā)表于 2019-6-19 22:05 | 顯示全部樓層
不好弄啊
回復(fù)

使用道具 舉報(bào)

ID:342822 發(fā)表于 2019-6-19 22:23 | 顯示全部樓層
#include "reg51.h"
/* 定義 uint uchar  */
typedef unsigned int uint;
typedef unsigned char uchar;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,  
         0x92,0x82,0xf8,0x80,0x90};   //0~9的數(shù)組   (共陽(yáng)極)

sbit key = P1^0;                          //定義按鍵
void Delay_ms(uint z);       //聲明延時(shí)函數(shù)
void main(void)                           //主函數(shù)
{
uint i ;
i=50;   
while(1)
{   
  if(key == 0)                      //判斷按鍵是否按下
  {
   Delay_ms(10);      //延時(shí)10ms
   if(key == 0)      //再次判斷
   {
    i++;       //按鍵次數(shù)
    while(key == 0);    //判斷是否松開(kāi)按鍵
    if(i == 100) i=0;    //如果到達(dá)99,下一次回到0
   }
  }         
  P2 = table[i/10];          //顯示十位
  P3 = table[i%10];          //顯示各位   
}
}

void Delay_ms(uint z)                 //延時(shí)函數(shù)
{
while(z--)
{
  unsigned char i, j;

  i = 2;
  j = 239;
  do
  {
   while (--j);
  } while (--i);
}
}
i=50在循環(huán)外就ok~~
回復(fù)

使用道具 舉報(bào)

ID:207421 發(fā)表于 2019-6-20 01:19 | 顯示全部樓層
/*有問(wèn)題的我都注釋了,下面應(yīng)該要有程序明細(xì)介紹*/
/************************************************************************
* 工  程  名: xxxxxxxx
* 單片機(jī)型號(hào): xxxxxxxx
* 晶      振: xxxxxxxx
* 接口說(shuō)明:
*          例如 數(shù)碼管段選什么IO,位選什么IO,數(shù)碼管驅(qū)動(dòng)芯片有哪些,分別接到了哪些IO。
*                            按鍵接到哪個(gè)IO,有沒(méi)有跳帽 等 等 等 等 等 等 !
* 還可以寫(xiě)更詳細(xì),客戶一看就都知道了。
************************************************************************/
#include "reg51.h"
typedef unsigned int uint;
typedef unsigned char uchar;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //0~9的數(shù)組   (共陽(yáng)極)
sbit key = P1^0;        //定義按鍵
void Delay_ms(uint z);  //聲明延時(shí)函數(shù)
//主函數(shù)
void main(void)        
{
        uint i=50;   /*    i=50; 在這里初始化 ,運(yùn)行程序就會(huì)顯示50  */   
        while(1)
        {   
                if(key == 0)       //判斷按鍵是否按下
                {
                        Delay_ms(10);  //延時(shí)10ms
                        if(key == 0)   //再次判斷
                        {
                                i++;     /*  i=50; i++;  不能放在這里初始化,否則每一次按鍵都是50, i++; 留著   */          //按鍵次數(shù)
                                while(key == 0);    //判斷是否松開(kāi)按鍵
                                if(i == 100) i=0;    //如果到達(dá)99,下一次回到0
                        }
                }
                /*
                這里基本上全錯(cuò)了,P2->十位, P3->個(gè)位  這不亂套了嗎?   段選有兩個(gè)IO口的嗎???
                位選 居然看不到 是哪個(gè)IO? 有沒(méi)有驅(qū)動(dòng)芯片?
                P2 = table[i/10];          //顯示十位
                P3 = table[i%10];          //顯示各位
                要么我猜 P2 位選?  P3 段選? 還是位選直接接了電源正極嗎???
                */
                // 亂猜開(kāi)始,數(shù)碼管延時(shí)函數(shù)值可能要調(diào)一調(diào),不然會(huì)閃
                P2 = 0x01;                           //位選開(kāi) P20
                P3 = table[i/10];            //顯示十位 P3 段選
                Delay_ms(5);
                P2 = 0x00;                                         //關(guān)閉數(shù)碼管顯示
                Delay_ms(5);
                //
                P2 = 0x02;                           //位選開(kāi) P21
                P3 = table[i%10];            //顯示個(gè)位 P3 段選
                Delay_ms(5);
                P2 = 0x00;                                         //關(guān)閉數(shù)碼管顯示
                Delay_ms(5);
                // 亂猜結(jié)束,IO不對(duì)那就自己改,問(wèn)題不明確,我也沒(méi)辦法。
        }
}
//延時(shí)函數(shù)  12.000MHz
void Delay_ms(uint z)                 
{
        while(z--)    //while 這種少用,容易出問(wèn)題,特別是while很多的時(shí)候。 用for吧,不改了,這種小程序錯(cuò)誤實(shí)在太多
        {
                unsigned char i, j;

                i = 2;
                j = 239;
                do
                {
                        while (--j);
                } while (--i);
        }
}

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表