求指错,C51矩阵按键数码管显示

今天也要好好的 2019-05-08 12:12:48
程序编译通过,但是数码管完全没反应,由于刚刚接触不多,对于一些语句的顺序和用法可能错了自己看不出来 #include<reg52.h> sbit duan=P2^6;//定义数码管段选段选 sbit wei=P2^7;//定义数码管位选 unsigned char Hang_scan[]={0xfe,0xfd,0xfb,0xf7};//行扫描初始值数组 unsigned char DIGITAL[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; unsigned char key=0;//按键编号 void delay();//声明延时函数 void scan(){ unsigned char i;//行编号 for(i=0;i<4;i++){ P3=Hang_scan[i];//逐行赋初始值 if(P3!=Hang_scan[i]){//按键消抖 delay(); if(P3!=Hang_scan[i]){//再次判断按键是否按下 switch(P3&0xf0){//由按键按下后P3高四位的值判断列位置 case 0xe0:key=4*i+1; break;//第1列 case 0xd0:key=4*i+2; break;//2 case 0xb0:key=4*i+3; break;//3 case 0x70:key=4*i+4; break;//4 } }while(P3!=Hang_scan[i]){}//判断按键是否弹起 } } } void delay(){ unsigned char j; for(j=0;j<1000;j++); } void main(){ while(1){ scan(); wei=1;//打开位选 P0=0xfb;//选择第二位 wei=0; duan=1;//打开段选 P0=DIGITAL[key-1];//给数码管端口赋值 duan=0; } }
...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧