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

QQ登錄

只需一步,快速開始

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

控制單個(gè)單片機(jī)IO的按鍵+定時(shí)器10ms定時(shí)器程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:351872 發(fā)表于 2019-1-5 16:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/*剛剛開始學(xué)習(xí)AVR單片機(jī),
*把學(xué)習(xí)到的知識(shí)和大家分享。有錯(cuò)誤或者更好的寫法,歡迎交流。
*方便新手學(xué)習(xí),我都盡可能的注釋
*/




#include <iom16v.h>
#include <macros.h>
#include <stdio.h>                        //標(biāo)準(zhǔn)輸入輸出頭文件
#define LED_DDR  DDRA           //LED接PA0~PA7     
#define LED_P0RT PORTA          //指示燈
/*********************************
*按鍵定義
*******************************/
#define K1      PINC & (1<<PC0)               //位讀取   PC0        可以讀取K1的電壓值
#define K2      PINC & (1<<PC1)               //位讀取   PC1
#define K3      PINC & (1 << PC2)             //位讀取   PC2
#define K4      PINC & (1 << PC3)             //位讀取   PC3
#define K5      PINC & (1 << PC4)             //位讀取   PC4
#define K6      PINC & (1 << PC5)             //位讀取   PC5
#define K7      PINC & (1 << PC6)             //位讀取   PC6
#define K8      PINC & (1 << PC7)             //位讀取   PC7                                                   
unsigned char key_s,biaozhi;
void port_init(void)                                        //IO端口初始化
{
                DDRC=0xFF;         
                PORTC=0xff;        
                DDRB=0xff;
                PORTB=0xff;
                DDRD=0xff;
                PORTD=0xff;
                DDRA=0xff;
                PORTA=0xff;
}
#pragma interrupt_handler timer1_ovf_isr:15 //dingsh中斷函數(shù)
void timer1_ovf_isr()
{
    TCNT1H=0XFB;  //賦初值定義0.01s
    TCNT1L=0X1D;
        /***************************按鍵程序**************************************/
        if(((K1)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}   //按鍵按下 key_s開始++,起到延時(shí)給按鍵去抖的作用
        if(((K2)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}
        if(((K3)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}
        if(((K4)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}
        if(((K5)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}
        if(((K6)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}
        if(((K7)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}
        if(((K8)==0)&&(biaozhi==0)){key_s++;if(key_s>=2){biaozhi=1;key_s=0;a=~a;}}


        
        if(((K1)!=0)&&((K2)!=0)&&((K3)!=0)&&((K4)!=0)&&((K5)!=0)&&((K6)!=0)&&((K7)!=0)&&((K8)!=0))
         {biaozhi=0;key_s=0;} //按鍵判彈起
         if(key_s>=4){key_s=0;biaozhi=1;}


}


void init_timer1()   // 定時(shí)器1初始化
{
        TCCR1B=0X03;   //64分頻
        TIFR=0X01;
        TIMSK=0X04;
        TCNT1H=0XFB;   //10ms
        TCNT1L=0X1D;
        SREG|=BIT(7);
}
void main()
{
   port_init();  //I/O初始化函數(shù)
   init_timer1();//定時(shí)器初始化函數(shù)
while(1)
{               
         if(a==0xff){LED_P0RT=0x00;} //PA口全部輸出低
         if(a==0x00){LED_P0RT=0xff;} //PA口全部輸出低
  }
}


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:351872 發(fā)表于 2019-1-5 16:16 | 只看該作者
10ms定時(shí).....標(biāo)題寫錯(cuò)了
回復(fù)

使用道具 舉報(bào)

板凳
ID:223761 發(fā)表于 2019-1-7 17:57 來自手機(jī) | 只看該作者
用什么軟件?
回復(fù)

使用道具 舉報(bào)

地板
ID:351872 發(fā)表于 2019-1-8 09:32 | 只看該作者

ICC     ,忘了注明編譯環(huán)境了 - -
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表