我想设计一个c语言 按键检测 如果按下就执行测温程序 如果没按下就一直循环直到检测按下 怎呢弄

我想设计一个c语言 按键检测 如果按下就执行测温程序 如果没按下就一直循环直到检测按下 怎呢弄,第1张

#include <reg51h>

#define uchar unsigned char

#define uint unsigned int

sbit led1 = P2^0;//定义管脚;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit key = P1^0;

uchar tcount=0,count=0;//定义时间变量和按键计数变量;

void Delay(uchar i)//机械延时;

{

while(--i);

}

void LedLight(void)//LED控制函数

{

switch(count)

{

case 3 : led1 = 0;break;//3下时,LED1亮;

case 5 : led2 = 0;break;//5下时,LED2亮;

case 7 : led3 = 0;break;//7下时,LED3亮;

case 9 : led4 = 0;break;//9下时,LED4亮;

case 11: led5 = 0;break;//11下时,LED5亮;

case 13: led6 = 0;break;//13下时,LED6亮;

default: P2 = 0xff;break;//其余的都不亮;

}

}

void InitTimer0(void)//定时器0初始化;

{

TMOD = 0x00;

TH0 = (65536-50000)/256;

TL0 = (65536-50000)%256;

TR0 = 1;

}

void main(void)//主函数

{

InitTimer0();

while(1)//无限循环;

{

if(key==0)//检查按键是否按下

{

Delay(10);//机械延时;

if(key==0){count++;}//按键计数;

while(key==0);

}

if(TF0==1)//复位定时器0;

{

TF0=0;

TH0 = (65536-50000)/256;

TL0 = (65536-50000)%256;

tcount++;

if(tcount==20)//1秒的时间;

{

LedLight();

Delay(100);

count=0;//复位按键计数变量;

}

}

}

}

*** 作系统,有两个层次,第一个层次是对组装起电脑的各个硬件的驱动程序;第二个是建立在驱动程序上的各项应用程序,比如桌面显示、键盘监听后的处理程序等等。如果想要进行监听键盘,那么就需要获取到所使用 *** 作系统给出的api接口,以windows系统为例,是用c和c++进行编写的,所以他们提供的api都是c和c++的api接口。于是用java的话就需要用到java的native方法,一个Native Method就是一个java调用非java代码的接口。所以3个步骤:

1、引用java native方法。

2、研究windows api。

3、调用windows api中的键盘监听接口,完成程序。

单片机程序是基于硬件基础上开发的,你至少添加注释和硬件环境说明,不然大家都不知道怎么帮你。

你直接给出代码,也不清楚需要指正什么,这里也没有设置时间/闹钟的代码,发文前应该清楚表达要问的内容。

1)假设你的晶振是12MHz,那一个机器周期是1MHz,定时器的最长定时周期是(65535/10^6)你想要1/6秒触发一次中断就必须结合软件计时,为了尽量精确:硬件计时40000次,软件计时25次那么定时器的设这应该是TH1=(65535-40000)%256;TL1=(65535-40000)%256,(注意计数器大部分是加法计数)

2)按键监听没有给出思路,也没有处理按键抖动,我只能分析程序:

有一个外部中断触发时间设置,P34设置小时、P35设置分钟,但是调整时间后没有进行显示,你至少要让数码管显示结果才能知道怎么调整。

参照窗口程序的设计,检测按键就是用个while来不断检测是不是按到了某个键,至于要做什么就塞循环里

难道要搞机票预订系统么寒……

C是面向过程的只能这样,否则微软早就改进窗口程序代码了

有独立键盘和距阵键盘的 独立键盘的很简单我就不写了 距阵的我给你写一个

//键盘扫描

uchar Keys_Scan()

{

uchar sCode,kCode,i,k;

//低4 位置0,放入4 行

P1=0xf0;

//若高4 位出现0,则有键按下

if((P1&0xf0)!=0xf0)

{

DelayMS(2);

if((P1&0xf0)!=0xf0)

{

sCode=0xfe; //行扫描码初值

for(k=0;k<4;k++) //对4 行分别进行扫描

{

P1=sCode;

if((P1&0xf0)!=0xf0)

{

kCode=~P1;

for(i=0;i<16;i++) //查表得到按键序号并返回

if(kCode==KeyCodeTable[i])

return(i);

}

else

sCode=_crol_(sCode,1);

}

}

}

return(-1);

#include <biosh>

#include <stdioh>

main()

{

int key;

for(;;)

{

if (bioskey(1)) /有键按下,读取键值/

key=bioskey(0);

else /无键按下,返回0/

key=0;

switch(key)

{case 0: /无按键,执行该 *** 作/

case 0xXXXXH:/不同键值,做不同处理/

。。。。。

}

}

}

该程序段功能:

判断是否有键按下,若有进行不同 *** 作,若无进行其他 *** 作。

相关原理:

函数名: bioskey

功 能: 直接使用BIOS服务的键盘接口

函数原型:int bioskey (int cmd)

说明:bioskey()的函数原型在biosh中

bioskey()完成直接键盘 *** 作,cmd的值决定执行什么 *** 作。

cmd = 1:

当cmd是1,bioskey()查询是否按下一个键,若按下一个键则返回非零值,否则返回0。

键盘有按键时,会把键值(扫描码)存入缓冲区,当需要判断是否有键按下时,扫描缓冲区,为空则无键按下,不为空则有键按下。注意:该功能并不清空缓冲区。

cmd = 0:

当cmd是0,bioskey()返回键盘键入的值。它返回一个16位的二进制数,包括两个不同的值。当按下一个普通键时,它的低8位数存放该字符的ASCII码,高8位存放该键的扫描码;对于特殊键(如方向键、F1~F12等等),低8位为0,高8位字节存放该键的扫描码。

其 *** 作步骤为:

1检测缓冲区是否有数据;

2没有则继续第一步;

3读取缓冲区第一个单元中的键盘输入

4读取的扫描码

5将已读取的键盘输入从缓冲区删除

呵呵,这倒是有个函数的!!!

kbhit(),这个函数是你可以随便按一个按键就是1,如果你没有按下任何的按键,那就是0;所以就可以把这个函数用在某个循环上面,比如:

while(!kbhit())

{

}

当你不按按键的时候,kbhit()函数就是0,!kbhit()就是1;所以就一直循环下去,直到你按下按键的时候kbhit()就为1了,!kbhit()就为0了;循环就结束了,但这必须是你按键的时候不是给某个输入函数输入!!!

还是给你个例子吧,下面是一个在TC中获取系统时间的程序,直到你按下按键就不再更新时间了!!!

#include <stdioh>

#include <biosh>

#include <timeh>

#include <conioh>

int main()

{struct tm aa;

int year,month,days,sec,min,hour,tian,xingqi;

long bios_time,t1;

while(!kbhit())

{

bios_time = biostime(0, 0L);

sec=(long)(bios_time / CLK_TCK)%60;

min=(long)(bios_time / CLK_TCK / 60)%60;

hour=(long)(bios_time/ CLK_TCK / 3600);

time(&t1);

aa=gmtime(&t1);

year=aa->tm_year+1900;

month=aa->tm_mon+1;

days=aa->tm_mday;

tian=aa->tm_yday+1;

xingqi=(aa->tm_wday)%7;

gotoxy(5,6);

printf("%d/%2d/%2d %2d:%2d:%2d\t xing qi %d\t\t ben nian di %d tian\n",year,month,days,hour,min,sec,xingqi,tian);

}

getch();

}

以上就是关于我想设计一个c语言 按键检测 如果按下就执行测温程序 如果没按下就一直循环直到检测按下 怎呢弄全部的内容,包括:我想设计一个c语言 按键检测 如果按下就执行测温程序 如果没按下就一直循环直到检测按下 怎呢弄、如何实现java在后台监听键盘、51单片机 c语言写的电子时钟程序 请帮忙指正!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10215543.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存