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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2537|回復: 10
打印 上一主題 下一主題
收起左側

麻煩大師幫忙看一下為什么在單片機開發板上不能實現按鍵輸入賦值

[復制鏈接]
跳轉到指定樓層
樓主
下載到開發板上后就顯示4個0,按鍵不起作用。
#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P3^1;
sbit k2=P3^0;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uint num;
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
void delay(uint xms)
{
         unsigned int i;
    unsigned int j;
    for(i=0;i<xms;i++)
        for(j=0;j<109;j++);
}

void key_add()
{
    if(k1==0)
    {
        delay(10);
        if(k1==0)
        {
            num++;
        
        }
        
//    while(!k1);
    }
}
void key_jian()
{
    if(k2==0)
    {
        delay(10);
        if(k2==0)
        {
            num--;
            
        }   
//    while(!k2);
    }        
}
void display()
{
    uchar i;
    for(i=0;i<250;i++)
    {
        P0=smgduan[num/1000];
        LSC=0;LSB=1;LSA=1;
        delay(5);
        
        P0=smgduan[num/100%10];
        LSC=0;LSB=1;LSA=0;
        delay(5);

        P0=smgduan[num%100/10];
        LSC=0;LSB=0;LSA=1;
        delay(5);

        P0=smgduan[num%10];
        LSC=0;LSB=0;LSA=0;
        delay(5);
    }
}
void main(void)
{
   
    while(1)
    {
         key_add();
         display();
         key_jian();
         display();
         if(num>9999)
         {
             num=0;
         }
    }   
}


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

使用道具 舉報

沙發
ID:226798 發表于 2020-7-6 10:41 來自手機 | 只看該作者
你先賦值P0看看端口是不是正常,比如用K1==0,P0=0XAA,顯示正常的話懷疑你的顯示刷新速度太高
回復

使用道具 舉報

板凳
ID:658665 發表于 2020-7-6 11:52 | 只看該作者
數碼管數字在按鍵按下后不會變化的根本原因是程序在display中的執行時間過長,解決辦法是去掉for語句。修改如下




仿真和修改后的程序都在壓縮包里
project.rar (87.12 KB, 下載次數: 6)


回復

使用道具 舉報

地板
ID:301266 發表于 2020-7-6 17:18 | 只看該作者
初學單片機,謝謝兩位師傅,把for語句去掉就好了,
回復

使用道具 舉報

5#
ID:301266 發表于 2020-7-6 17:21 | 只看該作者
麻煩師傅教一下通過獨立按鍵給一個四位數變量賦值的方法。
回復

使用道具 舉報

6#
ID:452950 發表于 2020-7-6 18:05 | 只看該作者
這是用矩陣鍵盤錄入四位學號的代碼,四位數分別存在數組里面,需要合為一個數可以乘以10的次數再加起來       
       uchar RID[4];
        uchar j=0;
        PutStr(1,1,"請輸入學號:");
        PutStr(3,1,"#-確認");        
while(1)
                                {               
                             Key=Keycan();
                             KeyDeal(Key);
                             delay(30);        //按鍵消抖
                             if(Key==0)K=10;
                             if((K>=0)&&(K<=9)&&(j<4))
                                     {
                                             RID[j]=K;
                                                         WriteCommand(0x89+j);                //指定第三行顯示位置
                                                         WriteData(0x30+RID[j]);       
                                              ++j;                                                                                          
                                     }   
                                if(K==14)                //按了退格鍵
                                        {
                                                if(j==0)
                                                        {
                                                                WriteCommand(0x89);                //指定第三行顯示位置
                                                                WriteData(0x20);
                                                        }
                                                else
                                                        {
                                                                --j;
                                                                WriteCommand(0x89+j);            //指定第三行顯示位置
                                                                WriteData(0x20);                                                               
                                                        }
                                        }
                                if((Key==0x12)&&(j==4))break;
                           }
回復

使用道具 舉報

7#
ID:213173 發表于 2020-7-6 22:21 | 只看該作者
把按鍵和顯示函數改一下。
  1. #include <REG51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit k1=P3^1;
  5. sbit k2=P3^0;
  6. sbit LSA=P2^2;
  7. sbit LSB=P2^3;
  8. sbit LSC=P2^4;
  9. uint num;
  10. uint count;
  11. uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  12.                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
  13. void delay(uint xms)
  14. {
  15.         unsigned int i,j;
  16.         for(i=0;i<xms;i++)
  17.                 for(j=0;j<120;j++);
  18. }

  19. void key()
  20. {
  21.     if(!k1||!k2)
  22.     {
  23.                 count++;
  24.         if(count>10)
  25.                         count=11;
  26.                 if(k1==0&&count==10)
  27.                 {
  28.                         if(num<9999)
  29.                                 num++;
  30.                 }
  31.                 if(k2==0&&count==10)
  32.                 {
  33.                         if(num>0)
  34.                                 num--;
  35.                 }
  36.     }
  37.         else count=0;
  38. }

  39. void display()
  40. {
  41.         static uchar i=0;
  42.         uchar dis_buf[4];
  43.         dis_buf[0]=smgduan[num/1000];
  44.         dis_buf[1]=smgduan[num/100%10];
  45.         dis_buf[2]=smgduan[num/10%10];
  46.         dis_buf[3]=smgduan[num%10];

  47.         P0=0x00;
  48.         switch(i)
  49.         {
  50.                 case 0: LSC=0;LSB=1;LSA=1; break;
  51.                 case 1: LSC=0;LSB=1;LSA=0; break;
  52.                 case 2: LSC=0;LSB=0;LSA=1; break;
  53.                 case 3: LSC=0;LSB=0;LSA=0; break;
  54.         }
  55.         P0=dis_buf[i];
  56.         i++;i%=4;
  57. }
  58. void main(void)
  59. {
  60.         while(1)
  61.         {
  62.                 key();
  63.                 display();
  64.                 delay(1);
  65.         }
  66. }
復制代碼

回復

使用道具 舉報

8#
ID:301266 發表于 2020-7-7 21:52 | 只看該作者
本帖最后由 ljw325 于 2020-7-7 21:57 編輯
wulin 發表于 2020-7-6 22:21
把按鍵和顯示函數改一下。

i++;i%=4;什么作用?不知怎么理解。麻煩指點一下。
你們用的仿真軟件是什么?能說一下嗎?

回復

使用道具 舉報

9#
ID:213173 發表于 2020-7-8 06:09 | 只看該作者
ljw325 發表于 2020-7-7 21:52
i++;i%=4;什么作用?不知怎么理解。麻煩指點一下。
你們用的仿真軟件是什么?能說一下嗎?

i++;i%=4;的作用完全等于i++; if(i==4) i=0; 。
仿真軟件:Proteus 7 Professiona
回復

使用道具 舉報

10#
ID:608600 發表于 2020-7-8 21:23 | 只看該作者
for語句多余了,數碼管顯示哪里不需要
回復

使用道具 舉報

11#
ID:808700 發表于 2020-7-29 11:19 | 只看該作者
for不要
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产欧美一区二区三区久久 | 日日干天天干 | 欧美日韩综合一区 | 91精品久久久久久久久久 | 欧美三级在线 | 亚洲永久 | 欧美中文一区 | 亚洲一级视频在线 | 国产精品久久久久久久久久久久冷 | 99资源| 国产欧美日韩久久久 | 国产91色在线 | 亚洲 | 成年人免费看的视频 | 成人免费一级视频 | 色女人天堂 | 午夜精品一区二区三区在线视频 | 久久99精品久久久久久国产越南 | 精品一区久久 | 国产成人免费视频网站高清观看视频 | 免费av观看 | 成人午夜视频在线观看 | 亚洲精品自拍 | 午夜电影福利 | 91精品国产综合久久久密闭 | 黄网站免费观看 | 99精品网站 | 狠狠躁18三区二区一区 | 成人国产a| 欧美色999 | 福利视频一区二区三区 | 国产精品69久久久久水密桃 | av毛片| 国产探花 | 亚洲国产一区二区视频 | 伊伊综合网| 国产一区二区小视频 | 欧美三级视频在线观看 | 精品久久网 | 欧美精品在线免费观看 | 欧美一区二区 | 精品产国自在拍 |