利用51单片机设计一个单片机3*4键盘输入系统

作者&投稿:尘泡 (若有异议请与网页底部的电邮联系)
51单片机的4*4键盘输入的编程~

#include
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define led P0
sbit c1=P2^0;
sbit c2=P2^1;
uchar j,b;
uchar num;
uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
///////////////////////////////////////////delay
void delay(unsigned int c)
{
while (c!=0)
{
unsigned int i;
for(i=0;i<100;i++);
c--;
}
}
////////////////////////////////////////////
uchar checkkey()
{
uchar i,j;
j=0x0f;
P3=j;
i=P3;
if(i==j) return(0);
else return (1);
}
//////////////////////////////////////
uchar scan()
{
uchar scancode,codevalue;
uchar i,j;
uchar m=0;
uchar k,x;
if(checkkey()==1)
{
delay(100);
if(checkkey()==1)//key_presss
{
scancode=0xfe;
m=0x00;
for(i=1;i<=4;i++)//line_scan
{
k=0x10;
P3=scancode;
x=P3;
for(j=1;j<=4;j++)//row_scan
{
if((x&k)==0)
{
codevalue=m+j;
while(checkkey()!=0);
return (codevalue);
}
else k=k<<1;
}
m=m+4;
scancode=~scancode;
scancode=scancode<<1;
scancode=~scancode;
}
}
}
}
//////////////////////////////////////////////////////////
void display(uchar num)
{
if(num<10)
{
c1=0;
c2=1;

led=a[num];
delay(800);
}
else
{
for(j=0;j<10;j++)
{
c2=0;
c1=1;
led=a[num/10];
delay(400);
c1=0;
c2=1;
led=a[num%10];
delay(40);
c2=0;
c1=0;

}
}
}
///////////////////////////////////////////////////////
void main()
{
uchar d;
while(1)
{
if(checkkey()==1)
{

d=scan();
delay(100);
display(d);
}

}
}




毕业设计还是自己做吧。51单片机有32个I/O,4*4键盘占8个,16个发光二极管和一个蜂鸣器占17个,足够用了。注意键盘的I/O最好上拉,发光管和蜂鸣器一定要驱动。

如果帮你写出来的话,就失去学习单片机的意义了,大概思路可以给你讲下,首先你得用个矩阵键盘的扫描程序,用7个IO口就能实现,然后把扫描到的键值进行处理。然后把处理完的值在数码管上显示出来,这里需要对应你的单片机电路图,写一个自己的数码管驱动。你后面说的每按一下,向左移动一位?不明白什么意思,但是你把上面的弄完了,实现这些东西肯定没问题。郭天祥的十天学会单片机 你看看3和4讲,应该是讲矩阵键盘和数码管的,一看就会。。。

建议你先把找些4*4键盘的历程来看一下

在网上找一个4*4的自己改改吧


使用51单片机设计,P3.6,P3.7分别连接K1,K2,P0.6控制一个发光二极管,实 ...
includ<reg51.h>sbit k1=P3^6;sbit k2=P3^7;sbit led=P0^6;void delay(int x);\/\/延时函数自己写main{ while(1) { if(k1==0||k2==0)\/\/有键按下 { delay(100);\/\/按键去抖 同时防止两个按键同时按下时产生微小时间差 if(k1==0&&k2==0)\/\/两键同时按下 ...

51 单片机 怎么设计由1加到1000呢?指令
include<reg51.h> main(){ unsigned int x;x=0;TMOD=0x20;TH1=0xfd;TL1=0xfd;TR1=1;while(1){ x++;if(x==1000) \/\/如果加到1000则向串口发送一个5AH { SBUF=0x5a;while(!TI);TI=0;x=0;} } }

用51单片机设计一个电子钟
巧了,国亲无聊做了一个玩玩,给你看看把,其实电子钟挺简单的,下面是程序:include<reg52.h> define uchar unsigned char define uint unsigned int sbit ch=P3^2;sbit key=P3^5;sbit key1=P3^4;uchar t0,numn,numy,numr,nums,numf,numm,sw,w,q,b,s,g,sw1,w1,q1,b1,s1,g1,rq...

基于51单片机的简易计算器设计,急
\/\/功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ = 清零 表3-1 3.2 计算器的软件设计 include<reg51.h> \/\/头文件 define uint unsigned int \/\/ define uchar unsigned char sbit lcden=P2^3; \/\/定义引脚 sbit rs=P2^4;sbit rw=P2^0;sbit busy=P0^7;char i,j,temp,num,...

用51单片机设计一个秒表,计时范围从00:00-59:59.
include<reg51.h>#include "intrins.h"#include "absacc.h"#define uchar unsigned charuchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0xff};\/\/0-9unsigned char sec=0,min=0,scanled;unsigned char key=0,mode,time; unsigned char disdat[4];...

为51单片机设计一个上拉输入的按键电路并分析其工作原理
上拉电阻是I\/O口平时保持高电平 按键按下后,I\/O口转为低电平;软件扫描到变换后,需要延时除颤抖,就可确定按键的状态了。

怎样用51单片机设计三个按键控制一个灯的程序,C程序
程序如下 include<reg51.h> sbit led1=P1.0;sbit key=P1.1;sbit key1=P1.2;sbit key2=P1.3;void main(){ while(1){ if((key|key1|key2)==0){led1=~led1;while((key|key1|key2)==0);} } 没试过 可能有些地方不对 你自己改改 反正思路就这样了 ...

求51单片机电子时钟设计。用6个数码管显示出时分秒。
一、求51单片机电子时钟设计。用6个数码管显示出时分秒。;=== ;程序完成一个电子钟的设计    ;=== ;定义程序入口地址  ORG ORG000BH AJMPT0INT  ;=== ;定义内部REQU30H SECEQU40H MINEQU41H HORE3H  ;===...

想利用51单片机做一个延迟30S的控制,求大神帮忙设计一下!
X0==0); \/\/如果红外线开关35S以后关了 delay50ms(600); \/\/延迟开关30S之后 Y0=0; \/\/开路,设计完成 while(P2^1==0); \/\/这里给你设计了个等待复位按钮,方便你复位 goto start;L1:Y0=0; \/\/如果红外线开关在35S之内关了,与51相连的开关开路 } ...

51单片机 写一个程序 0-9的然后用一个按键按一下就可以变成9-0的 不...
include<reg51.h> define uchar unsigned char uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};sbit key=P2^0;bit flag=0;uchar cnt=0,num=0;void t0isr() interrupt 1 { TH0=(65536-50000)\/256;TL0=(65536-50000)%256;cnt++;if(cnt>=20){ cnt=0;P1=table[...

宁江区15214334052: 利用51单片机设计一个单片机3*4键盘输入系统 -
锐旺博思: 如果帮你写出来的话,就失去学习单片机的意义了,大概思路可以给你讲下,首先你得用个矩阵键盘的扫描程序,用7个IO口就能实现,然后把扫描到的键值进行处理.然后把处理完的值在数码管上显示出来,这里需要对应你的单片机电路图,写一个自己的数码管驱动.你后面说的每按一下,向左移动一位?不明白什么意思,但是你把上面的弄完了,实现这些东西肯定没问题.郭天祥的十天学会单片机 你看看3和4讲,应该是讲矩阵键盘和数码管的,一看就会...

宁江区15214334052: 急求!!怎样用C语言实现51单片机中3*4矩阵键盘每按下一个键,就在LCD1602上显示一个“*”号. -
锐旺博思: 不能合并?那你写的按键程序和LCD程序有什么用,LCD部分需要有个函数,这个函数负责在液晶屏的任意位置显示想要显示的字符;按键部分需要一个进行按键扫描程序,合并的话,主程序不断进行按键扫描,当检查到有键按下时,就调用LCD那个函数

宁江区15214334052: 51单片机3*4键盘扫描码 -
锐旺博思: 这是4*4键盘扫描程序代码:void delay(uchar a) { uchar i,j; for(i=0;i for(j=0;j<125;j++); } uchar kbscan(void) { unsigned char sccode,recode; P3=0x0f; //发0扫描,列线输入 if ((P3 & 0x0f) != 0x0f) //有键按下 { delay(20); //延时去抖动 if ((P...

宁江区15214334052: 51单片机 三字节乘以一字节程序 -
锐旺博思: : MOV A, R0 MOV B, R3 MUL AB MOV R4, A MOV R5, B; MOV A, R1 MOV B, R3 MUL AB ADD A, R5 MOV R5, A MOV A, BADDC A, #0 MOV R6, A; MOV A, R2 MOV B, R3 MUL AB ADD A, R6 MOV R6, A MOV A, BADDC A, #0 MOV R7, A END

宁江区15214334052: 单片机键盘3*4式的工作原理? -
锐旺博思: 本文论述了基于RTOS的液晶屏游戏的硬件开发的全过程. 在绪论部分介绍了当前嵌入式系统在我国的发展现状以及未来的发展趋势.其次,介绍了液晶屏游戏的硬件系统的工作原理及各组成部分的设计情况以及PROTEL绘图的特点和注意点....

宁江区15214334052: 单片机控制电机的正反转 程序及电路图 -
锐旺博思: 这个很简单,我教你怎么玩,下面是思路和方式 思路:有三个输入,分别是一个按钮、两个霍尔传感器(也就是接近开关),我用p0.0到p0.2来代替;输出2个或以上(这看你接什么显示器,如果是pc的话,就不用数字量输出,直接串口就可以...

宁江区15214334052: 利用所学51单片机知识完成一个单片机应用系统的设计
锐旺博思: 你可以用51单片机加DAC0832数模转换器设计一个数控电源,再用LED或者LCD显示电压值,DAC芯片后接放大和调整电路,再加上两个按键接P3口外部中断实现电压值加减就行了,程序和电路图很简单

宁江区15214334052: 基于51单片机的简易计数器设计 -
锐旺博思: 原发布者:puti0808 基于单片机的简易计算器设计摘要3关键字:80C51LCD16024*4矩阵键盘计算器3第一章绪论41.1系统开发背景41.2系统开发意义41.3设计目的41.4设计任务4第二章单片机发展现状52.1目前单片机的发展状况52.1.1单片机的...

宁江区15214334052: 利用51单片机、LCD显示器设计一个单片机显示系统,要求在液晶上显示“HELLO,PROTUS”. -
锐旺博思: #include<reg52.h> //包含头文件,这个嘛,就不用多说了~~ #define uint unsigned int //预定义一下 #define uchar unsigned char sbit rs=P2^5; //1602的数据/指令选择控制线 sbit rw=P2^6; //1602的读写控制线 sbit en=P2^7; //1602的使能控制线 /*P2...

宁江区15214334052: 单片机S51设计一个计算器 求键盘程序(4*4) -
锐旺博思: 键盘扫描+键值转换的方法.4*4的矩阵键盘,我使用不开中断的反转法来做,简单来说就是将横列置1纵列置0,检测到案件后再纵列置1横列置0,这样就可以扫描到按键的特征码了.以下是我早期写的一段程序,你学单片机的,端口怎么用,#...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网