历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | 控制单个单片机IO的按键+定时器10ms定时器程序

2019-10-21 来源:51hei

/*刚刚开始学习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口全部输出低
  } 
}

推荐阅读

史海拾趣

Altech公司的发展小趣事

随着全球对可再生能源的日益关注,风电行业得到了迅速发展。Altech公司紧跟时代步伐,投入大量资源研发铝合金风电线导体。这种新型导体材料不仅具有优异的导电性能,还具备出色的耐候性和抗腐蚀性,极大地提高了风电设备的运行效率和稳定性。

Carlisle Interconnect Components公司的发展小趣事

Carlisle Interconnect Components公司深知品质是赢得市场的关键。因此,公司建立了严格的质量管理体系,从原材料采购到生产制造,再到产品出厂,每一个环节都严格把控。这种对品质的执着追求,使得公司的产品在国际市场上获得了良好的口碑。同时,公司还积极拓展海外市场,与多家国际知名企业建立了稳定的合作关系,进一步提升了公司在全球电子连接器市场的影响力。

General Instrument Optoelectronics公司的发展小趣事
用于焊接和更换电路中的元件。
AZ Displays公司的发展小趣事

随着公司规模的扩大和市场份额的提升,AZ Displays开始实施全球化战略。公司在全球范围内建立销售网络和分支机构,积极开拓国际市场。通过与国际知名企业的合作,AZ Displays成功将产品打入国际市场,进一步提升了公司的品牌影响力和市场竞争力。

COTO TECHNOLOGY公司的发展小趣事

进入上世纪六十年代,COTO TECHNOLOGY迎来了一个重大的转折点。公司开始探索线圈绕组以外的领域,通过引入簧片继电器,成功扩展了产品线。这一创新举措不仅丰富了公司的产品种类,更重要的是,它为公司打开了新的市场领域。到了七十年代,COTO更是凭借开发出的首款获得专利的低热电动势簧片继电器,一跃成为业界领先的干簧继电器制造商。

Dresden Elektronik公司的发展小趣事

随着技术的不断进步,Dresden Elektronik公司不断加大对研发的投入,致力于推动技术的创新和突破。一次偶然的实验中,公司的研发团队发现了一种新的材料,能够显著提高电子元件的性能和稳定性。这一发现被迅速转化为产品,并成功推向市场,使公司的产品在竞争中脱颖而出。

问答坊 | AI 解惑

ADSL线路测试技术

作为一种基于普通电话双绞线的传输技术,ADSL对物理传输线路有很大的依赖性。环路的特征将对ADSL服务的质量和性能级别产生决定性影响。首先在业务开通时会遇到如何选择ADSL线路,某条线路能否开通ADSL业务,可以开通的速率是多少,影响传输质量的原 ...…

查看全部问答>

玩网页游戏会关机

电脑进入正常,玩中游也正常,但只要是一玩网页游戏就会自动关机,检测电源显卡正常…

查看全部问答>

请问rtl8309如何控制其PHY寄存器

RTL8309的资料好少,我在网络上有找到通过SMI接口协议来操作寄存器的,能通过主芯片和8309之间的I2C来进行通信,然后控制寄存器吗?…

查看全部问答>

我两台机器的网卡都是百兆网卡,测速软件报告网速最高只有 26 Mbps,为什么呢?

我两台机器的网卡都是百兆网卡,我用测试软件测试了一下网速,能达到 26 Mbps,离 100 Mbps 还有很远呢!这是为什么呢? 我用的是直连网线。 我很关心 怎样能让测试结果非常接近 100 Mbps ? …

查看全部问答>

如何防止WINCE 5.0 多镜像地址空间重叠?

在config.bib中把CE镜像划分为了4个部分,例如: KERNEL.BIN,DRIVER.BIN,APP.BIN,NK.BIN 这样做以便后期对单个镜像文件升级,现在问题来了,每个BIN文件中的DLL在SLOT0,SLOT1中所占用的地址空间都是在编译器时计算好的。如果后面我的APP.BIN变化 ...…

查看全部问答>

无铅制造时代,恒温烙铁焊台大可借鉴蓄水池效应

    很多价格昂贵的无铅焊台都喜欢强调和炫耀瞬间强大的温度恢复能力,其实这个有一些钻牛角尖的做法,虽然性能是上去了,但焊台本身的总体制造成本以及使用成本也跟着抬高,势必转嫁到最终用户身上。       &nb ...…

查看全部问答>

被MSP430F2013的SPI搞死了

本来打算用2013做16位AD,然后将数据用SPI传送给149的,做的时候才发现,2013的资料实在是太少了,特别是中文资料,反复看了例程,网上的,TI的,到现在还没有能通讯上,哎,2013这个东东怎么看都和先前的片子不一样,149,133资料多,好用,看来2xxx的麻烦死了. ...…

查看全部问答>

请问arm寄存器的C#与R#表示

刚刚开始学arm,手册上写寄存器都是R15,R**的,但是看到代码里用的就是C0,C几的,请问这是为什么,有对应关系么? 谢谢。…

查看全部问答>