完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`这是大鹏哥讲的avr矩阵键盘程序,不懂的是为什么配置输入前还要设置输出高电平,比如 DDRD=0XFF;PORTD=0XF0; DDRD=0X0F;3条语句!求大侠解答,万分感谢!#include #include #define uchar unsigned char #define uint unsigned int #pragma data:code const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF}; void delay(uint ms) { uint i,j; for(i=0;i for(j=0;j<1141;j++); } } void show(uchar j,uchar k) { PORTA|=BIT(3); PORTB=table[j]; PORTA&=~BIT(3); PORTB=0XFF; PORTB&=~BIT(k); PORTA|=BIT(4); PORTA&=~BIT(4); delay(1); } uchar key_press() { uchar i; DDRD=0XFF; PORTD=0XF0; DDRD=0X0F; i=PIND; if(i==0XF0) { DDRD=0XFF; return 0; } else { DDRD=0XFF; return 1; } } uchar key_scan() { uchar key,i=0X7F,j; delay(10); if(key_press()) { do { i=(i<<1|i>>7); PORTD=i; DDRD=0X0F; key=PIND; j=key&0XF0; }while(j==0XF0); while(key_press()); switch(key) { case 0xEE: key=0x0; break; case 0xDE: key=0x1; break; case 0xBE: key=0x2; break; case 0x7E: key=0x3; break; case 0xED: key=0x4; break; case 0xDD: key=0x5; break; case 0xBD: key=0x6; break; case 0x7D: key=0x7; break; case 0xEB: key=0x8; break; case 0xDB: key=0x9; break; case 0xBB: key=0xA; break; case 0x7B: key=0xB; break; case 0xE7: key=0xC; break; case 0xD7: key=0xD; break; case 0xB7: key=0xE; break; case 0x77: key=0xF; break; default: key=16; } } else { key=16; } return key; } void main() { uchar l; DDRA|=0X18;// 0001 1000 DDRB=0XFF; while(1) { if(key_press()) { l=key_scan(); show(l,0); } } } ` |
|
相关推荐
6 个讨论
|
|
DDRD=0XFF;PORTD=0XF0; DDRD=0X0F;DDRD=0XFF是将PORTD全部设为输出,PORTD=0XF0将高4位设为输出高电平,低四位为低电平,再将DDRD=0X0F;就是将高四位设为输入,低四位不变,因为之前PORTD=0XF0;所以已经是上拉输入了,没必要先设为输出高电平再设为输入吧!我昨天在实验板去掉了先设为输出的语句,还是能实现功能的。不过感觉这里的操作方法跟51单片机没什么区别,就是先输出高电平,再判断输入状态。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5125 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7769 浏览 0 评论
3027 浏览 2 评论
3103 浏览 1 评论
10055 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 10:44 , Processed in 0.698762 second(s), Total 64, Slave 49 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号