找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1120|回复: 7
收起左侧

如何补全这avr单片机程序,还要有按键检测、延时去抖,等待抬起等环节。需要怎么补?

[复制链接]
ID:713870 发表于 2020-3-23 10:27 | 显示全部楼层 |阅读模式
单片机源程序如下:

#include <iom16v.h>

#define  uint unsigned int

void delay10ms(void)
{
uint t;
for( t=0;t<1360;t++);
}

void main(void)
{
    SFIOR&=0xFB;
        DDRA = 0x00;                                                /*A口输入*/
        PORTA = 0xFF;                                                /*A口上拉*/
    DDRB = 0xFF;                                                /*B口输出*/
        PORTB = 0xFF;                                                /*LED全灭*/
        DDRC = 0xFF;
        PORTC = 0xFF;
        DDRD = 0x00;
        PORTD = 0xFF;

        while (1) {
                if ((PINA & (1 << PA0)) == 0)
                   {        
                      delay10ms();
                          if ((PINA & (1 << PA0)) == 0)
                          while((PINA & (1 << PA0)) == 0);//??????   
                          PORTB = ~(1 << PB0);                /*?????*/
                        }
                if ((PINA & (1 << PA1)) == 0)
                    {
                         delay10ms();
                         if ((PINA & (1 << PA1)) == 0)
                         while((PINA & (1 << PA1)) == 0);//??????
                         PORTB = ~(1 << PB1);
                        }
                if ((PINA & (1 << PA2)) == 0)
                   {
                     delay10ms();
                         if ((PINA & (1 << PA2)) == 0)
                         while((PINA & (1 << PA2)) ==0);//??????  
                        PORTB = ~(1 << PB2);
                        }
                if ((PINA & (1 << PA3)) == 0)
                   {
               
               
               
                        PORTB = ~(1 << PB3);
                        }
                if ((PINA & (1 << PA4)) == 0)
                    {
                        
                        PORTB = ~(1 << PB4);
                        }
                if ((PINA & (1 << PA5)) == 0)
                   {
                  
                        PORTB = ~(1 << PB5);
                        }
                if ((PINA & (1 << PA6)) == 0)
                    {
                        
                        PORTB = ~(1 << PB6);
                        }
                if ((PINA & (1 << PA7)) == 0)
                   {
                  
                        PORTB = ~(1 << PB7);
                        }
                }
}

回复

使用道具 举报

ID:191511 发表于 2020-3-23 14:13 | 显示全部楼层
如果是初学者,建议先学51,因为51的IO口配置很简单,读写IO的值和位操作的方便性、可操作性都是单片机里最省事的,同时51的例子网上也有好多,便于脱开51硬件去学习外围电路的使用(编程)。
回复

使用道具 举报

ID:191511 发表于 2020-3-23 14:16 | 显示全部楼层
教科书式的按键检测一般是这样的
if(某个按键按下)
     {
          表达式;
          while(按键按下) ;
回复

使用道具 举报

ID:21069 发表于 2020-3-23 14:52 | 显示全部楼层
建议你买一块AVR的板子回来练,光自己整是折磨,板子才不到100,再或者用仿真软件练,网上面很多AVR的案子,先搞定AVR的端口,其他的同51差别不大
回复

使用道具 举报

ID:316880 发表于 2020-3-23 15:24 | 显示全部楼层
wo4fisher 发表于 2020-3-23 14:16
教科书式的按键检测一般是这样的
if(某个按键按下)
     {

用   while(按键按下) ;  做判断延时真的不好,如果有数码管是闪
回复

使用道具 举报

ID:473159 发表于 2020-3-23 15:56 | 显示全部楼层
很简单,坛子里大把的代码,多练练手你就明白怎么做了
回复

使用道具 举报

ID:687694 发表于 2020-3-23 18:35 | 显示全部楼层
动手码上缺失的代码,然后调试。就这么补。
回复

使用道具 举报

ID:21069 发表于 2020-3-23 19:35 | 显示全部楼层
余生不负 发表于 2020-3-23 15:24
用   while(按键按下) ;  做判断延时真的不好,如果有数码管是闪

错!就看你将显示函数放在什么地方
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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