导航:首页 > 操作系统 > 51单片机按键控制数码管

51单片机按键控制数码管

发布时间:2023-09-04 11:39:39

⑴ 51单片机如何把矩阵键盘控制数码管和独立键盘控制蜂鸣器共同实现

我们先了解矩阵键盘的工作原理,掌握编码方法并能够编写出扫描程序,使用矩阵键盘控制数码管输出矩阵键值。

显示内容
在显示备橘祥模块的八位 LED 数码的个位显示当前使用矩阵键盘所按下的值。
键阵键盘多用于键伍李数目较多的时候。这样可以更多的节省IO口的占用量,
对于矩阵键盘常用的扫描方法为线反转查询法。具体的思路是:首先使行作为输入,使用单片机内部仿搏电阻上拉为高电平,列输出低电平,读行的状态。如果行有一个IO口是低,说明有键按下,进行下一步,否则退出扫描。如果有键按下,置列为输入,行输出低电平,读列的状态。最后根据
行列的状态查表就可以知道是那个按键按下。

⑵ 51单片机按键控制数码管

#include <reg52.h> // 可以参考一下

#define uchar unsigned char

#include <stdio.h>

unsigned char* c;

sbit k0=P3^2;

sbit k1=P3^3;

sbit k2=P3^4;

sbit k3=P3^5;

sbit k4=P3^7;

sbit led1=P1^7;

uchar k;

bit y0,y1,y2,y3,y4,y5;

bit t,s,ld;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main()

{

SCON = 0x50; //SCON: mode 1, 8-bit UART, enable rcvr

TMOD = 0x20; //TMOD: timer 1, mode 2, 8-bit reload

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; //TH1: reload value for [email protected]

TR1 = 1; //启动定时器1

ES = 1; //允许串口中断位

EA = 1; //允许总中断位

c=0;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "as";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

if(k1==0 && y1==0)

{

y1=1;

c = "bs";

SendString(c); //发送字符串

}

if(k1==1 ) { y1=0; }

if(k2==0 && y2==0)

{

y2=1;

c = "ds";

SendString(c); //发送字符串

}

if(k2==1 ) { y2=0; }

if(k3==0 && y3==0)

{

y3=1;

c = "es";

SendString(c); //发送字符串

}

if(k3==1 ) { y3=0; }

if(k4==0 && y4==0)

{

y4=1;

c = "fs";

SendString(c); //发送字符串

}

if(k4==1 ) { y4=0; }

// for(i = 0; i < 4000; i++); //延迟一小段时间

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='z') { k++;ld=~ld; }

s=1; t=0;

if(k==10) { k=0;}

P1 =~table[k];

led1=ld;

}

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

/////////////////////////////////////////

#include <reg51.h> // 接收 试试

#define uchar unsigned char

unsigned char* c;

sbit led1=P3^2; // 接收 az , P.2 输出低电平, P3.3 输出高电平。

sbit led2=P3^3; // 接收 aa , P.2 输出高电平, P3.3 输出低电平。

sbit k0=P3^5;

bit y0,t,s;

uchar k;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d};

void SendOneChar(char c) //发送字节到PC

{

TI=0;

SBUF = c;

while(!TI);

TI=0;

}

void SendString(char *st) //发送字符串到PC

{

while(*st)

{

SendOneChar(*st++);

}

}

void main (void)

{

SCON = 0x50; // REN=1允许串行接受状态,串口工作模式1

TMOD = 0x21; // 定时器工作方式2

PCON = 0x80; // 数据位8、停止位1。效验位无 (11.0592M)

TH1 = 0xF4; // TH1 = 0xFD; 波特率 2400

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

TR1 = 1;

ES = 1; // 开串口中断

EA = 1; // 开总中断

led1=1;led2=0;

// ET0=1;

// TR0=1;

s=1;

k=0;

P1 =~table[k];

while(1)

{

if(k0==0 && y0==0)

{

y0=1;

c = "az";

SendString(c); //发送字符串

}

if(k0==1 ) { y0=0; }

}

}

void chuankou(void) interrupt 4

{

if(RI==1)

{

RI = 0;

if(t==1)

{

if(SBUF=='s') {led1=~led1;led2=~led2; k++; }

//if(SBUF=='s') {led1=1;led2=0; k--; }

s=1; t=0;

if(k==10) { k=0;}

if(k==255) { k=9; }

P1 =~table[k];

}

// 1号 a 2号 b ---

if(SBUF=='a' && s==1) { t=1;s=0;}

}

}

void T0_time()interrupt 1

{

TH0=(65536-54253)/256; // 50 mS

TL0=(65536-54253)%256;

k++;

if(k==10) // 这里修改时间

{

k=0;

led1=1;

led2=1;

}

}

⑶ 51单片机按键时,数码管会闪烁一下.原因是什么

原因很简单,这是代码和数码管驱动的问题

按键会影响数码管显示,这是单片机直接驱动数码管会出现的问题,而数码管则是工作在动态扫描方式的,若是采用带有锁存器件的数码管驱动,则不会出现此类现象,因为单片机是周期性的扫描工作方式,单片机直接驱动数码管的电路,当单片机扫描到按键的时候,数码管部分就停止了(一般的代码都这样,除非数码管是工作在静态扫描方式)

直接驱动数码管,按键的代码一般都会写一些延时,用来软件消除按键的抖动,若延时的时间太长,就会影响数码管的显示效果,另外有些还会增加等待按键松开的语句,这种语句一般都是一个死循环,除非按键被松开

解决办法是,减少按键消抖动延时的时间,在等待按键松开的死循环语句中调用数码管显示函数,这样基本上就可以解决此类问题

⑷ 51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示

1、首先,要把代码写好,点亮数码管。

⑸ 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环

假设你的是共阳极数码管,P0接数码。按键接P2^0;

#include<reg52.h>
typedef unsinged int uint;
sbit key=P2^0;
unsigned char tab[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void denay(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--)

}

void main()
{
uchar a;

while(1)
{
P0=tab[a];

if (key1==0)
{delay(10);
if(key==0)
{
while(!key1);

a++;
if(a==10) a=0;

}

}

}

⑹ 51单片机按键控制流水灯和数码管(最好用外部中断)

51单片机按键控制流水灯和数码管,P1口接8个LED灯,P0口接一个共阳数码管,P3.2和P3.3各接一个按键,分别用外部中断0和中断1。早蜂鸣器接在P2.7上。仿真图如下。

⑺ 51单片机用4个按键,每个按键被按下都会使数码管显示一个数值

5. [问答题] [技能题画10配线图写出程序]按下按钮S1,数码管显示1;按下按钮S2,数码管显示2;按下按钮S3,数码管显示3;按下按钮S4,数码管显示4;能互相直接切换。按下停止按钮后,数码管熄灭。。

⑻ 51单片机怎样用键盘控制数码管显示

51单片机怎样用键盘控制数码管显示的方法。

如下参考:

1.首先,编写代码并点亮数码管。

阅读全文

与51单片机按键控制数码管相关的资料

热点内容
中世纪java程序员 浏览:786
什么开发引擎使用python 浏览:176
sh脚本运行命令 浏览:316
广联达加密锁怎么看到期 浏览:172
cad轨迹命令 浏览:979
同事刷到女程序员自媒体视频 浏览:571
校验算法的缺点是什么 浏览:717
PHP商品分类功能实现 浏览:330
php取字符串中间 浏览:431
程序员经常用工具 浏览:836
降服主力指标源码主图 浏览:500
python实用库 浏览:692
电脑默认7个文件夹 浏览:11
新唐单片机安装c51后编译错误 浏览:530
红包源码引流神器 浏览:235
学生初中毕业撕书解压 浏览:747
命令方块刷铜点教学 浏览:690
php邮件订阅系统 浏览:997
柱梁底加密箍间距 浏览:30
pythonjavascript对比 浏览:741