4970|6

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

AVR ATMEGA16 矩阵键盘 [复制链接]

大家好,我是一个AVR初学者,变了一个数码管动态显示矩阵键盘的值的程序,是用AVR-GCC编的,但是显示不了值,但我将头文件改了,在ICCAVR上就可以正常显示。求各位大侠帮我解决下,希望在AVR-GCC上能够正常运行,小弟将非常感谢!
#include <avr/io.h>
//#define F_CPU 1000000UL //延时
//#include <util/delay.h>
//#include <iom16v.h>
//#include <macros.h>
unsigned char const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};// 显示段码值01234567 0~F
unsigned char  tabwei[]={0,1,2,3};//位选码
unsigned char keybuff[4];//按键值缓存
void _delay_ms(unsigned int z)
{
while(z--);
}
void display(void)
{
unsigned char i;
for (i=0;i<4;i++)
{
PORTA = table[keybuff];
PORTC = tabwei;
_delay_ms(200);
}
}
unsigned char keyboard(void)
{
/*unsigned char key1,cord_h,cord_l;
DDRD = 0xf0; //设置低四位端口为输入
PORTD = 0x0f; //PD4`PD7列线全设置为0
_delay_ms(100);
cord_l = PIND | 0x0f; //读入行线值
if (cord_l !=0x0f) //先检测有无按键按下
{
_delay_ms(100); //去抖
if (cord_l !=0x0f) //在判断
{
cord_l = PIND | 0x0f; //读入行线值
DDRD =0x0f;
PORTD=cord_l|0xf0; //输出当前行线值
_delay_ms(100);
cord_h=PIND&0xf0; //读入列线值
key1=cord_h+cord_l;//键盘最后组合码值
}
else key1=0xff;
switch(key1)
{
case 0xee:return 0;break;//0
case 0xde:return 1;break;//1
case 0xbe:return 2;break;
case 0x7e:return 3;break;
case 0xed:return 4;break;
case 0xdd:return 5;break;
case 0xbd:return 6;break;
case 0x7d:return 7;break;
case 0xeb:return 8;break;
case 0xdb:return 9;break;
case 0xbb:return 10;break;
case 0x7b:return 11;break;
case 0xe7:return 12;break;
case 0xd7:return 13;break;
case 0xb7:return 14;break;
case 0x77:return 15;break;
}
return 16;
}
}
int main(void)
{
unsigned char key,t;
DDRA = 0xFF; // 定义为输出
PORTA = 0xFF; // 输出高电平
DDRC=0xff;
DDRD = 0xff;
PORTD = 0xff;
while(1)
{
//TODO:: Please write your application code
display();
key = keyboard();
if (key<16)
{
if (t<4)
{
keybuff[t]=key;
}
t++;
if(t==4)
t=0;
while (key<16)
{
key=keyboard();
display();
}
}
}
}

最新回复

  是否方便加我QQ(1206973913),将代码给我一下,我让技术测试一下是怎么回事?  详情 回复 发表于 2012-6-6 10:06
点赞 关注
 

回复
举报

9

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
LZ程序看着不怎么样啊,给你个吧....

#include
#include
unsigned char read_key(void)
{
       unsigned char i,j,key_value=0xff;
        DDRD=0XF0;
        PORTD=0X0F;
        if((PIND&0XOF)==0X0F)
                  return 0xff;
        else
       {
                delay_ms(5);
                if(((PIND&0XOF)==0X0F)
                         return 0xff;
                else
                        for(i=4;i<8;i++)
                        {
                               PORTD=~(1<                                for(j=0;j<4;j++)
                               {
                                       if((PIND&(<                                         key_value=(i-4)*4+j;
                               }
                       }
                   return key_value;//对应的键值
            }
}
void  main()
{
//加你的显示部分或其他。。。。
}
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
怎么把头文件给弄没了。。。而且程序全乱了
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

4
 
#include
#include
unsigned char read_key(void)
{
unsigned char i,j,key_value=0xff;
DDRD=0XF0;
PORTD=0X0F;
if((PIND&0XOF)==0X0F)
return 0xff;
else
{
delay_ms(5);
if(((PIND&0XOF)==0X0F)
return 0xff;
else
for(i=4;i<8;i++)
{
PORTD=~(1< for(j=0;j<4;j++)
{
if((PIND&(< key_value=(i-4)*4+j;
}
}
return key_value;//对应的键值
}
}
void main()
{
//加你的显示部分或其他。。。。
}
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

5
 
还是不行啊,发上去自动变那样了,我无语了
 
 
 

回复

2万

帖子

74

TA的资源

管理员

6
 

原帖由 xiaopao123 于 2012-6-5 23:48 发表 还是不行啊,发上去自动变那样了,我无语了

 

估计是和网页代码冲突,我让技术看看,xiaopao123可以用代码功能试试。

 

 

未命名.jpg (12.07 KB, 下载次数: 1)

未命名.jpg
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

2万

帖子

74

TA的资源

管理员

7
 

原帖由 xiaopao123 于 2012-6-5 23:47 发表 #include #include unsigned char read_key(void) { unsigned char i,j,key_value=0xff; DDRD=0XF0; PORTD=0X0F; if((PIND&0XOF)==0X0F) return 0xff; else { delay_ms(5); if(((PIND&0XOF)==0X0F) ...

 

是否方便加我QQ(1206973913),将代码给我一下,我让技术测试一下是怎么回事?

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表