linux下没有, 需要用终端IO的写, 你可以到网上搜写好的,或者找一些库
getch按键立即返回, 不用等按回车再返回, getche是getch的有回显版本,
kbhit是检查是否有按键, getch没按键时也不返回, 你可以用kbhit检查下是否按键,有再调用getch
vc里可能只有_getch/_getche/_kbhit
命令行程序这些凑活了, 窗口程序就是另外一回事了
你看过汇编吗?与汇编的格式是一样的。具体就是先开中断允许标志位(IE里面对应的各个位)在设定TMOD工作方式。下一步就是设定初始值了(TH、TL)。设置完这些就可以开定时器了。写中断中段函数是是需要另加interrupt 加上一个常数(比如是定时器0就在后面加上1)。我用89S52芯片编过一个定时器程序你参考一下,希望对你有一点帮助。//功能:感应外界温度并用数码管显示
//时间:2005年6月20日
//设计人:
#include<reg52.h>
#define uchar unsigned char
sbit ad0809_oe=P1^0 //定义各个位
sbit ad0809_start=P1^1
sbit ad0809_ale=P1^2
sbit ls595_rclk=P1^3
sbit ad0809_eoc=P1^5
sbit ls595_oe=P1^4
sbit ls595_ser=P3^0
sbit ls595_srclr=P3^1
uchar nn,mm
uchar code tab[]=
send(uchar) //声明函数
AD(uchar)
void display(uchar)
void init()
//********普通口输入数据*****************
send(uchar shu)//普通口串行输入
{
unsigned char i,k
k=0x01
for(i=0i<8i++)
{
if(k==(k&shu)) //判断每位上是否为1
ls595_ser=1
else
ls595_ser=0
k<<=1 //左移一位
ls595_srclr=0 //输入一个上升沿讲数送入595中
ls595_srclr=1
}
}
//*****************595显示子程序********************
void display(uchar du)
{
uchar ge,shi,flge //ge拆字后个位的存放处shi拆字后十位的存放处flge ℃的存放处
shi=tab[du/10] //拆字
send(shi) //给595送数
ge=tab[du%10]
send(ge)
flge=0xb1
send(flge)
ls595_rclk=0 //上升沿送出数据
ls595_rclk=1
}
//*******************初始化程序********************
void init() //初始化AD、定时器
{
ad0809_start=0 //Start管教上升沿将AD内部寄存器清零
ad0809_start=1
ad0809_ale=1 //ALE高电平选择通道
nn=0
mm=0
TMOD=0x01 //定时器初始化
//IE=0x82
EA=1
ET0=1
TCON=0x00
TL0=(65536-50000)%256//定时50ms
TH0=(65536-50000)/256
}
AD(uchar wen)
{
// unsigned char tt=0
// ad0809_ale=1 //选择通道
ad0809_start=1
ad0809_start=0 //start下降沿启动转换信号
while(ad0809_eoc==0)//判断转换是否结束
ad0809_oe=1 //转换结束送出转换数据
wen=P2
return (wen)
}
//**************中断服务程序*********************
void tiam0() interrupt 1 using 1 //中断服务程序
{
TL0=(65536-50000)%256//定时50ms
TH0=(65536-50000)/256
nn++
if(nn==10)//0.5秒M加一
{
mm++
nn=0
}
}
//****************主程序***************************
void main()
{
unsigned char bb,aa,cc //bb=计算后得到温度,aa=AD输出数据
unsigned char wen //wen存放转换的得到的数据
init()
// wen=17
ls595_oe=0
cc=0
TR0=1
while(1)
{
aa=AD(wen)
// ad0809_oe=0
aa=~aa
bb=aa/4
if(mm==2)
{
mm=0
cc=bb
}
display(cc) //调用显示子程序
}
}
你打算做2次测定工作。第一个2秒内拍入了哪些字符,第二个2秒内拍入了哪些字符。如果你要判断输入的是否是 B, D, 可以自己改一下程序:
去掉 printf("B: %c\n",p)
用:
if ( p == 'B') printf("C\n") 或 if ( (0xff &p) == 'B') printf("C\n") 同你的键盘有关
去掉 printf("E: %c\n",p)
用:
if ( p == 'D') printf("E\n") 或 if ( (0xff &p) == 'D') printf("E\n") 同你的键盘有关
下面 是完整程序。 MS VC++ 6.0 编译器:
#include <stdio.h>
#include <conio.h>
#include <time.h>
int main(){
clock_t t0,dt
int flag
int p
t0 = clock()
printf("=======A========\n")
Lab:
flag = 1
while( !_kbhit() ) {
dt = clock() - t0
if (dt >= 2 * CLOCKS_PER_SEC) flag =0
}
if (flag==0) { printf("2 seconds -- time is over !\n")
} else {
p = _getch()printf("B: %c\n",p)
goto Lab
}
printf("\n=======C=======\n")
t0=clock()
Lab2:
flag = 1
while( !_kbhit() ) {
dt = clock() - t0
if (dt >= 2 * CLOCKS_PER_SEC) flag =0
}
if (flag==0) { printf("2 seconds -- time is over !\n")
} else {
p = _getch()printf("E: %c\n",p)
goto Lab2
}
printf("\n=======D=======\n")
return 0
}