单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 341|回复: 3
收起左侧

控制单个单片机IO的按键+定时器10ms定时器程序

[复制链接]
5100103 发表于 2019-1-5 16:16 | 显示全部楼层 |阅读模式
/*刚刚开始学习AVR单片机,
*把学习到的知识和大家分享。有错误或者更好的写法,欢迎交流。
*方便新手学习,我都尽可能的注释
*/




#include <iom16v.h>
#include <macros.h>
#include <stdio.h>                        //标准输入输出头文件
#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中断函数
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开始++,起到延时给按键去抖的作用
        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()   // 定时器1初始化
{
        TCCR1B=0X03;   //64分频
        TIFR=0X01;
        TIMSK=0X04;
        TCNT1H=0XFB;   //10ms
        TCNT1L=0X1D;
        SREG|=BIT(7);
}
void main()
{
   port_init();  //I/O初始化函数
   init_timer1();//定时器初始化函数
while(1)
{               
         if(a==0xff){LED_P0RT=0x00;} //PA口全部输出低
         if(a==0x00){LED_P0RT=0xff;} //PA口全部输出低
  }
}


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

 楼主| 5100103 发表于 2019-1-5 16:16 | 显示全部楼层
10ms定时.....标题写错了
回复

使用道具 举报

lanyue51hei 发表于 2019-1-7 17:57 来自手机 | 显示全部楼层
用什么软件?
回复

使用道具 举报

 楼主| 5100103 发表于 2019-1-8 09:32 | 显示全部楼层

ICC     ,忘了注明编译环境了 - -
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机. 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

快速回复 返回顶部 返回列表