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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

請教大俠們仿制ID95809大俠制做的STC15計數器為什么不能計數

[復制鏈接]
跳轉到指定樓層
樓主
仿制了ID95809大俠制做的STC15計數器,數碼管可以正常顯示,但是按按鍵無法計數沒有反應,要把程序里的K3按鍵程刪除才能正常計數,各位大俠們幫忙看下程序是哪里的問題單片機源程序如下:
  1.     #include <STC15.h>
  2.     #define uchar unsigned char
  3.     #define uint unsigned int
  4.     sbit FMQ=P3^4;//蜂鳴器
  5.     sbit K1=P3^2; //按鍵加
  6.     sbit K2=P3^5; //按鍵減
  7.     sbit K3=P3^2; //復位
  8.     bit flag_KEY=0; //按鍵松開標志位
  9.     sbit DS1=P1^3;//數碼管第1位
  10.     sbit DS2=P1^1;//數碼管第2位
  11.     sbit DS3=P1^0;//數碼管第3位
  12.     sbit DS4=P1^2;//數碼管第4位
  13.     unsigned char ScanTime=1;
  14.     unsigned int Num=0;
  15.     //共陰數碼管段碼表,段接P2.0-2.7,位接P1.0-1.3
  16.     unsigned char code SEG_Tab[]={
  17.             0x3F,/*0*/
  18.             0x06,/*1*/
  19.             0x5B,/*2*/
  20.             0x4F,/*3*/
  21.             0x66,/*4*/
  22.             0x6D,/*5*/
  23.             0x7D,/*6*/
  24.             0x07,/*7*/
  25.             0x7F,/*8*/
  26.             0x6F,/*9*/
  27.     };
  28.     /*---------------------數碼管顯示---------------------------------------*/
  29.     void display()
  30.     {        //數碼管初始化
  31.             P2=0x00;//P2=00000000
  32.             P1=0xFF;//P1=11111111
  33.       switch(ScanTime)
  34.             {
  35.               //----------數碼管第1位--------------
  36.                     case 1:
  37.                             if(Num==0)
  38.                             {
  39.                                     P2=0x40;
  40.                             }
  41.                             else
  42.                             {
  43.                                     P2=SEG_Tab[Num/1000];
  44.                             }
  45.                                     DS1=0;
  46.                     break;
  47.               //-----------數碼管第2位-------------
  48.                     case 2:
  49.                             if(Num==0)
  50.                             {
  51.                                     P2=0x40;
  52.                             }
  53.                             else
  54.                             {
  55.                                     P2=SEG_Tab[Num/100%10];
  56.                             }
  57.                             DS2=0;
  58.                     break;
  59.                     //-----------數碼管第3位-------------
  60.                     case 3:
  61.                             if(Num==0)
  62.                             {
  63.                                     P2=0x40;
  64.                             }
  65.                             else
  66.                             {
  67.                                     P2=SEG_Tab[Num/10%10];
  68.                             }
  69.                               DS3=0;
  70.                     break;
  71.                     //-----------數碼管第4位-------------
  72.                     case 4:
  73.                             if(Num==0)
  74.                             {
  75.                                     P2=0x40;
  76.                             }
  77.                             else
  78.                             {
  79.                                     P2=SEG_Tab[Num%10];
  80.                             }
  81.                             DS4=0;
  82.                     break;
  83.              //------------------default---------------
  84.                     default: break;
  85.             }
  86.             //-----數碼管循環------
  87.             ScanTime++;
  88.             if(ScanTime>4)
  89.             {
  90.                     ScanTime=1;//循環掃描
  91.             }
  92.     }
  93.     /*-------------------------------------
  94.                                 按鍵掃描
  95.     ---------------------------------------*/
  96.     void keyscan()
  97.     {
  98.             if(K1==0)
  99.             {
  100.                     if(flag_KEY==1)//按鍵只響應1次
  101.                     {
  102.                             flag_KEY=0;
  103.                             if(Num<999)
  104.                             {
  105.                                     Num++;
  106.                             }
  107.                     }
  108.             }
  109.             else if(K2==0)
  110.             {
  111.                     if(flag_KEY==1)//按鍵只響應1次
  112.                     {
  113.                             flag_KEY=0;
  114.                             if(Num>0)
  115.                             {
  116.                                     Num--;
  117.                             }
  118.                     }
  119.             }
  120.                     else if(K3==0)
  121.             {
  122.                     if(flag_KEY==1)//按鍵只響應1次
  123.                     {
  124.                             flag_KEY=0;
  125.                             if(Num>0)
  126.                             {
  127.                                     Num=0;
  128.                             }
  129.                     }
  130.             }
  131.       else//按鍵松開
  132.       {
  133.               flag_KEY=1;
  134.       }
  135.     }
  136.     void delay_ms(unsigned int ms)// 延時子程序
  137.     {
  138.       unsigned int a,b;
  139.       for(a=ms;a>0;a--)
  140.       for(b=123;b>0;b--);
  141.     }
  142.     /*-------------------------------------
  143.                                 主函數
  144.     ---------------------------------------*/
  145.     void main()
  146.     {
  147.             P1M1 = 0x00; P1M0 = 0xFF; //P1口推挽模式
  148.             P2M1 = 0x00; P2M0 = 0xFF; //P2口推挽模式
  149.             while(1)
  150.             {
  151.                     display();
  152.                     keyscan();
  153.                     delay_ms(10);
  154.                     if(Num>=100)
  155.                     {
  156.                             FMQ=0;
  157.                     }
  158.                     else
  159.                     {
  160.                             FMQ=1;
  161.                     }
  162.             }
  163.     }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:352736 發表于 2024-9-13 17:58 | 只看該作者
要將這段程序刪了才能正常計數,麻煩大俠們幫忙改下
  else if(K3==0)
        {
                if(flag_KEY==1)//按鍵只響應1次
                {
                        flag_KEY=0;
                        
                        if(Num>0)
                        {
                                Num=0;
                        }
                }
        }
回復

使用道具 舉報

板凳
ID:68189 發表于 2024-9-14 08:18 | 只看該作者
key1 和 key3 都定義成了P32,是不是這個原因呢?
回復

使用道具 舉報

地板
ID:1109793 發表于 2024-9-14 09:31 | 只看該作者
wpppmlah 發表于 2024-9-14 08:18
key1 和 key3 都定義成了P32,是不是這個原因呢?

就算一樣,也只是只執行KEY1的部分吧。
回復

使用道具 舉報

5#
ID:352736 發表于 2024-9-15 07:22 來自手機 | 只看該作者
wpppmlah 發表于 2024-9-14 08:18
key1 和 key3 都定義成了P32,是不是這個原因呢?

改了還是一樣,要把k3的那段程序刪了才能計數,不刪的話按鍵沒反應
回復

使用道具 舉報

6#
ID:1109793 發表于 2024-9-15 14:35 | 只看該作者
軟件模擬了一下,不用刪除,也好用啊,話說你這都沒有消斗,是不是和按鍵抖動有關?
回復

使用道具 舉報

7#
ID:849913 發表于 2024-9-15 20:08 | 只看該作者
#在         P0M0 = 0x00;     P0M1 = 0x00;     P1M0 = 0x00;     P1M1 = 0x00;     P2M0 = 0x00;     P2M1 = 0x00;     P3M0 = 0x00;     P3M1 = 0x00;     P5M0 = 0x00;     P5M1 = 0x00;    這里快速回復#
回復

使用道具 舉報

8#
ID:849913 發表于 2024-9-15 20:09 | 只看該作者

        P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;
   P3口沒設置 設置一下試試
回復

使用道具 舉報

9#
ID:1109793 發表于 2024-9-16 08:40 | 只看該作者
老董 發表于 2024-9-15 20:09
P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;

他包含的是STC15,默認好像就標準IO的吧
回復

使用道具 舉報

10#
ID:352736 發表于 2024-9-16 10:04 來自手機 | 只看該作者
xiaobendan001 發表于 2024-9-15 14:35
軟件模擬了一下,不用刪除,也好用啊,話說你這都沒有消斗,是不是和按鍵抖動有關?

不刪除的話按k1和k2計數按鍵沒反應,要把k3按鍵這段程序刪除按k1和k2計數按鍵才能正常計數,k3按鍵原程序是復位按鍵
回復

使用道具 舉報

11#
ID:352736 發表于 2024-9-16 12:02 來自手機 | 只看該作者
xiaobendan001 發表于 2024-9-15 14:35
軟件模擬了一下,不用刪除,也好用啊,話說你這都沒有消斗,是不是和按鍵抖動有關?

大師程序需要改那里?麻煩指點一下!
回復

使用道具 舉報

12#
ID:849913 發表于 2024-9-16 23:16 | 只看該作者
else if(K3==0)
            {
                    if(flag_KEY==1)//按鍵只響應1次
                    {
                            flag_KEY=0;
                            if(Num>0)
                            {
                                    Num=0;
                            }
                    }
            }
你的程序沒問題 檢查一下硬件 是不是這個按鍵漏電了 程序一直認為你是按住了K3 這樣flag_KEY==1的機會就沒有了 你可以用萬用表測一下K3的電壓和K1 K2是不是一樣 就可以判斷出來
回復

使用道具 舉報

13#
ID:965189 發表于 2024-9-17 08:41 來自手機 | 只看該作者
if(Num>0);{Num=0;} 這里就是要Num永遠等于0。
回復

使用道具 舉報

14#
ID:1109793 發表于 2024-9-17 10:46 | 只看該作者
君工創 發表于 2024-9-17 08:41
if(Num>0);{Num=0;} 這里就是要Num永遠等于0。

人家前邊有條件的。
不過實際上這個復位按鍵就是清零按鍵。這個if是多此一舉的,直接num = 0;就好了嘛。
不過就算有if(num>0)這個脫褲子放屁的舉動,也不影響結果,軟件仿真是對的。
如12樓所說倒是有可能,但是有個問題,樓主剛開始是把K1和K3定義在一個IO上面了,這樣這個說法似乎就不成立了。
回復

使用道具 舉報

15#
ID:352736 發表于 2024-9-17 11:36 | 只看該作者
老董 發表于 2024-9-16 23:16
else if(K3==0)
            {
                    if(flag_KEY==1)//按鍵只響應1次

檢查了沒有漏電,現在把單片機的引腳懸空都是一樣的結果
回復

使用道具 舉報

16#
ID:352736 發表于 2024-9-17 11:42 | 只看該作者
君工創 發表于 2024-9-17 08:41
if(Num>0);{Num=0;} 這里就是要Num永遠等于0。

這個K3是復位按鍵則斷程序不知要怎么該了,大師麻煩指點一下!
回復

使用道具 舉報

17#
ID:965189 發表于 2024-9-17 12:02 | 只看該作者
把第三個按鍵這里改一下,

if(Num>9999);
{
  Num=0;
}
回復

使用道具 舉報

18#
ID:965189 發表于 2024-9-17 12:35 來自手機 | 只看該作者
不好意思,沒詳細看。按鍵加和復位鍵不能共用。重新定義這兩個鍵的其中一個到其它端口就不用改代碼。
回復

使用道具 舉報

19#
ID:352736 發表于 2024-9-17 13:24 來自手機 | 只看該作者
xiaobendan001 發表于 2024-9-17 10:46
人家前邊有條件的。
不過實際上這個復位按鍵就是清零按鍵。這個if是多此一舉的,直接num = 0;就好了嘛。 ...

原程序K1和K3定義在一個IO口了,我把K1改在另外的IO口把K3這段程序刪了加減按鍵計數都是正常的,把K3的這段程序加入就不正常了,加減按鍵都沒有反應K3還是定義在原來的p3^2
回復

使用道具 舉報

20#
ID:352736 發表于 2024-9-17 13:34 來自手機 | 只看該作者
君工創 發表于 2024-9-17 12:35
不好意思,沒詳細看。按鍵加和復位鍵不能共用。重新定義這兩個鍵的其中一個到其它端口就不用改代碼。

大師這個是原代碼我直接貼出來的,實際我改了IO口的,把K1改在P3^4   K3還是在原來的P3^2
FMQ改在P3^7,因為蜂鳴器沒有用就隨便改了個IO口
回復

使用道具 舉報

21#
ID:965189 發表于 2024-9-17 13:59 | 只看該作者
除了改代碼,實際電路也要改到相應的端口上。
回復

使用道具 舉報

22#
ID:161164 發表于 2024-9-17 15:03 | 只看該作者
wl20020807 發表于 2024-9-17 13:34
大師這個是原代碼我直接貼出來的,實際我改了IO口的,把K1改在P3^4   K3還是在原來的P3^2
FMQ改在P3^7, ...

量一下K3的電壓
回復

使用道具 舉報

23#
ID:1109793 發表于 2024-9-17 15:21 | 只看該作者
wl20020807 發表于 2024-9-17 13:24
原程序K1和K3定義在一個IO口了,我把K1改在另外的IO口把K3這段程序刪了加減按鍵計數都是正常的,把K3的這 ...

你可以嘗試在main開始的地方加上一個num = 50;然后運行看看實際上顯示多少,如果是0,說明你的key3的部分代碼是有作用的。
回復

使用道具 舉報

24#
ID:849913 發表于 2024-9-17 17:19 | 只看該作者
不信邪的我用搭載stc15的板子測試也可以運行啊 你再查查硬件吧
回復

使用道具 舉報

25#
ID:352736 發表于 2024-9-17 18:48 | 只看該作者

只要加了K3這段程序,K1(加鍵)為高電平,K2(減鍵)為低電平,KI K2按鍵都沒有反應,把K3這段程序刪了,K1 K2 都為高電平了,K1 K2按鍵都正常可以計數,不知程序是那里出錯了
回復

使用道具 舉報

26#
ID:1109793 發表于 2024-9-18 07:44 | 只看該作者
wl20020807 發表于 2024-9-17 18:48
只要加了K3這段程序,K1(加鍵)為高電平,K2(減鍵)為低電平,KI K2按鍵都沒有反應,把K3這段程序刪了 ...

你的意思是加了這段代碼,K2就等于一直按著了?
回復

使用道具 舉報

27#
ID:352736 發表于 2024-9-18 22:45 來自手機 | 只看該作者
xiaobendan001 發表于 2024-9-18 07:44
你的意思是加了這段代碼,K2就等于一直按著了?

對 ,加了k3這段程序,k2 (減。┚褪堑蛪浩搅耍
回復

使用道具 舉報

28#
ID:352736 發表于 2024-9-18 22:55 來自手機 | 只看該作者
老董 發表于 2024-9-17 17:19
不信邪的我用搭載stc15的板子測試也可以運行啊 你再查查硬件吧

大師有電路圖嗎?我也是用的stc15w408as搭載的板子但是它就是無法運行
回復

使用道具 舉報

29#
ID:352736 發表于 2024-9-18 23:02 來自手機 | 只看該作者
老董 發表于 2024-9-17 17:19
不信邪的我用搭載stc15的板子測試也可以運行啊 你再查查硬件吧

這是原電路圖,電路圖IO口和程序IO口對不上,我實際把實際電路按照程序IO口改了還是不行

7b3859ae84ca7c9d567f1b427a088fac1cb6bb8baeb703213359b4ac2fdc3f79.0.JPG (290.53 KB, 下載次數: 10)

7b3859ae84ca7c9d567f1b427a088fac1cb6bb8baeb703213359b4ac2fdc3f79.0.JPG
回復

使用道具 舉報

30#
ID:352736 發表于 2024-9-18 23:06 來自手機 | 只看該作者
老董 發表于 2024-9-17 17:19
不信邪的我用搭載stc15的板子測試也可以運行啊 你再查查硬件吧

大師你的stc15芯片的晶振設置的多少?我設置的11.0592MHZ
回復

使用道具 舉報

31#
ID:1109793 發表于 2024-9-19 06:54 | 只看該作者
wl20020807 發表于 2024-9-18 22:45
對 ,加了k3這段程序,k2 (減健)就是低壓平了,

給他加個上拉電阻怎樣?
回復

使用道具 舉報

32#
ID:352736 發表于 2024-9-21 11:13 | 只看該作者
xiaobendan001 發表于 2024-9-19 06:54
給他加個上拉電阻怎樣?

加了也一樣,還是一樣沒有反應
回復

使用道具 舉報

33#
ID:352736 發表于 2024-9-21 18:59 來自手機 | 只看該作者
void keyscan()
{
        if(K1==0)
        {
                if(flag_KEY==1)//?????1?
                {
                        flag_KEY=0;

                       {if(Num==9999)Num=0;}
                        {
                                Num++;
                        }
                }
        }
        else if(K2==0)
        {
                if(flag_KEY==1)//?????1?
                {
                        flag_KEY=0;

                       {if(Num==0)Num=9999;}
                        {
                                Num--;
                        }
                }
        }
                                 else if(K3==0)
            {
                    if(flag_KEY==1)//?????1?
                    {
                            flag_KEY=0;

                            {
                                    Num=0;
                            }
                    }
            }
                                 
                        
                                 
  else//????
  {      
          flag_KEY=1;
  }
}
回復

使用道具 舉報

34#
ID:352736 發表于 2024-9-21 19:09 來自手機 | 只看該作者
  while(1)
        {
                display();
                keyscan();
                delay_ms(10);
                if(Num>=100)
                {
                        FMQ=0;
                }
                if(Num>=101)
                {
                        FMQ=1;
                }
        }
}
回復

使用道具 舉報

35#
ID:352736 發表于 2024-9-23 00:43 來自手機 | 只看該作者
wl20020807 發表于 2024-9-21 19:09
while(1)
        {
                display();

各位大師幫忙看下這個蜂鳴器程序怎么改下讓計數器只是每計滿100的整數時蜂鳴器響一次 ,加減計數都一樣。
回復

使用道具 舉報

36#
ID:352736 發表于 2024-9-23 00:44 來自手機 | 只看該作者
wl20020807 發表于 2024-9-21 18:59
void keyscan()
{
        if(K1==0)

程序這樣改了可以正常計數了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久尿 | 国产乱码久久久 | 成人综合在线视频 | 国产成人精品福利 | 日韩福利一区 | 国产综合久久久久久鬼色 | 欧美日韩精品一区二区天天拍 | 久久久久久久久淑女av国产精品 | 国产精品久久久久久久久久妇女 | 中文在线一区二区 | 亚洲在线视频 | www.精品国产 | 四虎影| 久久精彩| 中文字幕日韩一区 | 中国一级特黄真人毛片 | 91porn国产成人福利 | www.夜夜草| 日韩一区和二区 | 精品国偷自产在线 | 久久综合久久久 | 亚洲精品一级 | 国产精品久久久久久婷婷天堂 | 8x国产精品视频一区二区 | 日韩视频在线一区二区 | 久久国产精品一区 | 免费一级片| 伊人网综合 | 日韩电影中文字幕在线观看 | 成人性视频免费网站 | 久久国产精品亚洲 | 韩日精品在线观看 | 在线播放一区二区三区 | 国产精品一区二区三区久久 | 99精品免费| 欧美综合一区二区三区 | 激情欧美日韩一区二区 | 91热爆在线观看 | 国产在线精品一区二区三区 | 97精品超碰一区二区三区 | 免费观看a级毛片在线播放 黄网站免费入口 |