⑴ c语言编写键盘监控器方法
键控程序简单事例:#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
/*======== ALL VAR==============*/
int bleft=10;
int width=52;
int height=20;
/*=========About Location===========*/
typedef struct
{
int x, y;
int xv, yv;
}Location;/*=============About Welcome=============*/
void menu()
{ printf(" welcom to coming\n");
printf(" =======================================================\n");
printf(" ! In the game please press ESc to quit! !\n");
printf(" ! Enter the game?(Y/N) !\n");
printf(" =======================================================\n");
}
/*=========About border==========*/
void bianjie()
{
int i;
for(i=0;i<bleft;i++)
printf(" ");
for(i=0;i<width;i++)
{ printf("=");
}
for(i=0;i<height;i++)
{ gotoxy(bleft,i);
printf("!");
}
for(i=0;i<height;i++)
{ gotoxy(width+bleft,i);
printf("!");
}
for(i=1;i<width;i++)
{ gotoxy(bleft+i,height-1);
printf("=");
}
}
/*==========About pro things===========
void things()
{
}*/
/*===========About Oprtion=============*/
void xing()
{
int i,key;
Location shili;
shili.x=bleft+1;
shili.y=1;
shili.xv=5;
shili.yv=5;
while(1)
{
key=bioskey(0);
if(key==ESC)/**/
break;
else if(key==UP)
{
for(i=0;i<shili.yv;i++)
{
if(shili.y-shili.yv>1)
{
shili.y--;
gotoxy(shili.x,shili.y+1);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else {
if(shili.y>1)
{
shili.y--;
gotoxy(shili.x,shili.y+1);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else { shili.y++;
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
gotoxy(shili.x,shili.y-1);
printf(" ");
}
}
}
}
else if(key==DOWN)
{
for(i=0;i<shili.yv;i++)
{
if(shili.y+shili.yv<height)
{
shili.y++;
gotoxy(shili.x,shili.y-1);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else {
if(shili.y<height)
{
shili.y++;
gotoxy(shili.x,shili.y-1);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else { shili.y--;
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
gotoxy(shili.x,shili.y+1);
printf(" ");
}
}
}
}
else if(key==LEFT)
{
for(i=0;i<shili.xv;i++)
{
if(shili.x-shili.xv>bleft)
{
shili.x--;
gotoxy(shili.x+1,shili.y);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else {
if(shili.x>bleft)
{
shili.x--;
gotoxy(shili.x+1,shili.y);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else { shili.x++;
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
gotoxy(shili.x-1,shili.y);
printf(" ");
}
}
}
}
else if(key==RIGHT)
{
for(i=0;i<shili.xv;i++)
{
if(shili.x+shili.xv<width+bleft)
{
shili.x++;
gotoxy(shili.x-1,shili.y);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else {
if(shili.x<width+bleft)
{
shili.x++;
gotoxy(shili.x-1,shili.y);
printf(" ");
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
}
else { shili.x--;
gotoxy(shili.x,shili.y);
printf("%c\b", 2);
gotoxy(shili.x+1,shili.y);
printf(" ");
}
}
}
}
}}
/**********************************/
void main()
{ char ch;
clrscr();
menu();
ch=getch();
if(ch=='N'||ch=='n')
return;
else if(ch=='Y'||ch=='y')
{ clrscr();
bianjie();
xing();
}
}C语言获取键值函数事例:/*函数名称: bioskey
函数原型: int bioskey(int cmd)
函数功能: 读取键盘值
函数返回: cmd=0:返回一个键盘值(ascii值放在低位,扫描码放在高位),若无按键,一直等
cmd=1:查询键盘是否按下:0-无键按下,非0-有键按下
cmd=2:返回控制键状态,返回值保存在低8位中
0-右边的shift键按下 5-已打开Scroll_Lock
1-左边的shift键按下 6-已打开Num_Lock
3-Ctrl键按下 7-已打开Caps_Lock
4-Alt键按下 8-已打开Insert
参数说明:
所属文件: <bios.h>*/
#include <stdio.h>
#include <bios.h>
#include <ctype.h>
int main()
{
int key, shift;
int lastshift;
while (1)
{
shift=bioskey(2);
if(shift!=lastshift)
printf("Shift=0x% 02x\n",shift);
if(bioskey(1))
{
key=bioskey(0);
if((key&0xFF)=='q')
break;
printf("Key=0x% 04x",key);
}
lastshift=shift;
}
return 0;
}文件存在性判断事例:#include <stdio.h>
#include <io.h>
int file_exists(char *filename);
int main()
{
printf("Does myfile.FIL exist: %s",file_exists("myfile.FIL") ? "YES" : "NO");
getch();
return 0;
}
int file_exists(char *filename)
{
return (access(filename,0)==0);
} 如还有疑问,请追加!
⑵ 如何用C语言控制报警器报警的频率,求解,希望详细一点!
如果需要报警器鸣叫和停止鸣叫两个状态都按照精确时间来控制的话需要用到中断,如果不需要的话直接用计数及可以搞定
具体实现方法是把两种状态的时间先计算好,然后开中断并计数,可以在中断中进行报警器使能的查询,如果发现鸣叫开始的话即使能开始,就进行计数减一,当计数值为零的时候就将报警器的使能关断这样就可以控制报警器的开通时间
另一种是直接在程序中进行计数根据芯片的主频和代码的周期时间值进行开通和关断的控制,也是通过查询状态的方式进行计数值的加减,最后进行状态转换就好了
⑶ 单片机温度报警器的温度上下限按键调控的C语言程序怎么编
温度报警器就是需要温度传感器不停地对监控的对象进行检测,例如pt100温度传感器,pt100传感器是不同温度下,阻值会不同,在同一温度下,阻值是相同的。根据这个原理通过电路转换成电压,然后模拟量转换成数字量输入到单片机,单片机根据读取到的电压值判断实际温度值,然后根据设定的报警值比较,如果超过 就进行报警动作。
在实际设计过程中那个报警温度的设定,可以直接对那个变量进行加减的,例如
void actfuntion(unsigned char temp)
{
temp++;
}
然后在检测到按键有电平跳变的时候,就调用这个含参子函数对定义的温度设定值进行加操作,减操作也是一样,还可以在调用的后面进行最大值或者最小值的判断。
如果觉得这样一下一下的按太麻烦了,可以对按键进行长按连续触发进行判断,就是在定时器里进行判断按下时间,然后不停的调用这个子函数。
当然这个设定值是需要考虑掉电保存的,或者是按键保存。可以在设定好温度值之后,在按下其他的按键,进行把温度设定值 保存到单片机内部eeprom就可以了,不需要保存太多数据的情况下,现在市面上很多单片机都有的内部eeprom就够用的了,不需要进行外部扩展。
然后在单片机上电,也就是主函数的开头进行读取eeprom中保存的设定值。
⑷ 用C语言编写,两个按钮控制蜂鸣器工作。按钮1按下,蜂鸣器以500Hz的频率工作。按钮2按下,蜂鸣器停止工作
#include"reg52.h"
#defineucharunsignedchar
#defineuintunsignedint
sbitBELL=P1^0;//定义蜂鸣器
sbitkey1=P1^1;//定义按键
sbitkey2=P1^2;//定义按键
uintnum;
/*1ms廷时*/
voiddelay_ms(uintz)
{
uinti,j;
for(i=0;i<z;i++)
for(j=0;j<110;j++);
}
/*定时器初始化*/
voidinit_timer0()
{
TMOD=0x01;
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
EA=0;
ET0=1;
TR0=1;
}
voidmain()
{
BELL=0;
init_timer0();
while(1)
{
if(key1==0)
{
delay_ms(10);//延时消抖
if(key1==0) //再次判断按键是否真的被按下
{
while(key1==0);//等待释放按键
EA=1; //开启总中断
}
}
if(key2==0)
{
delay_ms(10);//延时消抖
if(key2==0) //再次判断按键是否真的被按下
{
while(key2==0); //等待释放按键
EA=0; //关闭总中断
BELL=0; //关闭蜂鸣器
}
}
}
}
voidtimer0()interrupt1
{
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;//中断计时2ms(500Hz),之所以用中断是因为定时比较准确想改延时就把里面的2000改掉,这个数除以1000得的数就是多少毫秒
num++;
if(num==1) //让蜂鸣器工以500Hz频率工作
{
num=0;
BELL=~BELL;
}
}