
任务描述单片机连接8位共阳极数码管和4*4矩阵键盘对16个按键进行编号0~f按下不同显示相应数字。每个独立按键显示不同编号画出电路图对开关标号void key1(); //等待按键按下无限查询void key2(); //扫描按键位置行列扫描void key3(); //处理按键请求显示编号/************************* 项目名称项目三简易计算器 任务名称任务3-2按键编号显示 任务描述单片机连接8位共阳极数码管和4*4矩阵键盘 对16个按键进行编号0~f按下不同显示相应数字。 *************************/ #includereg51.h //51单片机寄存器定义头文件 sbit row0P1^0; sbit row1P1^1; sbit row2P1^2; sbit row3P1^3; sbit col0P1^4; sbit col1P1^5; sbit col2P1^6; sbit col3P1^7; int n;//存放按键编号 int seg[]{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//定义0~9共阳极七段码,与a,b,c,d,e,f void key1();//等待按键按下无限查询 void key2();//扫描按键位置行列扫描 void key3();//处理按键请求显示编号 /**********************************************/ void main() { while(1) { key1(); key2(); key3(); } } /**********************************************/ void key1() { while(1) { P10x0f; if(P1!0x0f)//有变化一定是有按键按下导致某行某列短路 break;//退出查询 } } /**********************************************/ void key2() { P10xff;//行列都写1 col00;//清零0列 if(row00) n0; if(row10) n1; if(row20) n2; if(row30) n3; P10xff;//行列都写1 col10;//清零1列 if(row00) n4; if(row10) n5; if(row20) n6; if(row30) n7; P10xff;//行列都写1 col20;//清零2列 if(row00) n8; if(row10) n9; if(row20) n10; if(row30) n11; P10xff;//行列都写1 col30;//清零3列 if(row00) n12; if(row10) n13; if(row20) n14; if(row30) n15; } /**********************************************/ void key3() { P20xfe;//1111 1110 P0seg[n]; }效果