44键盘数码管显示课程设计
Ⅰ 单片机简易计算器课程设计 用4位八段数码管共阴显示,4x4键盘 发我[email protected]
上网搜搜好了...
Ⅱ 4*4矩阵键盘控制四位数码管显示单片机C语言程序
#include <intrins.h>
#define uchar unsigned char
#define ROWP P3
#define LINP P2
void Delay(uchar i) {
uchar j;
for(;i>0;i--)
for(j=0;j<112;j++)
_nop_();
}
uchar Keyscan(){
uchar i,j,RLP,num;
for(i=0;i<4;i++){
LINP=(LINP|0xf0)&(~(0x10<<i));
Delay(1);
for(j=0;j<5;j++){
RLP=(ROWP|0x1f)&(~(0x10>>j));
if(ROWP==RLP){
Delay(2);
if(ROWP==RLP)
num=i*5+j+1;
}
}
}
return num;
}
5*4的,稍微修改,就是4*4的
Ⅲ 帮我改成4*4矩阵键盘控制 4位共阴极数码管显示! 51单片机
#include<reg51.h>
#define uchar unsigned char
uchar tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0到f
uchar keyval;
uint x;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<125;j++);
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P3=0x0f; //发0扫描,列线输入
if ((P3 & 0x0f) != 0x0f) //有键按下
{
delay(20); //延时去抖动
if ((P3&0x0f)!= 0x0f)
{
sccode = 0xef; //逐行扫描初值
while((sccode&0x01)!=0)
{
P3=sccode;
if((P3&0x0f)!=0x0f)
{
recode=(P3&0x0f)|0xf0;
while((P3&0x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return 0; //无键按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)
{
return;
}
switch(key)
{
case 0x11:keyval=7;break;
case 0x12:keyval=4;break;
case 0x14:keyval=1;break;
case 0x18:keyval=10;break;
case 0x21:keyval=8;break;
case 0x22:keyval=5;break;
case 0x24:keyval=2;break;
case 0x28:keyval=0;break;
case 0x41:keyval=9;break;
case 0x42:keyval=6;break;
case 0x44:keyval=3;break;
case 0x48:keyval=11;break;
case 0x81:keyval=12;break;
case 0x82:keyval=13;break;
case 0x84:keyval=14;break;
case 0x88:keyval=15;break;
default:keyval=0xff;break;
}
}
void t0isr() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
switch(num)
{
case 0:P2=0x0fe;break;
case 1:P2=0x0fb;break;
case 2:P2=0x0fd;break;
case 3:P2=0x0f7;break;
default:break;
}
P0=tab[keyval];
num++;
num&=0x03;
}
main()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;
EA=1;
while(1)
{
getkey();
}
}
Ⅳ 急求4*4矩阵键盘控制数码管显示! 51单片机
共阳极数码管 如果是共阴极数码管则 display()里的P0=0xff;改为P0=0x00;P2=smg_we[a];改为P2=~smg_we[a];P0=dsp_code_ca[xianshi[a]];改为P0=~dsp_code_ca[xianshi[a]];即可
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key_char,key_char0;
uint aa,bb,num;
uint number[8]={16,16,16,16,16,16,16,16};
uint xianshi[8]={16,16,16,16,16,16,16,16};
uchar code Key_init[] = {0xfe,0xfd,0xfb,0xf7};
uchar code smg_we[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code dsp_code_ca[] = {
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0xff};//共阳极数码管0~F
void delay(uint);
bit Test_Key();
void display();
void main(void)
{
uint x,y,z;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开启总中断
ET0=1;
TR0=0;
while(1)
{
if(!TR0)
{
if(Test_Key())
{
number[x]=num;
x++;
for(y=x,z=0;y>0;y--,z++)
{
xianshi[8-y]=number[z];
}
if(x==8)
{
x=0;
TR0=1;
}
}
}
display();
}
}
void time0() interrupt 1 //T1中断用来计数器溢出 数码管显示
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==100)
{
aa=0;
TR0=0;
for(bb=0;bb<8;bb++)
{
number[bb]=16;
xianshi[bb]=16;
}
}
}
void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=124;b>0;b--); //这里b的大小有晶振频率决定 反比
}
bit Test_Key()
{
uint i;
for(i=0;i<4;i++)
{
P1=Key_init[i];
key_char=P1;
key_char=key_char&0xf0;
if(key_char!=0xf0)
{
delay(5);
key_char=P1;
key_char=key_char&0xf0;
key_char0=P1;
key_char0=key_char0&0xf0;
while(key_char0!=0xf0)
{
key_char0=P1;
key_char0=key_char0&0xf0;
}
if(key_char!=0xf0)
{
switch(key_char)
{
case 0x70: num=12+i;
break;
case 0xb0: num=8+i;
break;
case 0xd0: num=4+i;
break;
case 0xe0: num=0+i;
break;
}
return 1;
}
}
}
return 0;
}
void display()
{
uint a;
for(a=0;a<8;a++)
{
P0=0xff;
P2=smg_we[a];
P0=dsp_code_ca[xianshi[a]];
delay(2);
}
}
Ⅳ 求单片机 4X4键盘及数码管显示实验 程序
1.把按键松手检测去掉;
2.适当的增加按键检查的延时;
Ⅵ 单片机课程设计4x4矩阵键盘仿真图如下,调试运行数码管就是不亮,请问是什么原因呢
有高低电平了,应该会亮。是不是数码管的地线没接上?用鼠标将它拖下来一点,看看是不是没接上,没有的话,接上一条线
Ⅶ 求矩阵式键盘系统设计:4*4,16个键盘的输入系统的设计,将对应的建号用LED数码管显示出来!
那还不简单啊,4行4列嘛,每个交点是一个按键,8根线分别连接处理器版的8个IO口,把列的IO属性配成权弱上拉,读取键值时首先将第1行通过IO口输出低电平,按顺序读取4列返回的状态,如果有一列被拉低了那就锁定那个键按下了,键值你可以这样定义一个字节高半字节代表行,低半字节代表列。一对应就OK了 至于你要翻译成1-16个LED 靠你的软件实现就行了,你可以随便关联。
Ⅷ 求“小键盘按键识别数码管移位显示”课程设计的详细报告,以及图表
帮忙给出详细过程!!谢谢 #include