📄 speed.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/ioctl.h>
#include <unistd.h>
#define MAX_SPEED 150 //最大速度
int speed;
//操作菜单
void Menu()
{
printf("\n---w: speed up ");
printf("\n---s: slow down ");
printf("\n---a: stop ");
printf("\n---q: quit\n");
reutrn ;
}
//读取键盘信息
int getch()
{
char ch;
struct termios save, ne;
ioctl(0, TCGETS, &save);
ioctl(0, TCGETS, &ne);
ne.c_lflag &= ~(ECHO | ICANON);
ioctl(0, TCSETS, &ne);
read(0, &ch, 1);
ioctl(0, TCSETS, &save);
return ch;
}
int main()
{
int input, i, j;
int fd;
int ret;
int spd;
char buf[10];
const int ledfont[] = {0x77/*0*/, 0x41/*1*/, 0x3b/*2*/, 0x6b/*3*/, 0x4d/*4*/,
0x6e/*5*/, 0x7e/*6*/, 0x43/*7*/, 0x7f/*8*/, 0x6f/*9*/ };
speed = 0; //初始化速度
Menu();
fd=open("/dev/led",O_RDWR);
if (fd<0)
{
printf("\nOpen device led error\n");
}
else
{
printf("\nOpen device led success\n");
}
for (j=0; j<4; j++)
ret = ioctl(fd, j, ledfont[0]);
ret = write(fd, buf, 10);
input = getch();
while(input != 'q')
{
switch (input)
{
case 'w':speed++;break;
case 's':speed--;break;
case 'a':speed = 0;break;
default:break;
}
if (speed < 0) //速度小于0时置0
speed = 0;
if (speed > MAX_SPEED) //速度大于上限时警告
{
speed = MAX_SPEED;
spd = speed;
for (i=0; i<9; i++) //闪烁
{
for (j=0; j<4; j++)
ret = ioctl(fd, j, 0x00);
ret = write(fd, buf, 10);
usleep(500000);
for (j=0; j<4; j++)
ret = ioctl(fd, j, ledfont[8]);
ret = write(fd, buf, 10);
usleep(500000);
}
printf("\nWARNING!");
speed=0;//速度置0
}
//write led
spd= speed;
for (i=0; i<4; i++)
{
ret=ioctl(fd,i,ledfont[spd%10]);
spd = spd / 10;
}
ret=write(fd,buf,10);
input = getch();
}
printf("\tcurrent speed: %d\n",speed);
sleep(2);
close(fd);
exit(EXIT_SUCCESS);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -