久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3101|回復(fù): 14
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:347814 發(fā)表于 2019-6-19 12:19 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
功能:我想通過按鍵時把一個初始值(本例是50)通過數(shù)碼管顯示出來,以后每按一次按鍵,數(shù)值就加1,
    但我仿真時,按鍵卻不能自動增加,不知是什么原因?

單片機(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ù)組   (共陽極)

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

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

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:332444 發(fā)表于 2019-6-19 15:50 | 只看該作者
i=50;移動到按鈕外面
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

5#
ID:565305 發(fā)表于 2019-6-19 19:56 | 只看該作者
很明顯,每次進(jìn)入下述代碼時
   if(key == 0)      //再次判斷
   {
   i=50; i++;       //按鍵次數(shù)
    while(key == 0);    //判斷是否松開按鍵

你的 i 又被賦值為 50 了

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

使用道具 舉報

6#
ID:424598 發(fā)表于 2019-6-19 20:23 來自手機(jī) | 只看該作者
你每次都重置i=50,變量怎么能增加
回復(fù)

使用道具 舉報

7#
ID:332444 發(fā)表于 2019-6-19 20:37 | 只看該作者
修改2處uint i=50;       i=50; i++;       //按鍵次數(shù)   此處刪除  i=50;
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

13#
ID:567323 發(fā)表于 2019-6-19 22:05 | 只看該作者
不好弄啊
回復(fù)

使用道具 舉報

14#
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ù)組   (共陽極)

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

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

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

使用道具 舉報

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

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

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日日日色 | 国产精品乱码一区二区三区 | 91精品国产高清一区二区三区 | 激情小视频 | caoporn国产精品免费公开 | 九九免费视频 | 久久精品亚洲 | 欧美另类视频 | 男人天堂av网 | 国产精品一区视频 | 久久精品色欧美aⅴ一区二区 | av免费观看网站 | 精品亚洲一区二区三区四区五区高 | 精品欧美一区二区三区久久久 | 韩国av一区二区 | 97人人超碰 | 欧美一区二 | 高清久久久 | 欧美日韩精品一区二区天天拍 | 瑟瑟视频在线看 | 国产精品一区久久久 | 欧美中文在线 | 日韩欧美在线观看视频 | 亚洲欧美在线观看 | 久久久精品久久 | 亚洲视频中文字幕 | 精品伦精品一区二区三区视频 | 激情麻豆视频 | 亚洲一区二区三区视频 | 欧美精品在线播放 | 成人在线视频一区 | 日本视频在线播放 | 亚洲成人自拍网 | 欧美精三区欧美精三区 | 久久综合激情 | 国产99久久精品 | 免费精品 | 在线成人免费视频 | 午夜视频一区 | 91精品国产综合久久精品 | 日韩欧美一区二区三区四区 |