51单片机独立式按键键盘接口实验用独立键盘的两个按键控制数码管 亮灭

(51单片机)独立按键控制数码管加减
【求助】 - 『编程语言讨论求助区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 1444|回复: 7
(51单片机)独立按键控制数码管加减
阅读权限10
发帖求助前要善用【】功能,那里可能会有你要找的答案;
求助软件脱壳或者破解思路时,请务必在主题帖中描述清楚你的分析思路与方法,否则会当作求脱求破处理;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类改成【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人。
本帖最后由 hanweioioi 于
13:24 编辑
欢迎大佬前来帮助&&0.0
程序烧写出来在开发板上显示成这样,但在仿真上显示正常
以下是我的程序
#include&reg51.h&
#define INT8U unsigned char
#define INT16U unsigned int
//调节按键定义--------------------------------------
sbit K1=P3^1;
sbit K2=P3^0;
sbit K3=P3^2;
sbit K4=P3^3;
//段码表---------------------------------------------
INT8U code SEG_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
INT16U Count=2900;
INT8U array[]={0,0,0,0};
INT8U Adjust=0;
INT8U Pre_key=0xf0;
//延时函数-------------------------------------------
void delay_ms(INT16U x)
& && &&&INT8U while(x--) for(t=0;t&120;t++);
//数位分解------------------------------------------
void INT_TO_4Digit(INT16U&&n)
& && &&&array[0]=n/1000;
& && &&&array[1]=n/100%10;
& && &&&array[2]=n/10%10;
& && &&&array[3]=n%10;
//按键处理函数------------------------------------
void key_handle()
& && &&&P3|=0xF0;
& && &&&if(Pre_key==(P3&0xF0))&&
& && &&&Pre_key=P3&0xF0;
//-------------------------------------------------
& && &&&delay_ms(10);
& && &&&if(!K1)
& && &&&if(Temp==0) Temp=C
& && &&&Count++;Adjust=1;
& && &&&delay_ms(10);
& && &&&if(!K2)
& && &&&if(Temp==0) Temp=C
& && &&&Count--;Adjust=1;
& && &&&delay_ms(10); if(!K3) {Adjust=0;Temp=0;}
& && &&&delay_ms(10);
& && &&&if(!K4)
& && && && && & if(Temp==0)Count=TTemp=0;
& && && && && & Adjust=0;
//主程序---------------------------------------
void main()
& && &&&INT8U INT16U
& && &&&while(1)
& && && && && & for(t=0;t&35;t++)
& && && && && & {
& && && && && && && && &INT_TO_4Digit(Count);
& && && && && && && && &for(i=0;i&4;i++)
& && && && && && && && &{
& && && && && && && && && && &&&P0=0xFF;
& && && && && && && && && && &&&P3=(P3&0xF0)|(1&&i);
& && && && && && && && && && &&&P0=SEG_CODE[array];
& && && && && && && && && && &&&delay_ms(2);
& && && && && && && && &}
& && && && && && && && &key_handle();
& && && && && & }
& && && && && & if(Adjust)
& && && && && & {
& && && && && && && && &P0=0xFF;
& && && && && && && && &for(t=0;t&35;t++)
& && && && && && && && &{
& && && && && && && && && && &&&delay_ms(10);key_handle();
& && && && && && && && &}
& && && && && & }
感谢大佬!!!
(641.16 KB, 下载次数: 4)
13:11 上传
这是开发板上的显示
(39.74 KB, 下载次数: 1)
13:13 上传
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
有可能一个是公阴&&一个是公阳&&,你先检查一下
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
管脚不对应,去看看你开发的原理图,对应引脚就行了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限100
首先先确定你的开发板数码管和你仿真上的型号是否一致(引脚参数是否一致)
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
首先先确定你的开发板数码管和你仿真上的型号是否一致(引脚参数是否一致)
引脚都对上了{:1_914:}
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限25
P0=SEG_CODE[array];& &--- 这是什么鬼???
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
帮楼主顶一下吧,单片机我还得等到明年学呢。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.豆丁微信公众号
君,已阅读到文档的结尾了呢~~
单片机控制数码管 按键控制数码管 单片机数码管 单片机数码管程序 单片机数码管显示 单片机数码管时钟 单片机驱动数码管 单片机数码管c程序 单片机共阴数码管 按键数码管
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
51单片机C编程(按键控制数码管显示)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='http://www.docin.com/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度_百度知道
51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度
51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度,速度变为越来越快,或越来越慢?...
51单片机怎么用一个按键控两个数码管,按一下改变两个数字的显示速度,速度变为越来越快,或越来越慢?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证行家
采纳数:14430
获赞数:20144
国家科技进步奖
#include&reg51.h&#defineuchar distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
//0到fuchar number,dat,dattop=10,cnt=0;sbit keyu=P1^0;sbit keyd=P1^1;void t0isr() interrupt 1{TH0=()/256;TL0=()%256;number++;if(number&1)number=0;switch(number){case 0:P2=0x02;P0=distab[dat/10];case 1:P2=0x01;P0=distab[dat%10];default:}}void t1isr() interrupt 3{TH1=()/256;TL1=()%256;cnt++;if(cnt&=dattop){cnt=0;dat++;dat%=100;}}main(){TMOD=0x11;TH0=()/256;TL0=()%256;TH1=()/256;TL1=()%256;TR1=1;ET1=1;TR0=1;ET0=1;EA=1;while(1){if(keyu==0){while(keyu==0);if(dattop&100)dattop++;}if(keyd==0){while(keyd==0);if(dattop&0)dattop--;}}}
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。后使用快捷导航没有帐号?
请完成以下验证码
查看: 1527|回复: 6
独立按键影响数码管显示
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
大家好 我是一枚刚学51的小学弟 最近做一个类似比赛计时秒表的东西,现在遇到一些问题 想求助大家一下。
使用定时器中断使时间增加,外部中断一 用来控制计时的开始和暂停,外部中断0 控制 计数的增加,现在还需要增加清零,和设定 30S,60S倒计时功能,可是在增独立按键时 每次按下按键都会引起数码管显示的抖动 可能原因是按键消抖时间引起的,但是我也解决不了 所以求组大家。谢谢大家,在论坛回复或是+QQ谢谢大家了、
在线时间5159 小时
威望21008分
芯币67224枚
E金币250枚
TA的帖子TA的资源
“可能原因是按键消抖时间引起的”
难道按键消抖,你关掉了中断?
或者你的显示,也是空指令循环延时?
在线时间502 小时
E金币157枚
TA的帖子TA的资源
一粒金砂(高级), 积分 372, 距离下一级还需 128 积分
一粒金砂(高级), 积分 372, 距离下一级还需 128 积分
你最好是晒程序出来让大家看看 这样才好找原因
在线时间1555 小时
威望6548分
芯币24220枚
E金币400枚
TA的帖子TA的资源
尽量不要用死等
在线时间1544 小时
威望6430分
芯币4324枚
E金币192枚
TA的帖子TA的资源
五彩晶圆(高级), 积分 6430, 距离下一级还需 3570 积分
五彩晶圆(高级), 积分 6430, 距离下一级还需 3570 积分
如果是初学51的话,郭天祥有本书叫做新概念51单片机C语言入门提高开发拓展全攻略(附盘),您可以下载电子版的参考下,或者在下载中心搜搜看,有pdf版本的哦。
在线时间240 小时
芯币1188枚
TA的帖子TA的资源
纯净的硅(中级), 积分 856, 距离下一级还需 344 积分
纯净的硅(中级), 积分 856, 距离下一级还需 344 积分
按键扫描用死等了?
或者用太长时间的消抖时间?
数码管可以用定时器中断执行,这样就不会有闪烁了。
在线时间131 小时
TA的帖子TA的资源
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
用数码管显示程序作消抖延时。扫描一次耗时多少,需要几次扫描达到消抖延时要求,你自己计算吧。
论坛测评队员
EEWORLD 官方微信
Powered by查看: 336|回复: 1
单片机中断与数码管动态扫描(含按键控制方法)仿真和源码
& &利用中断与定时器来实现99秒的秒表& &
& &按键可以暂停
当然也可以清零 可以参照我上一个帖子自己再给按键加一些功能
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
#include &reg52.h&
sbit p1=P1^0;
sbit p2=P1^1;
sbit k1=P1^7;
unsigned char code LedChar[] = { //数码管显示字符转换表
& & 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
& & 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
};
unsigned char LedBuff[6]= { //数码管显示缓冲区,初值 0xFF 确保启动时都不亮
& & 0xc0,0xc0
};
char scan[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char i = 0;&&//动态扫描的索引
unsigned int cnt = 0;
bit flag=0;//记录 T0 中断次数
unsigned long sec = 0;&&//记录经过的秒数
void debouncer();
void main(){
& &
& & EA = 1;&&//使能总中断
& & TMOD = 0x01;&&//设置 T0 为模式 1
& & TH0 = 0xFC;&&//为 T0 赋初值 0xFC67,定时 1ms
& & TL0 = 0x18;
& & ET0 = 1;&&//使能 T0 中断
& & TR0 = 0;
& & ET1=1;
& & TR1=0;
& & TH1=0
& & TL1=0x18;& & & &
k1=1;& & & & //启动 T0
while (1){
& & & && &
& & & & if(k1==0&&flag==0){& &//按键按下不放 开始计时& & 松开立即停止计时,示数定在当前计数数值
& & & && &debouncer();
& & & && &TR0=1;&&//打开定时器中断0
& & & & & & & & TR1=1;&&//打开定时器中断1
& & & & & & & & flag=1;
& & & & & & & & while(k1==0);&&/*这两句防止在 按键按下的短时间内程序跑飞到下一个if语句*/
& & & & & & & & debouncer();
& & & & & & & &
& & & & }
& & & &
& & & & if(k1==0&&flag==1){& &//此时 k1==0,可以实现第二次功能& &若k1==1即为按键松开产生动作
& & & && &debouncer();
& & & & & & & & TR1=0;& & //关闭定时器中断1 使得程序停止在当前时刻
& & & && &flag=0;
&&& & & & while(k1==0);
& & & &&&& & & & debouncer();
& & & & }
& & & & & & & &
&&
& & }
}
/* 定时器 0 中断服务函数&&控制位 并显示对应数值 */
void InterruptTimer0() interrupt 1{
& & TH0 = 0xFC;&&//重新加载初值
& & TL0 = 0x18;
& & cnt++;&&//中断次数计数值加 1
& &
& & //以下代码完成数码管动态扫描刷新
& & P2 = 0xFF;
& & //显示消隐
& & switch (i){
& && &&&case 0: p2=1;p1=0; i++; P2=LedBuff[0];&&//打开个位,关闭其他位,并给P2端口赋个位相应数值断码
& && &&&case 1: p1=1;p2=0; i=0; P2=LedBuff[1];&&//打开十位,关闭其他位,并给P2端口赋十位相应数值断码
& && &&&default:
& & }
}
void InterruptTimer1() interrupt 3{& && && && &/* 定时器 1 中断服务函数&&控制段并 将要显示的数值断码 赋值到数组中等待调用 */
TH1=0xc0;
& & & & TL1=0x18;
& && &if (cnt &=800){&&//判断 T0 溢出是否达到 1000 次& &此处理论上写1000,但是实际写800是因为为了消除计时误差 800这个数
& && && && &cnt = 0;&&//达到 1000 次后计数值清零
& && && && &sec++;&&//秒计数自加 1
& && && &&&if(sec&99)sec=0;
& && && && &//以下代码将 sec 按十进制位从低到高依次提取并转为数码管显示字符
& && && && &LedBuff[0] = LedChar[sec%10];
& && && && &LedBuff[1] = LedChar[sec/10];
& && && &&&
& && &&&}
}
& &void debouncer(){&&//延时20ms按键消抖
& &
& & & && &for(i=0;i&2400;i++);
所有资料51hei提供下载:
(15.26 KB, 下载次数: 6)
23:07 上传
点击文件名下载附件
共享资料的黑币奖励!
这个是独立按键控制的
#include&reg52.h&
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit K1=P3^4;
sbit K2=P3^5;
sbit K3=P3^6;
sbit K4=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num1,num2,shi1,ge1,shi2,ge2;
void delay(uint z)
& & & & uint x,y;
& & & & for(x=z;x&0;x--)
& & & & & & & & for(y=110;y&0;y--);
void display(uchar num1,uchar num2)
& & & & shi1=num1/10;
& & & & ge1=num1%10;
& & & & shi2=num2/10;
& & & & ge2=num2%10;
& & & & dula=1;
& & & & P0=table[shi1];
& & & & dula=0;
& & & & P0=0
& & & & wela=1;
& & & & P0=0
& & & & wela=0;
& & & & delay(1);
& & & & dula=1;
& & & & P0=table[ge1];
& & & & dula=0;
& & & & P0=0
& & & & wela=1;
& & & & P0=0
& & & & wela=0;
& & & & delay(1);
& & & & dula=1;
& & & & P0=table[shi2];
& & & & dula=0;
& & & & P0=0
& & & & wela=1;
& & & & P0=0
& & & & wela=0;
& & & & delay(1);
& & & & dula=1;
& & & & P0=table[ge2];
& & & & dula=0;
& & & & P0=0
& & & & wela=1;
& & & & P0=0xf7;
& & & & wela=0;
& & & & delay(1);
void key()
& & & & if(K1==0)
& & & & & & & & delay(5);
& & & & & & & & if(K1==0)
& & & & & & & & {
& & & & & & & & & & & & TR0=0;
& & & & & & & & & & & & while(!K1);
& & & & & & & & }
& & & & if(K2==0)
& & & & & & & & delay(5);
& & & & & & & & if(K2==0)
& & & & & & & & {
& & & & & & & & & & & & if(num1==0)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & num1=60;
& & & & & & & & & & & & }
& & & & & & & & & & & & num1--;
& & & & & & & & & & & & while(!K2);
& & & & & & & & }
& & & & if(K3==0)
& & & & & & & & delay(5);
& & & & & & & & if(K3==0)
& & & & & & & & {
& & & & & & & & & & & & num1++;
& & & & & & & & & & & & if(num1&=60)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & num1=num1-60;
& & & & & & & & & & & & }
& & & & & & & & & & & & while(!K3);
& & & & & & & & }
& & & & if(K4==0)
& & & & & & & & delay(5);
& & & & & & & & if(K4==0)
& & & & & & & & {
& & & & & & & & & & & & TR0=1;
& & & & & & & & & & & & while(!K4);
& & & & & & & & }
void inint()
& & & & TMOD=0x01;
& & & & TH0=()/256;
& & & & TL0=()%256;
& & & & EA=1;
& & & & ET0=1;
& & & & TR0=1;
void main()
& & & & inint();
& & & & while(1)
& & & & & & & & key();
& & & & & & & & display(num1,num2);
void zhongduan()interrupt 1
& & & & TH0=()/256;
& & & & TL0=()%256;
& & & & aa++;
& & & & if(aa==20)
& & & & & & & & aa=0;
& & & & & & & & num2++;
& & & & & & & & if(num2==60)
& & & & & & & & {
& & & & & & & & & & & & num2=0;
& & & & & & & & & & & & num1++;
& & & & & & & & & & & & if(num1==60)
& & & & & & & & & & & & & & & & num1=0;
& & & & & & & & }
Powered by

我要回帖

更多关于 单片机独立按键程序 的文章

 

随机推荐