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

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

QQ登錄

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

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

STC單片機(jī)按鍵不能工作是什么原因?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:72649 發(fā)表于 2024-1-20 22:27 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "STC8H.h"
#include "intrins.h"


sbit key1 = P0^3 ;
sbit key2 = P5^4 ;
sbit key3 = P3^6 ;
sbit key4 = P3^7 ;       

sbit led1 = P2^4 ;
sbit led2 = P2^5 ;
sbit led3 = P2^2 ;
sbit led4 = P2^3 ;

sbit fmq = P3^2 ;
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}

void DelayXms(unsigned int x) //@11.0592MHz
{
        while (--x)
        {
   Delay1ms();
         }
}

unsigned char keyscan()
{
char x=0;
        if ( key1 == 0|key2 == 0|key3 == 0|key4 == 0)
  {
                DelayXms(10);
                if ( key1 == 0|key2 == 0|key3 == 0|key4 == 0)
                {
                if ( key1 == 0)        x=1;
                else if ( key2 == 0)        x=2;
    else if ( key3 == 0)        x=3;
                else         x=4;
                        while ( key1 == 0|key2 == 0|key3 == 0|key4 == 0);
                }
   }
        return(x);
}

void main ()
{              
              P0M0 = 0x07; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0xc0;
        P2M0 = 0xff; P2M1 = 0x00;
        P3M0 = 0x3c; P3M1 = 0x00;
//                          fmq = 0;
        while(1)
        {       
unsigned char y;
                 
                                y=keyscan();
                                               if(y!=0)       
                         {
                                 if(y==1) led1 = !led1;
         else if(y==2)led2 = !led2;
         else if(y==3)  led3 = !led3;       
         else          led4 = !led4;
                         }
                 }
}       

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

使用道具 舉報(bào)

沙發(fā)
ID:227818 發(fā)表于 2024-1-21 07:48 | 只看該作者
看了下STC的手冊(cè),STC8系列的單片機(jī),除 P3.0 和 P3.1 外,其余所有 IO 口上電后的狀態(tài)均為高阻輸入狀態(tài),用戶(hù)在使用 IO 口時(shí)必須先設(shè)置 IO口模式?闯绦颍玫降腎O口可以設(shè)為準(zhǔn)雙向,且是高電平狀態(tài),您試下。

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:227818 發(fā)表于 2024-1-21 07:56 | 只看該作者
我看您的按鍵口設(shè)成了推挽輸出?這樣它是不會(huì)變低的,如果您的按鍵口沒(méi)有限流電阻,說(shuō)不定會(huì)燒掉。
回復(fù)

使用道具 舉報(bào)

地板
ID:275826 發(fā)表于 2024-1-21 09:26 | 只看該作者
程序沒(méi)問(wèn)題,檢查硬件
回復(fù)

使用道具 舉報(bào)

5#
ID:72649 發(fā)表于 2024-1-21 18:28 | 只看該作者
newlined 發(fā)表于 2024-1-21 07:56
我看您的按鍵口設(shè)成了推挽輸出?這樣它是不會(huì)變低的,如果您的按鍵口沒(méi)有限流電阻,說(shuō)不定會(huì)燒掉。

IO口設(shè)置沒(méi)問(wèn)題啊
回復(fù)

使用道具 舉報(bào)

6#
ID:72649 發(fā)表于 2024-1-21 18:29 | 只看該作者
newlined 發(fā)表于 2024-1-21 07:48
看了下STC的手冊(cè),STC8系列的單片機(jī),除 P3.0 和 P3.1 外,其余所有 IO 口上電后的狀態(tài)均為高阻輸入狀態(tài), ...

         P0M0 = 0x07; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0xc0;
        P2M0 = 0xff; P2M1 = 0x00;
        P3M0 = 0x3c; P3M1 = 0x00;
沒(méi)問(wèn)題啊
回復(fù)

使用道具 舉報(bào)

7#
ID:227818 發(fā)表于 2024-1-21 21:42 | 只看該作者
P0M0 = 0x00; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0x00;
        P2M0 = 0x00; P2M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
這樣試試
回復(fù)

使用道具 舉報(bào)

8#
ID:227818 發(fā)表于 2024-1-21 21:46 | 只看該作者
P0=0xff;P2=0xff;P3=0xff;P5=0xff;
回復(fù)

使用道具 舉報(bào)

9#
ID:72649 發(fā)表于 2024-1-22 06:33 | 只看該作者
newlined 發(fā)表于 2024-1-21 21:42
P0M0 = 0x00; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0x00;
        P2M0 = 0x00; P2M1 = 0x00;

也是沒(méi)有用的
回復(fù)

使用道具 舉報(bào)

10#
ID:72649 發(fā)表于 2024-1-22 06:34 | 只看該作者
newlined 發(fā)表于 2024-1-21 21:46
P0=0xff;P2=0xff;P3=0xff;P5=0xff;

這樣也是沒(méi)有反應(yīng)
回復(fù)

使用道具 舉報(bào)

11#
ID:72649 發(fā)表于 2024-1-22 06:37 | 只看該作者
newlined 發(fā)表于 2024-1-21 07:48
看了下STC的手冊(cè),STC8系列的單片機(jī),除 P3.0 和 P3.1 外,其余所有 IO 口上電后的狀態(tài)均為高阻輸入狀態(tài), ...

              P0M0 = 0x00; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0x00;
        P2M0 = 0x00; P2M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
IO口設(shè)為準(zhǔn)雙向,也是,一樣的
回復(fù)

使用道具 舉報(bào)

12#
ID:712072 發(fā)表于 2024-1-22 08:47 | 只看該作者
是不是|改成||
回復(fù)

使用道具 舉報(bào)

13#
ID:712097 發(fā)表于 2024-1-23 10:58 | 只看該作者
發(fā)硬件原理圖看下,按鍵IO要上拉。
回復(fù)

使用道具 舉報(bào)

14#
ID:72649 發(fā)表于 2024-1-23 12:40 來(lái)自手機(jī) | 只看該作者
chxelc 發(fā)表于 2024-1-23 10:58
發(fā)硬件原理圖看下,按鍵IO要上拉。

原理圖已發(fā)

Screenshot_2024_0123_123846.png (26.01 KB, 下載次數(shù): 69)

Screenshot_2024_0123_123846.png
回復(fù)

使用道具 舉報(bào)

15#
ID:72649 發(fā)表于 2024-1-23 12:43 來(lái)自手機(jī) | 只看該作者
tyrl800 發(fā)表于 2024-1-21 09:26
程序沒(méi)問(wèn)題,檢查硬件

/*按鍵K1K2加減數(shù)字?jǐn)?shù)碼管顯示  按鍵K3K4加減數(shù)碼管顯示
#include "STC8H.h"
#include "intrins.h"
unsigned char NixieTable[]={ 0x03,/*0*/
        0x9F,/*1*/
        0x25,/*2*/
        0x0D,/*3*/
        0x99,/*4*/
        0x49,/*5*/
        0x41,/*6*/
        0x1F,/*7*/
        0x01,/*8*/
        0x09,/*9*/};
sbit k1 = P0^3 ;
sbit k2 = P5^4 ;
sbit k3 = P3^6 ;
sbit k4 = P3^7 ;

unsigned int Num,Num1;
      
void Delay1ms()                //@11.0592MHz
{
        unsigned char i, j;

        i = 15;
        j = 90;
        do
        {
                while (--j);
        } while (--i);
}

void DelayXms(unsigned int x) //@11.0592MHz
{
        while (--x)
        {
   Delay1ms();
         }
}

void Led_Seg(unsigned int date) //顯示函數(shù)
{      
        unsigned int a,b,c;
          a=date/100%10;                        //求百位
          b=date/10%10;                                  //求十位
          c=date%10;                                          //求個(gè)位

          P14=1;P15=1;P33=1;
             P2=NixieTable[a];//百位
          P14=0;P15=1;P33=1;
          DelayXms(5);
                       
          P14=1;P15=1;P33=1;  
         P2=NixieTable;//十位
          P15=0;P33=1;P14=1;
          DelayXms(5);


                P14=1;P15=1;P33=1;  
        P2=NixieTable[c];//個(gè)位
          P33=0;P14=1;P15=1;
          DelayXms(5);
}

void Led_Seg1(unsigned int date) //顯示函數(shù)
{      
        unsigned int a,b,c;
          a=date/100%10;                        //求百位
          b=date/10%10;                                  //求十位
          c=date%10;                                          //求個(gè)位

          P00=1;P01=1;P02=1;
             P2=NixieTable[a];//百位
          P00=0;P01=1;P02=1;
          DelayXms(5);
                       
          P00=1;P01=1;P02=1;   
         P2=NixieTable;//十位
         P00=1;P01=0;P02=1;
          DelayXms(5);


                P00=1;P01=1;P02=1;   
        P2=NixieTable[c];//個(gè)位
         P00=1;P01=1;P02=0;
          DelayXms(5);
}

unsigned char keyscan()
{
   char x=0;
        if ( k1 == 0|k2 == 0|k3 == 0|k4 == 0)
  {
                DelayXms(10);
                if (  k1 == 0|k2 == 0|k3 == 0|k4 == 0)
                {
                if (k1 == 0)        x=1;
                else if (k2 == 0)        x=2;
    else if (k3 == 0)        x=3;
                else         x=4;
                        while ( k1 == 0|k2 == 0|k3 == 0|k4 == 0);
                }
   }
        return(x);
}

void Timer0_init()  //1ms
{
        AUXR &= 0x7F;                        //定時(shí)器時(shí)鐘12T模式
        TMOD &= 0xF0;                        //設(shè)置定時(shí)器模式
                                TL0 = 0xCD;                                //設(shè)置定時(shí)初始值
                                TH0 = 0xD4;                                //設(shè)置定時(shí)初始值
        TF0 = 0;                                //清除TF0標(biāo)志
        TR0 = 1;                                //定時(shí)器0開(kāi)始計(jì)時(shí)
        ET0 = 1;      //開(kāi)T0中斷
        EA=1;      
}
void main ()
{
              P0M0 = 0x00; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0xc0;
        P2M0 = 0x00; P2M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
        k1=k2=k3=k4=1;
       Num=123;Num1=456;
        Timer0_init() ;
      
        while(1)
        {

                                        unsigned char y;        

                                y=keyscan();
                                        if(y!=0)      
                         {
                                 if(y==1)      Num++;
         else if(y==2) Num--;
         else if(y==3) Num1 ++;      
         else         Num1--;         
                         }

                 }
         }


void TM1_Isr0()interrupt 1   //數(shù)碼管掃描定時(shí)器0      
{   
         
        unsigned int s;

        if(++s>1)
  {      s=0;
      Led_Seg(Num);P00=1;
                        Led_Seg1(Num1);
}
}
看看這個(gè)四個(gè)按鍵分別控制兩組三位數(shù)碼管加減
回復(fù)

使用道具 舉報(bào)

16#
ID:161164 發(fā)表于 2024-1-23 21:25 | 只看該作者
不說(shuō)一下數(shù)碼管程序顯示亮度不一致原因是什么嗎?

中斷里不要用延時(shí)!
中斷里不要用延時(shí)!
中斷里不要用延時(shí)!
回復(fù)

使用道具 舉報(bào)

17#
ID:72649 發(fā)表于 2024-1-23 23:03 來(lái)自手機(jī) | 只看該作者
lkc8210 發(fā)表于 2024-1-23 21:25
不說(shuō)一下數(shù)碼管程序顯示亮度不一致原因是什么嗎?

中斷里不要用延時(shí)!

消隱問(wèn)題
回復(fù)

使用道具 舉報(bào)

18#
ID:517951 發(fā)表于 2024-1-25 13:07 | 只看該作者
要把IO口設(shè)置為準(zhǔn)雙向口, 然后接5K-10K的上拉電阻, 通過(guò)按鍵接地, 當(dāng)按鍵按下后, IO電平為低, 程序讀取IO口電平, 就能判斷是否有按鍵被按下了.
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧产日产国产精品视频 | 色婷婷国产精品 | 人人干人人舔 | 欧美精品一区二区在线观看 | 国产一级特黄真人毛片 | 亚洲人成在线观看 | 国产精品视频区 | 99精品网| 精品成人| 国产精品免费高清 | 亚洲精品av在线 | 91网站在线看 | 国产又色又爽又黄又免费 | 国产精品久久在线观看 | 久久tv在线观看 | 九九热在线观看 | 中文字幕在线看第二 | 国产精品亚洲精品日韩已方 | 天天拍夜夜爽 | 在线免费观看a级片 | 久草新在线 | 亚洲精品9999久久久久 | 日韩午夜在线观看 | 亚洲国产精品久久久久久 | 成人在线免费看 | 国产午夜av片| 欧美综合色 | 一区二区三区不卡视频 | 亚洲网站在线观看 | 成人亚洲精品久久久久软件 | 国产不卡在线观看 | 亚洲国产午夜 | 日韩av在线不卡 | 国产精品99久久免费观看 | 中文字幕免费视频 | 伊人久久大香线 | a毛片 | 日本在线网站 | 午夜码电影 | 狠狠色网 | 国产一级在线视频 |