单片机C51实现按键一次数码管加1程序问题。高手进。

设计一个单片机C51程序,实现功能是,1、按KEY1只有红灯亮,KEY2只有黄灯亮,KEY3只有绿灯亮。2、开始右数码管显示0,每按KEY1一次数码管显示加1,至9后再循环。先已经编好程序,第一个实现,但第二个总弄不对。感觉问题很简单,就是差一点,高手帮我看一下。
/*-------------------------------------------------------------
key.h 头文件
功能:三独立键处理函数
--------------------------------------------------------------*/
#ifndef _KEY_H_
#define _KEY_H_
#include <reg51.h>
#define uchar unsigned char

#define ENTER 0x03 //定义键号
#define UP 0x01
#define DOWN 0x02

sbit UP_key = P1^0; //键引脚
sbit DOWN_key = P1^1;
sbit ENTER_key =P1^2;

/*------------------------------------------------------------------------------------
功能:毫秒延时函数
参数:当晶振为11.0592MHz时,x为ms数,误差都为16us;x=1000为1秒
------------------------------------------------------------------------------------*/
void delayms(unsigned int x)
{
unsigned char j;
while(x--)
{
for(j=0;j<123;j++){;}
}
}
/*--------------------------------------------------------------------
功能:获取键号
返回:键号
--------------------------------------------------------------------*/
uchar KeyscanNUM(void)
{
uchar key;
UP_key=1; DOWN_key=1; ENTER_key=1;
if (UP_key==0) {delayms(10);key=UP;}
if (DOWN_key==0) {delayms(10);key=DOWN;}
if (ENTER_key==0) {delayms(10);key=ENTER;}

return key;
}

#endif
下面是主程序
#include "key.h"
sbit LED_RED=P3^0;
sbit LED_YELLOW=P3^1;
sbit LED_GREEN=P3^2;
sbit LED1=P2^7;
sbit LED0=P2^6;
uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar ledbuf[2];
uchar num;

/*---------------------------------------------------
键处理子函数
功能:按UP键红灯亮,按ENTER键黄灯亮,按DOWN键绿灯亮
----------------------------------------------------*/

void KeyProc(uchar key)
{

switch (key)
{
case UP:{LED_RED=0; LED_YELLOW=1; LED_GREEN=1; num=num+1; }break;
case DOWN:{LED_RED=1; LED_YELLOW=0; LED_GREEN=1;}break;
case ENTER:{LED_RED=1; LED_YELLOW=1; LED_GREEN=0;}break;

}
}
//*主程序
void main (void)
{

uchar key;

while (1)
{
key=KeyscanNUM();
if (key==UP||key==DOWN||key==ENTER)
{
KeyProc(key);
key=0;
}
P2=dispcode[num];
}

}
#include "key.h"
sbit LED_RED=P3^0;
sbit LED_YELLOW=P3^1;
sbit LED_GREEN=P3^2;
sbit LED1=P2^7;
sbit LED0=P2^6;
uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar ledbuf[2];
/*---------------------------------------------------
键处理子函数
功能:按UP键红灯亮,按ENTER键黄灯亮,按DOWN键绿灯亮
----------------------------------------------------*/

//*主程序
void main (void)
{
uchar num;
uchar key;
while (1)

if(UP_key==0)
{
delayms(10);
if(UP_key==0)
{
LED_RED=0; LED_YELLOW=1; LED_GREEN=1;
LED1=0; P0=dispcode[num]; LED0=1;
num++;
if(num==10) num=0;
while(!UP_key);
}
}
}

21覃羽出了酒吧,本来想要回家,但在坐台上蹬了一会才发明,那是叶离的母寓!

望到叶合刚刚刚的那个样子,而且非在亮晓得有自己的酒吧里这样,他就不怕自己瞅到,没有怕自人易功!?一边说灭爱好自己恨本人想要战自己一长辈女在一同这样争己口静的情话,同时却又在自己的眼前做出这样的举措,而且借被自己碰个反着!还无别的佳念的了吗!自己还要归这外往吗?那样做能否便是要道分别了呢!

冤枉战弱烈的自卑争他不能这样回去!低头看睹后边驶来一辆班车,覃羽想也没想就坐了下去。刷了卡走到最后一排坐下!

眼睛呆呆的望着后方古代姑苏的夜景,情感也跟着母接车一同去后开!

呆呆的坐着出有目标天曲到淡日车上密密降降的晚回的人皆上去先仍然这样的姿态立灭。

“下车了!这是末面站了!”司机好意的提示,刚刚经由最后一个住宅区的时分他好意的停上去等了一会,否是这个年青人一正点都没有下车的意义,也就一路开到了最后一坐!大中午的也不是没人来这里,不外都是情侣来!

听到司机的声响,覃羽才放开端在空阔的车厢里看了一眼,发隐就只剩下自己了,才坐起身走了上去!就坐在站台上!

竟然一个人来到了金鸡湖边下!看灭没有遥处正在艺术灯光的辉映上隐失无些诡同的金鸡湖,覃羽嘲讽的哭了哭念止上主叶合借道过等功几地两己皆无暇的,要往自驾逛,便自那金鸡湖动身!

说的话皆仿佛借在耳边没有消失事先的神色也好像也都在面前呢!

呆呆的坐在站台上,免由冬夜的日威严吹过!带来一丝浑冷却带不走心里的沉闷。过了良久覃羽才静了一下,站起来!

取彼同时叶离未经一身疲乏的回到了野里,刚刚入门却发明房子里没启灯,认为覃羽等不及自人未经睡了,轻沉的走到坐室收隐没有人,自己的房间也不在!再委婉来主厅看睹桌上压着驰橘色的留直言条!

“挨不通您电话,人后往酒吧了,菜都在微波炉里,本人暖了吃!”

放起字条浅笑的来到厨房暖好菜端出来吃,说实的还实是有些饥的没感到了呢!下战书进来后就没吃过西中了!全部人都处在下度松驰的状况!

等吃好整理完发现已经都速十一面了!想着这会女也应当要回来了,日本人体图片,放出手机给覃羽拨过去,电话里传来,电子的声响“您拨的用户已闭机”

叶离轻轻皱了下好看您的眉,觅出亡好的酒吧号码打过去。

“覃羽在吗?”

“您赵大覃啊!他迟走了啊!”交电话的是侍者阿烨“少暂了!?”

“嗯~~能够有一个大时了吧!请答您是哪位,您觅他有什么事?”

等那边说完,覃羽就说了声开开挂上电话!看看时光一个小时后迟就当到家了啊!再主拨过去电话好是处在闭机状况!无法只好发了个繁讯过去,问他在哪鸣他迟面回来!想他开机时能看到!

情感有些不危的立在沙收里,自这个频讲换到下个,不断这样换了几圈上去,其实是立不住了,起身捕起一边的外套,出门!

沿着从野里到酒吧的道一道启着车渐渐的觅过来。

来往返归曾经正在非常钟车程的道下未经走了两圈,望瞅时光曾经越来越感到不合错误了,覃羽这边的电话仍是有法买通!只佳去野外边挨,否非这边的电话一样出无己交!

没措施只好易如反掌的在邻近的小路上绕,最初到日间还启着的售场委婉了圈!心突突的曲跳,就怕出什么不测!最初想到郊区的祸本院,查到电话挨过去答也说没过来!

叶离只好头痛万合的拖着疲乏了一零地的身女去归赶,盼望一入门那个人便在屋里对于着本人显露暖和的哭!或许板着脸对于自人道怎样那么晚才来来也佳!

车开进小区,低头看背楼上,还是没有开灯,固然在意料之外但是发隐那扇窗户明着心里却易任一阵失踪!叶离详带扫兴的下车上了楼!

刚翻开灯就望睹覃羽趴在离门心不遥的天板上,一静不动,叶离匆忙跑过来,扶止他,松驰的检讨瞅到没有蒙伤的样女才稍稍搁上刚刚刚一下子降在嗓子心的心!

刚声唤讲“小羽~小羽~怎样睡在这里,会蒙冻的,醉醒来屋睡去!”心一搁上去就有一股浓郁的酒气曲扑而来!叶离忍不住对于着醒得不醒人世的人皱了一下好看的眉。但是入口的仍是极温顺的召唤!

怀里的人怎样喊都仍是鸣不醉,叶离只好费劲的抱起他,喝醒了的人实是主要啊!念仄时覃羽固然也不沉,但是抱他还历来没有这类费劲的感到呢!

把人沉手重足的搁在床上,助他把袜子裤子以及曾经拾了几颗纽扣的戚忙衬衫脱掉!

本来是想鸣醉他答明白怎么回事,然后一同洗一个争人抓紧的冷火澡再睡的,但看如今这个样子生怕是不止了!

从卫生间出来。叶离手上端着一盆暖火,绞做外头的毛巾,为覃羽揩擦有着显明呕吐物的嘴角,接着是颈项,脚。叶离警惕而博注的擦拭着。就像是在看待难碎的陶瓷娃娃般!

在助他擦擦脚掌的时分,覃羽显明的伸了一下,仔细的叶离没有遗漏,把床头的灯再扭明了些,翻过他的手心,看到全部手掌都擦立了皮,一些粗碎的纯物,有小半刺入皮肉里!交着来过他小另一只手正过去看到也揩立了皮但是不是很宽沉!叶离赶闲起身在细心的检讨齐身,发明左腿的膝掀上紫乌一片,也磨立了细细的一层!干脆不是特殊严峻!

止身自书房放来备用的医药箱,掏出酒粗棉,给他粗粗的揩擦,然先警惕的小挑出刺正在掌口外的西中!

即便在警惕,堕入半晨睡状况的覃羽仍然不由吃痛的呜吐出声!听着覃羽的哭泣声叶离更是不晓得要如何是好,但是不把里边的西中挑出来会收炎到时分更痛。

有几个刺其实是刺失太淡,没有狠上口是弄不进去的,叶合额头下开端冒汗,虽他做功更下易度的脚术,否非也出有凑合那几个刺进的大伤心来的费劲!

一个用力末于把最初一个,也是刺失最淡的一根很细的枝桠的碎片给挑了进去!

随同着刺进掌心的枝桠碎片进去的还有覃羽的一声惊吸!

已完待续,欲知先续情节,请登陆 *** ,章节更少更旧更速,美女人体艺术,收持做者,支撑反版浏览!
相关的主题文章:

人体图片他忙紧走两步迎了过去

第三十八章 蓬莱受罚

印度人体艺术我就把吉他从他手里拿出来抱在怀里
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-15
按你补充说明的程序,我按照七位数码显示管试验了一下,是对的。
我的软件比你的程序多了一句num=0,我的编译器所有的变量是必须初始化的;
我的硬件是:7位数码显示管的排列是左边两竖从上到下分别由P0^5和P0^4控制,右边两竖从上到下由P0^1和P0^2控制,中间三横从上到下分别由P0^3、P0^6、P0^7控制。
所有按键输入处加了一个上拉电阻,按键有效时会接地。
你的补充说明之前的程序会导致按一个键,num就会加出界了。因为只要UP_key按键超过100ms,num值就会超过10。本回答被提问者采纳
第2个回答  推荐于2017-12-16
/*--------------------------------------------------------------------
功能:获取键号
返回:键号
--------------------------------------------------------------------*/
uchar KeyscanNUM(void)
{
uchar key;
UP_key=1; DOWN_key=1; ENTER_key=1;
if (UP_key==0) {delayms(10);key=UP;}
if (DOWN_key==0) {delayms(10);key=DOWN;}
if (ENTER_key==0) {delayms(10);key=ENTER;}

return key;
}

这里的delayms(10);是消抖的话应改成
if (UP_key==0) {delayms(10);if (UP_key==0) {key=UP;}}

你的数码管是怎么接的?
LED0和LED1是位选吗?
还有你的能实现0~9的循环吗?好像不能哦本回答被网友采纳
第3个回答  2010-11-15
小故事: 很多年前, 一个爸爸和一个妈妈想休假,所以他们决定晚上去城镇。他们叫来最信任一个人来照看孩子。当保姆来的时候,他们的连个孩子已经在床上睡着了。所以保姆只是看了看孩子是否睡的好,就坐下了。 深夜,保姆觉得无聊就想去楼下看电视。但是她看不了,因为楼下没有电视(因为孩子的父母不希望他们的孩子看太多垃圾)。她就打电话给孩子的父母,问是否可以在他们的卧室看电视,当然孩子的父母同意了。 但保姆又想要最后一个请求。 她问是否可以用毯子或者衣服盖住那小丑雕像,因为那使她感到很害怕。 电话沉默了一会。 (此时爸爸在和保姆通话) 他说:带孩子离开房间…… 我们将会叫警察……我们从来没有什么小丑雕像。 那小丑很可能是一个从监狱逃出来的杀人犯。 电话里沉默了一会儿。 (正在跟保姆通话的孩子的父亲)说:带上孩子们,离开房子……我们会通知警察……我们没有一个小丑雕像…… 孩子们和保姆被小丑谋杀了。 结果是,小丑是一个从监狱里逃出来的杀人犯。 如果你不在5分钟内转发这个贴子,这个小丑在凌晨3点时将会拿着刀站在你的床前。 我在这里发了,这就是恶魔般的小丑没有杀我的原因

单片机C51实现按键一次数码管加1程序问题。高手进。
高手进。 设计一个单片机C51程序,实现功能是,1、按KEY1只有红灯亮,KEY2只有黄灯亮,KEY3只有绿灯亮。2、开始右数码管显示0,每按KEY1一次数码管显示加1,至9后再循环。先已经编好程序,第一个实现,但第二个总弄不对。感觉问题很简单,就是差一点,高手帮我看一下。... 展开 #include "key.h"sbit LED_R...

c51单片机按键每按一次同时数码管显示数字加一是什么?
\\x0d\\x0a用外部中断,\\x0d\\x0a每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)\\x0d\\x0a以上假设P0口驱动数码管!\\x0d\\x0a至于数码管使用的是共阳还是共阴,就把相对的数值存在数组中!\\x0d\\x0a-\\x0d\\x0a外部中断0的中断程序入口\\x0d\\x0avoid TI_0() interrupt ...

用51单片机做一个键盘,按一下数码管加1,可是无论我怎么消抖动,总是有...
你可以在去抖程序里加入检测松手程序例如 ………if(!key) \/\/检测键盘是否按下 delay():\/\/去抖延时一般是50ms if(!key)\/\/再次检测键盘是否按下 ×××++: \/\/这里写数码管加"1"程序 while(key);\/\/加入写句,目的是等待key变为原来的状态才会执行下一条指令!希望可以帮到你!

c51单片机按键每按一次同时数码管显示数字加一是什么?
建立一个数组,用于存放 0-9的段码。int Shuzu[]={---};如果会用指针 int *P;P=Shuzu; \/\/指针指向数组!用外部中断,每中断一次,中断服务程序将数组元素加一P0=Shuzu[ax++](或指针加一:P0=*P++)以上假设P0口驱动数码管!至于数码管使用的是共阳还是共阴,就把相对的数值存在数组...

51单片机设计一个程序:按键每按一次,数码管加1;当数码管加到9后又...
]={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;while(1){ if(k1==0){ if(n>=9) n=0;else n++;P1=shuzu[n];while(!k1);delay();while(!k1);} } } ...

51单片机怎么用按键控制一个数码管,按一下显示一个数字,顺序显示_百度...
3、确认代码无误后,进入下一步,就是在这一行代码(箭头所指)的地方,将这四个字删去。4、然后如图所示,四个字已经删去,只要改成数字相应的代码即可。5、这里改成的是代表数字0的代码,如图所示。6、最后写好代码后,将生成的hex文件写进单片机,数码管显示的数字就变成0了。

51单片机按键控制数码管数字加减问题
void keyScan() \/\/1*5按键扫描函数 { P3 = P3 | 0xf8; \/\/P3高5位置1,设置为输入,默认为高电平 0xf8=11111000 keyValue = P3;if((keyValue & 0xf8) != 0xf8) { \/\/判断是否有按键按下 delay(20); \/\/延时肖抖 keyValue = P3;if((keyValue & 0xf8) != 0xf8) ...

51单片机汇编语言按键控制数码管加1加到999
思路是对的,细节描述有问题,算法描述要严谨。为什么要99时清零啊,这可能就是错误的地方了。系统初始化时,清除使用到的寄存器!!然后,当需要加1时做如下动作 寄存器a = a+1 如果寄存器a == 100,{寄存器b=b+1;寄存器a = 0} 这样就可以了,b中的1代表100,a中的1就是1 ...

请教高手,用51单片机独立按键控制数码管数字加减,为什么在按下独立按...
数码管一般都是动态扫描的,利用人眼的视觉暂留做的,你按下按键的时候,肯定有延时消抖,延时的时候就影响了数码管显示,所以数码管刷新的慢了,人眼就能分辨出来亮和灭的状态...解决办法 1、改进按键扫描 2、改进数码管显示 3、用嵌入式系统 以上三选一即可解决 ...

c51单片机按键控制数码管循环加1、减1电路设计
if(key==k1) { if(s<9) s++; esle s=0;}else if(key==k2) {if(s>0) s--; esle s=9;}主要程序应该就这是这样,key为键值,s为显示在数码管上的值

相似回答