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

2019-10-21来源: 51hei关键字:单片机  IO  定时器

/*刚刚开始学习AVR单片机,
*把学习到的知识和大家分享。有错误或者更好的写法,欢迎交流。
*方便新手学习,我都尽可能的注释
*/




#include
#include
#include                         //标准输入输出头文件
#define LED_DDR  DDRA           //LED接PA0~PA7     
#define LED_P0RT PORTA          //指示灯
/*********************************
*按键定义
*******************************/
#define K1      PINC & (1<#define K2      PINC & (1<#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口全部输出低
  } 
}

关键字:单片机  IO  定时器 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477790.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:Atmega16单片机实验:DS18B20和ad采集显示程序
下一篇:avr单片机+RFID的门禁系统

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

通过软件程序消除单片机由外界干扰产生的异常复位的影响
前言:首先简单介绍一下外界干扰对单片机的2点影响:(1)异常复位在刚上电或外部复位引脚为复位电平时,单片机系统进入一个预定的状态——复位状态。在复位状态下,控制寄存器的值是确定的,而数据寄存器的值是随机的,程序计数器也被赋予一个确定的值。但多数情况下控制寄存器的初始值并非我们需要的,不确定的数据寄存器的值也是无法使用的,需要初始化把它们设置成一个预期的、确定的且安全的状态。初始化完成后,系统进入待命状态。系统在工作过程中,因来自电源的干扰,也可能执行复位操作,称为异常复位,这时如不采取措施,记录工作过程的数据又会被初始化,从而造成异常停机。(2)程序跑飞所谓程序跑飞是程序没按预定的顺序执行。因为单片机执行了不该执行的指令,该指令
发表于 2019-11-16
通过软件程序消除单片机由外界干扰产生的异常复位的影响
AVR单片机改造遥控车
利用玩具遥控车的高频发射电路和高频接收电路,结合单片机进行数据传输,模拟两通道比例控制遥控器。发射端用ATTINY24从TX的8号脚控制玩具遥控器的高频发射部分接收端用ATTINY24从RX2的3号脚接收信号。然后PWM控制遥控车的两个电机,一个由电位器反馈。另一个由测速盘反馈。数据结构0 高电平100us,低电平300us1 高电平200us,低电平200us数据帧结构16位为一个包起始2位(10),地址2位,数据10位,结束2位(01)每5个包为一个循环1号包 全0包,不含起始结束,用于接收端复位。2,3号包 地址01号数据。4,5号包 地址02号数据。纠错采用重复校验,当收到两组数据相同时确认数据有效发送侧任务 读A通道
发表于 2019-11-16
AVR单片机改造遥控车
avr单片机双通信C程序
将下面2个程序分别烧录进2个单片机中.单片机U1//ICC-AVR application builder : 2013-6-14 10:17:58// Target : M16// Crystal: 8.0000Mhz#include <iom16v.h>#include <macros.h>#define LED1_ON PORTD|=(1<<PD4)#define LED1_OFF PORTD&=~(1<<PD4)#define LED2_ON PORTD|=(1<<PD5)#define LED2_OFF PORTD&=~(1<<PD5
发表于 2019-11-16
AVR单片机8路AD如何采样
//*********ATmega128,8channel ADC sampling + LED display + USART*******#include <iom128v.h>#include <macros.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define FOSC   1843200#define baud   9600#define MyUBBR   (uint)((ulong)FOSC/(16*(ulong)b
发表于 2019-11-16
DHT11温湿度传感器的AVR单片机例程
; Delay_10us();    Delay_10us();    Delay_10us();    Delay_10us();  //主机设为输入 判断从机响应信号   //P2_0=1;    //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行      // if(!P2_0)   //T !      if(COM_R)U8FLAG=1;   
发表于 2019-11-16
DHT11温湿度传感器的AVR单片机例程
PIC单片机调试心得
我是一位初学者,pic初学者,但是在单片机行当已经混迹多年了。说句实话,c开发环境都大同小异,只不过烧写和在线仿真大同小异。钻研了两天,收到了很多回应和启发。下面应soso的请求,把最近的调试心得和大家分享1、 先说说我要做的东西说来惭愧,这是临时的一个小任务,做一个采集和现实的部分,用两路ad采集模拟量,通过开关进行切换,简单的说就是开关打开,显示一路模拟量;开关关闭,显示另一路模拟量。主电路及其简单,我就直接说了,不附图了。电源通过一个负载(滑动变阻器就可以)回到电源负极,在回路中接入一个电流传感器,实时采集电流信号(如果条件不允许,也可以用康铜丝或者一个大瓦数小数值的采样电阻采集电流信号。然后通过放大,隔离后送入单片机
发表于 2019-11-16
PIC单片机调试心得
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved