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

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

QQ登錄

只需一步,快速開始

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

求大大們給改下程序 改的簡(jiǎn)短些 本人剛學(xué)單片機(jī)知道的不多

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:65675 發(fā)表于 2014-11-30 16:52 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如題 感覺太雜亂了 想讓它簡(jiǎn)短一些

#include<reg52.h>
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit K5=P1^4;
sbit K6=P1^5;
sbit K7=P1^6;
sbit K8=P1^7;
void delay(int n)
{
     int i,j;
  for(i=0;i<n;i++)
     for(j=0;j<120;j++);
}
void main()
{
     while(1)
  {
       if(K1==0)
    {      
     delay(100);
     if(K1==1)
     {
         P20=~P20;
      delay(100);
     }     
    }
    if(K2==0)
    {      
     delay(100);
     if(K2==1)
     {
         P21=~P21;
      delay(100);
     }     
    }
    if(K3==0)
    {      
     delay(100);
     if(K3==1)
     {
         P22=~P22;
      delay(100);
     }     
    }
    if(K4==0)
    {      
     delay(100);
     if(K4==1)
     {
         P23=~P23;
      delay(100);
     }     
    }
    if(K5==0)
    {      
     delay(100);
     if(K5==1)
     {
         P24=~P24;
      delay(100);
     }     
    }
    if(K6==0)
    {      
     delay(100);
     if(K6==1)
     {
         P25=~P25;
      delay(100);
     }     
    }
    if(K7==0)
    {      
     delay(100);
     if(K7==1)
     {
         P26=~P26;
      delay(100);
     }     
    }
    if(K8==0)
    {      
     delay(100);
     if(K8==1)
     {
         P27=~P27;
      delay(100);
     }     
    }
  }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2014-11-30 17:54 | 只看該作者
這個(gè)程序確實(shí)很不好 重復(fù)的代碼 太多  他要實(shí)現(xiàn)的大致功能能說一下嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:65675 發(fā)表于 2014-11-30 18:09 | 只看該作者
admin 發(fā)表于 2014-11-30 17:54
這個(gè)程序確實(shí)很不好 重復(fù)的代碼 太多  他要實(shí)現(xiàn)的大致功能能說一下嗎

8個(gè)獨(dú)立按鍵控制8個(gè)繼電器 每個(gè)按鍵控制1個(gè)繼電器的開合 按鍵按下放開后繼電器吸合或者開放(按鍵按下松手后才有動(dòng)作)
回復(fù)

使用道具 舉報(bào)

地板
ID:66032 發(fā)表于 2014-12-1 08:51 | 只看該作者
我試寫了一個(gè), 沒有51這樣的板,也沒辦法調(diào)試, 你試一下看有問題沒?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

const uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay(uint ms)
{
  uint m,n;
  for(m=0;m<ms;m++)
   for(n=0;n<1140;n++);
}

void Key_scan(void)
{
   uchar temp;
   temp=P1;
   temp=temp&0xff;
   if (temp!=0xff);
    {
      delay(10);
      temp=P1;
      temp=temp&0xff;
      if (temp!=0xff)
       {
         temp=P1;
         switch (temp)
          {
                     case 0xfe: P2=table[0]; break;
                 case 0xfd: P2=table[1]; break;
                case 0xfb: P2=table[2]; break;
                 case 0xf7: P2=table[3]; break;
                 case 0xef: P2=table[4]; break;
                 case 0xdf: P2=table[5]; break;
                 case 0xbf: P2=table[6]; break;
                 case 0x7f: P2=table[7]; break;
                 default: break;
               }
          while(temp!=0xff)
             {
               temp=P1;
               temp=temp&0x0f;
             }
       }
     }
}

void main()
{  
    P1=0xff;
    P2=0xff;
    while(1)
    {
      Key_scan();
      delay(10);
    }
}
回復(fù)

使用道具 舉報(bào)

5#
ID:66032 發(fā)表于 2014-12-1 08:53 | 只看該作者
有一句錯(cuò)了, 改了一下
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

const uchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void delay(uint ms)
{
  uint m,n;
  for(m=0;m<ms;m++)
   for(n=0;n<1140;n++);
}

void Key_scan(void)
{
   uchar temp;
   temp=P1;
   temp=temp&0xff;
   if (temp!=0xff);
    {
      delay(10);
      temp=P1;
      temp=temp&0xff;
      if (temp!=0xff)
       {
         temp=P1;
         switch (temp)
          {
                     case 0xfe: P2=table[0]; break;
                 case 0xfd: P2=table[1]; break;
                case 0xfb: P2=table[2]; break;
                 case 0xf7: P2=table[3]; break;
                 case 0xef: P2=table[4]; break;
                 case 0xdf: P2=table[5]; break;
                 case 0xbf: P2=table[6]; break;
                 case 0x7f: P2=table[7]; break;
                 default: break;
               }
          while(temp!=0xff)
             {
               temp=P1;
               temp=temp&0xff;
             }
       }
     }
}

void main()
{  
    P1=0xff;
    P2=0xff;
    while(1)
    {
      Key_scan();
      delay(10);
    }
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

6#
ID:66840 發(fā)表于 2014-12-1 09:26 | 只看該作者
#include<reg52.h>
#define key P1
#define relay P2

bit num = 1; //定義一個(gè)標(biāo)志位,用來判斷按鍵

void Delay(unsigned char xms) //延時(shí)函數(shù),延時(shí)X毫秒
{
        unsigned char j,n;
        for(j=xms; j>0; j--)
        {
                for(n=110; n>0; n--);
        }
}

void main()
{
        unsigned char temp, temp1, temp2; //定義3個(gè)臨時(shí)變量
       

        while(1)
        {       
               
       
                        if(num==1) //用來記錄兩次按鍵,按下的動(dòng)作標(biāo)志        
                        {
                                temp = key & 0xff; //用來檢測(cè)按鍵是否按下
                                if(~temp != 0) //判斷按鍵是否按下
                                {
                                        Delay(40);
                                        temp1 = temp;
                                        relay = temp1; //把按鍵按下的值給繼電器,使繼電器有動(dòng)作
                                        num = 0;
                                }
                        }
                   if (num==0)
                        {
                                temp = key & 0xff;
                                if(~temp != 0)
                                {
                                        Delay(40);
                                        temp2 = temp;                               
                                        num = 1;                               
                                         if  (temp2 != temp1) //用來判斷繼電器的動(dòng)作與上次是不是一樣
                                        {
                                                relay = temp2; //不一樣,繼電器器開始新的動(dòng)作
                                        }
                               else
                                        {
                                                relay = 0xff; //再次一樣,繼電器關(guān)閉
                                        }
                                }
                        }                       
                }               
}
回復(fù)

使用道具 舉報(bào)

7#
ID:66840 發(fā)表于 2014-12-1 10:13 | 只看該作者
#include<reg52.h>

sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit key7 = P1^6;
sbit key8 = P1^7;

sbit relay1 = P2^0;
sbit relay2 = P2^1;
sbit relay3 = P2^2;
sbit relay4 = P2^3;
sbit relay5 = P2^4;
sbit relay6 = P2^5;
sbit relay7 = P2^6;
sbit relay8 = P2^7;

void Delay(unsigned char xms) //延時(shí)函數(shù),延時(shí)X毫秒
{
        unsigned char j,n;
        for(j=xms; j>0; j--)
        {
                for(n=110; n>0; n--);
        }
}

void main()
{
        unsigned char i = 0;
        while(1)
        {
                i++;
                switch(i-1)
                {
                        case 0 : if(key1==0) {Delay(40);  relay1 = ~relay1;} break;
                        case 1 : if(key2==0) {Delay(40);  relay2 = ~relay2;} break;
                        case 2 : if(key3==0) {Delay(40);  relay3 = ~relay3;} break;
                        case 3 : if(key4==0) {Delay(40);  relay4 = ~relay4;} break;
                        case 4 : if(key5==0) {Delay(40);  relay5 = ~relay5;} break;
                        case 5 : if(key6==0) {Delay(40);  relay6 = ~relay6;} break;
                        case 6 : if(key7==0) {Delay(40);  relay7 = ~relay7;} break;
                        case 7 : if(key8==0) {Delay(40);  relay8 = ~relay8;} break;                       
                }
                if(i>8)
                i=0;               
        }       
}
回復(fù)

使用道具 舉報(bào)

8#
ID:65675 發(fā)表于 2014-12-1 10:28 | 只看該作者
樓上二位的程序都不符合要求,但是還是謝謝你們
回復(fù)

使用道具 舉報(bào)

9#
ID:48897 發(fā)表于 2014-12-1 11:05 | 只看該作者
回復(fù)

使用道具 舉報(bào)

10#
ID:66840 發(fā)表于 2014-12-1 12:16 | 只看該作者
#include<reg52.h>

sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit key7 = P1^6;
sbit key8 = P1^7;

sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
sbit led5 = P2^4;
sbit led6 = P2^5;
sbit led7 = P2^6;
sbit led8 = P2^7;

void Delay(unsigned char xms) //延時(shí)函數(shù),延時(shí)X毫秒
{
        unsigned char j,n;
        for(j=xms; j>0; j--)
        {
                for(n=110; n>0; n--);
        }
}

void main()
{
        unsigned char i = 0;
        while(1)
        {
                i++;
                switch(i-1)
                {
                        case 0 : if(key1==0) {Delay(1); if(key1==1) {Delay(1); led1 = ~led1;}} break;
                        case 1 : if(key2==0) {Delay(1); if(key2==1) {Delay(1); led2 = ~led2;}} break;
                        case 2 : if(key3==0) {Delay(1); if(key3==1) {Delay(1); led3 = ~led3;}} break;
                        case 3 : if(key4==0) {Delay(1); if(key4==1) {Delay(1); led4 = ~led4;}} break;
                        case 4 : if(key5==0) {Delay(1); if(key5==1) {Delay(1); led5 = ~led5;}} break;
                        case 5 : if(key6==0) {Delay(1); if(key6==1) {Delay(1); led6 = ~led6;}} break;
                        case 6 : if(key7==0) {Delay(1); if(key7==1) {Delay(1); led7 = ~led7;}} break;
                        case 7 : if(key8==0) {Delay(1); if(key8==1) {Delay(1); led8 = ~led8;}} break;                       
                }
                if(i>8)
                i=0;               
        }
       
       
}
這個(gè)是按鍵松開后有動(dòng)作

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

11#
ID:67992 發(fā)表于 2014-12-1 12:58 | 只看該作者
本帖最后由 dgahz 于 2014-12-1 13:25 編輯


回復(fù)

使用道具 舉報(bào)

12#
ID:67992 發(fā)表于 2014-12-1 13:22 | 只看該作者
本帖最后由 dgahz 于 2014-12-1 13:28 編輯

#include<reg52.h>
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;

void delay(int n)
{
     int i,j;
  for(i=0;i<n;i++)
     for(j=0;j<120;j++);
}
void main()
{
     while(1)
  {               
       if(P1!=0xff)
       {      
             delay(100);
             if(P1!=0xff);
             {        
                        
                 switch (P1)
                  {
                         case 0xfe:while(P1!=0xff); P20=~P20; break;
                         case 0xfd:while(P1!=0xff);P21=~P21;  break;
                         case 0xfb:while(P1!=0xff); P22=~P22; break;
                         case 0xf7:while(P1!=0xff); P23=~P23; break;
                         case 0xef:while(P1!=0xff); P24=~P24; break;
                         case 0xdf:while(P1!=0xff); P25=~P25; break;
                         case 0xbf:while(P1!=0xff); P26=~P26; break;
                         case 0x7f:while(P1!=0xff) P27=~P27;; break;
                         default: break;
                   }
                        
                 }
      }
  }
}

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

13#
ID:69862 發(fā)表于 2014-12-3 10:37 | 只看該作者
void KeyScan()
{
        static unsigned int ucKeyTimeCnt1;           //按鍵延時(shí)計(jì)數(shù)器
        static unsigned char ucKeyLock1 = 0;   //按鍵自鎖標(biāo)志位
        static unsigned char ucKeyFlag1 = 0;   //松手后觸發(fā)標(biāo)志位
        static unsigned char const_Key_Time1 = 500;        //按鍵去抖動(dòng)的時(shí)間變量 ,改變這里的變量,可以改變按鍵去抖動(dòng)的時(shí)間。

        if(Key_sr1 == 1)                                 //當(dāng)沒有按鍵按下時(shí),
        {
            ucKeyTimeCnt1 = 0;                         //按鍵延時(shí)計(jì)數(shù)器清零
                ucKeyLock1 = 0;                                 //自鎖標(biāo)志清零
               
                if(ucKeyFlag1 == 1)                         //當(dāng)有按鍵按下 ,并且松手后。觸發(fā)繼電器信號(hào)
                {
                    relay_dr = ~relay_dr;         //繼電器信號(hào)取反
                        ucKeyFlag1 = 0;                         //松手后觸發(fā)標(biāo)志清零,避免一直觸發(fā)。
                }                                                  

        }
        else if(ucKeyLock1 == 0)                 //自鎖標(biāo)志
        {
                ucKeyTimeCnt1++;                         //按鍵去抖動(dòng)時(shí)間計(jì)數(shù)器自加

                if(ucKeyTimeCnt1 >= const_Key_Time1) //當(dāng)去抖動(dòng)延時(shí)時(shí)間到了后,按鍵依然按下 。
                {
                        ucKeyTimeCnt1 = 0;                                 //按鍵去抖動(dòng)延時(shí)計(jì)數(shù)器清零,為下一次延時(shí)做準(zhǔn)備
                        ucKeyFlag1 = 1;                                         //松手后觸發(fā)標(biāo)志置1,表示松手后可以觸發(fā)了。
                        ucKeyLock1 = 1;                                         //自鎖標(biāo)志置1,避免一直觸發(fā)

                }
        }

}
我只寫了一個(gè)按鍵的程序,測(cè)試后可以滿足你的要求,如需8個(gè)按鍵,就需要復(fù)制就可以了。我不在乎C程序的長(zhǎng)與短,我只在乎一個(gè)清晰的思路,方便調(diào)試和以后的修改。。。。。。

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区三区四区 | 日韩成人在线观看 | 中文字幕国产一区 | 日韩一区在线观看视频 | 91久久国产综合久久 | 日韩欧美视频免费在线观看 | 国产亚洲一区二区三区 | 欧美一区二区三区四区视频 | 亚洲一区二区三区免费在线 | 91精品国产综合久久国产大片 | 天堂在线www | 亚洲一区二区日韩 | 国产视频二区 | 亚洲午夜精品一区二区三区 | 日韩成人 | 日韩一级 | 久久久91精品国产一区二区三区 | 综合九九 | 国产欧美日韩精品一区 | 97久久超碰 | 中文字幕在线播放第一页 | 久久国产精品久久 | 精品不卡| ririsao久久精品一区 | 99成人| xx视频在线 | 国产精品国色综合久久 | 九九伦理电影 | 99亚洲国产精品 | 欧美亚洲日本 | 男女国产视频 | 国产美女在线观看 | 免费看91 | 人人九九 | 亚洲综合在线播放 | 国产精品福利网站 | 黄瓜av| 不卡一二区 | 久久久噜噜噜久久中文字幕色伊伊 | a国产视频 | 成人性视频免费网站 |