51单片机按键控制数码管?
51单片机怎样用键盘控制数码管显示的方法。
如下参考:
1.首先,编写代码并点亮数码管。
2.在编写源代码之后,确保原始代码是正确的。
3.确认代码正确后,进入下一步,就是在这一行代码(箭头所指)中,删除这四个单词。
4.然后如图所示,四个单词已被删除,只要修改相应的代码编号即可。
5.表示数字0的代码在这里进行了更改,如图所示。
6、最后写代码,将生成的十六进制文件写进单片机应答,数码管显示的数字变为0。
定义开关引脚
sbit k1=P1^0;
sbit k2=P1^1;
依次类推,向下定义
void main()
{
while(1)
{
if(k1==0) P2=0xC0; //显示0的代码
if(k2==0) P2=***; //显示0的代码
依次类推}
}
希望对你有帮助。
#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 2400@11.0592MHz
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;
}
}
编写一个小程序,即可解决。
编程语言,怎么不指定?
用 C 还是用汇编语言?
K2 K3是自锁的吗?互锁吗?
单片机可以实现一个独立按键控制数码管多个数字吗?
一个按键控制4个数码管显示4个数,最简单的方法是按一次键计一个数,最大数是9999,即可显示四位数。再简单点,按一次键开始自动计数,最大数还是9999,再按一次键停止计数。这样控制程序好写。长按和短按对于初学者有点难,当然了,要能写出程序来是最好啦。
单片机按键控制数码管显示
1、按键子程序:实现按第一个键使键值keyvalue=1,第二个键使键值keyvalue=2,第三个键使键值keyvalue=3 2、显示子程序 定义3个字节的显示缓存,如dispbuf1,dispbuf2,dispbuf3 使dispbuf1的数字显示在第一个数码管上,dispbuf2的数字显示在第2个数码管上,dispbuf3的数字显示在第3个数码管上 3...
51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示
1、首先,要把代码写好,点亮数码管。2、代码写完后,要确认原先写好的代码是不是正确的。3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、最...
单片机用1个按键控制60秒定时,通过2个数码管显示。按一下启动,再按停止...
MOV A,P3 ;直等到按键放下,则算作一次 ANL A,#0FFH CJNE A,#0FFH,KEY_CE SETB KEYCARD ;真的有键按下,则置标志位 RET DELAY1S: ;延时函数 MOV R7,#10 D1:MOV R6,#50 DJNZ R6,DJNZ R7,D1 RET ASCII: DB 0C0H,0F9H,0A4H,0B0H,099H DB ...
单片机中怎样设置一个变量控制按键数
可以有位定位的位变量来控制按键,也可以用端口来控制。当按键被按下的时候,电路导通接地,I\/O口为低电平。当按键未被按下时,电路断开,I\/O口保持高电平。当检测到某一个按键按下时,对我们设置的一个变量(下边用keynumber)赋值,这样就实现了输入的效果。一般的按键所用开关为机械弹性开关,当...
单片机控制数码管1 按键控制开始、数码管循环显示0-F.时间间隔为1s的程...
P3.2外接一个按键,按下后,接地,用来起动.ORG 0000H JB P3.2,MOV R2, #0 LOOP:INC R2 MOV A, R2 ANL A, #0FH MOV DPTR, #TAB MOVC A, @A+DPTR MOV P1, A LCALL DL500MS LCALL DL500MS SJMP LOOP TAB:DB 0c0H,0f9H,0a4H,0b0H, ...
能帮我编一个单片机第1个按键控制数码管显示1,第2个按键控制数码...
参考一下这个仿真实例,16个按键,按键1 显示1,---按键9显示9,等等 下载 附件 仿真试试。
单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制数码管上...
D1: MOV R6,#250 DJNZ R6,DJNZ R7,D1 RET TAB: DB ; 自己去查数码管0~9的代码;共阳的 这是51单片机的,12MHz晶振 再给你补个C的,我这的按键可以做实际产品的,无偿给你咯,共享,呵呵!愿你努力学习 啊!include<reg52.h> define uchar unsigned char define ui...
c51单片机怎么用两个按键控制两个数码管的加减,加到99就好,求程序_百 ...
1、首先先在proteus画出仿真图,方便仿真程序。2、接着来编写程序,先来写入头函数。2、根据自己在proteus画的图,定义一下管脚根据你的原理图进行编写。3、然后写一个延时函数,来调节流水灯的时间间隔延时时间自己定义。4、下图就是主函数,包括流水灯的反复循环和j流水灯的方向。5、检查没有错误,...
汇编语言51单片机怎么实现用KEY 1控制数码管上显示的数字加1 KEY2控制...
1、按你显示程序的逻辑,对TAB修改如下:TAB:DB 00H,3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H 即数据的首尾为0(这是个标记而已),中间才是七段码 0--F 的显示数据;2、对CK1、CK2键盘按下及松开程序做了修改;3、显示程序也进行了修改,唯独...
竺丁美罗: /*----------------------------------------------- 名称:单个共阳数码管动态显示变化数字 内容:通过循环检测P1口按键输入值,然后用数码管输出, 没有按键按下时原值不变 ------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不...
营口市15735808776: 51单片机怎样用按键实现数码管位切换 - ?
竺丁美罗: 这要写程序,也是稍麻烦一点的. 大概思路是这样的,用一个按键切换显示位,按一下,切换一位,是这样吧. 用一个变量计数,每按一次键加1,一共切换多少位,就计数到多少.计到最大再回到第一位计数.例,四位数码管,计数为0,1,2,3,超过3就回0. 好了,按键解决了,再解决显示的,计数值对的数码管,让它显示出小数点,就是要调整的位.按键切换数码管,就是显示小数点的位在切换. 最后是,变量值的修改,根据按 键计数值,来判断那个变量要调整修改,做相应的加1,或减1计算就行了.
营口市15735808776: 51单片机控制数码管显示时钟,独立按键怎么弄 - ?
竺丁美罗: 独立按键处理起来是非常简单的,一般都是IO口单独控制,所以只需要消抖和判断按键按下抬起状态就好.比如: sbit key=P1^0; if(key==0) {delay(10);if(key==0){keyval=1;while(key==0);} }
营口市15735808776: 51单片机中键盘控制数码管显示有谁会? - ?
竺丁美罗: 用51的话,由于51的I/O没有高阻态,用中断去扫描键盘的话你给的电路图是行不通的(个人意见仅供参考),想要节省CPU开销的话可以用定时器,定时扫描键盘.下面是仿真图和程序.#include#define uint unsigned int #define uchar ...
营口市15735808776: 如何在51单片机矩阵键盘里按一个键可实现数码管动态显示而不是一个值 - ?
竺丁美罗: #include<reg51.h>#define uchar unsigned char; uchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; //0到f void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } uchar ...
营口市15735808776: 51单片机怎么按键切换数码管的位用来调时 - ?
竺丁美罗: 你先把你需要的功能描述清楚,然后再请人帮你写程序. 比如说,按键分几种动作(就点动/长按/连续点动?),每一种按键动作,触发什么功能(进入设置模式/加/减/移动/结束设置),显示的格式是 怎样,硬件原理图.
营口市15735808776: 51单片机c语言设计,按键控制数码管,依次按下显示0到9循环 - ?
竺丁美罗: #include<reg51.h> sbit k1=P1^0; #define uint16 unsigned int #define uchar unsigned char uchar code shuzu[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay() { uint16 i=1000;while(i--); } void main() { uchar n ; P2=0xfe; P1=0xff; ...
营口市15735808776: 使用89C51单片机单个按键控制一个数码管,当按键按下时数码管显示1,再次按下时显示0. - ?
竺丁美罗: SBUF=dispcode[num0];//第回1位答 while(!TI); TI=0; led0=0; delay(2); led0=1; SBUF=dispcode[num1];//第2位 while(!TI); TI=0; led1=0; delay(2); led1=1; SBUF=dispcode[num2];//第3位 while(!TI); TI=0; led2=0; delay(2); led2=1;
营口市15735808776: 51单片机怎样设按键切换数码管显示时间和日期? - ?
竺丁美罗: 你要设置一个标志变量,如flag,在进入按键程序后,flag++; 然后加个控制判断语句 if(flag>3) flag=0; 这样,在显示模块中再加入开关语句; switch(flag) { case 0:...显示时间.. case 1:...显示日期... case 2:...显示温度... }
营口市15735808776: 51单片机 独立键盘控制静态数码管 - ?
竺丁美罗: 定义开关引脚 sbit k1=P1^0; sbit k2=P1^1; 依次类推,向下定义 void main() { while(1) { if(k1==0) P2=0xC0; //显示0的代码 if(k2==0) P2=***; //显示0的代码 依次类推} } 希望对你有帮助.