完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 cxchenxingcool 于 2012-11-9 09:53 编辑
矩阵键盘+数码管显示 为什么(0,1,2,3)在数码管上不显示? 求高人指导 源程序(ICC-AVR)如下: #include #include #define uchar unsigned char #define uint unsigned int uchar Key; #pragma data:code flash table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0}; void delay(uint ms) { uint i,j; for(i=0;i } void number_show(uchar num) { PORTB=table[num]; PORTA|=BIT(3); PORTA&=~BIT(3); PORTB=~BIT(0); PORTA|=BIT(4); PORTA&=~BIT(4); } void key_scan() { uchar key,i; DDRD=0xf0; PORTD=0x0f; key=PIND; key&=0x0f; if(key!=0x0f) { delay(10); for(i=0;i<4;i++) { PORTD=~BIT(i); DDRD=0x0f; key=PIND; key_result(key&0xf0,i); } //while(); } } void key_result(uchar keyread,uchar i) { if(i==0) { switch(keyread) { case 0xe0: Key=0; break; case 0xd0: Key=1; break; case 0xb0: Key=2; break; case 0x70: Key=3; break; } } else if(i==1) { switch(keyread) { case 0xe0: Key=4; break; case 0xd0: Key=5; break; case 0xb0: Key=6; break; case 0x70: Key=7; break; } } else if(i==2) { switch(keyread) { case 0xe0: Key=8; break; case 0xd0: Key=9; break; case 0xb0: Key=10; break; case 0x70: Key=11; break; } } else if(i==3) { switch(keyread) { case 0xe0: Key=12; break; case 0xd0: Key=13; break; case 0xb0: Key=14; break; case 0x70: Key=15; break; } } else Key=16; } void main() { DDRA|=BIT(3); DDRA|=BIT(4); DDRB=0XFF; while(1) { key_scan(); number_show(Key); } }
|
|
相关推荐
2 个讨论
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5130 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7772 浏览 0 评论
3033 浏览 2 评论
3107 浏览 1 评论
10061 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 23:56 , Processed in 0.703879 second(s), Total 46, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号