红绿灯编程实现

上传人:汽*** 文档编号:570257733 上传时间:2024-08-03 格式:PPT 页数:26 大小:233.50KB
返回 下载 相关 举报
红绿灯编程实现_第1页
第1页 / 共26页
红绿灯编程实现_第2页
第2页 / 共26页
红绿灯编程实现_第3页
第3页 / 共26页
红绿灯编程实现_第4页
第4页 / 共26页
红绿灯编程实现_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《红绿灯编程实现》由会员分享,可在线阅读,更多相关《红绿灯编程实现(26页珍藏版)》请在金锄头文库上搜索。

1、图示图示2状态图状态图3伪码伪码While(1)A红红=B红红=C绿绿=0;A绿绿=B绿绿=C红红=1;delay100s;A绿绿=B红红=C红红=0;A红红=B绿绿=C绿绿=1;delay100s;A红红=B绿绿=C红红=0;A绿绿=B红红=C绿绿=1;delay100s;4硬件支持的分析硬件支持的分析我我们有有4个个Led,用于表示,用于表示6个灯?个灯?Led0亮表示亮表示A路口路口绿绿灯亮灯亮灭灭表示表示A路口路口红红灯亮灯亮Led1亮表示亮表示B路口路口绿绿灯亮灯亮灭灭表示表示B路口路口红红灯亮灯亮Led2亮表示亮表示C路口路口绿绿灯亮灯亮灭灭表示表示C路口路口红红灯亮灯亮5Incl

2、ude头文件头文件#include#include#include#include6预处理预处理所所谓预处理是指在理是指在进行行编译的第一遍的第一遍扫描之前描之前所作的工作。所作的工作。宏定宏定义义#define允允许许用一个用一个标识标识符来表示一个字符串,符来表示一个字符串,称称为为宏。宏。文件包含文件包含#include注意注意实际实际情况中的重定情况中的重定义义情况。情况。7子函数子函数intlight_red(intfd,charlukou)intlight_green(intfd,charlukou)8函数函数库函数和自定函数和自定义函数函数printf、scanf、getchar

3、函数的特性函数的特性返回返回值值,参数,参数,变变量的有效区域量的有效区域函数,函数,变变量的申明量的申明9子函数输入参数判断子函数输入参数判断if(fd0)return-1;if(lukou!=A)&(lukou!=B)&(lukou!=C)return-1;10语句结构语句结构分支分支语句句if语语句,句,switch语语句句循循环语环语句句while语语句,句,for语语句句转转移移语语句句break语语句,句,return语语句句11Switch分支语句分支语句switch(lukou)caseA:ioctl(fd,0,0);break;caseB:ioctl(fd,0,1);brea

4、k;caseC:ioctl(fd,0,2);break;default:break;12文件操作文件操作文件操作文件操作 open open(/dev/leds, 0); ioctl ioctl(fd, 0, 1); close close(fd);13ioctlnintioctl(inthandle,intcmd,int*argdx,intargcx);nioctl是是设备驱动程序程序中中对设备的的I/O通道通道进行管理的函数。行管理的函数。所所谓对I/O通道通道进行管理,就行管理,就是是对设备的一些特性的一些特性进行控行控制,例如串口的制,例如串口的传输波特率、波特率、马达的达的转速等等。

5、速等等。n其中其中fd就是用就是用户程式打开程式打开设备时使用使用open函数返回的文函数返回的文件件标示符,示符,cmd就是用就是用户程式程式对设备的控制命令,至于的控制命令,至于后面的省略号,那是一些后面的省略号,那是一些补充参数,一般最多一个,有或充参数,一般最多一个,有或没有是和没有是和cmd的意的意义相关的。相关的。nioctl函数是文件函数是文件结构中的一个属性分量,就是构中的一个属性分量,就是说如果你的如果你的驱动程式提供了程式提供了对ioctl的支的支持,用持,用户就能在用就能在用户程式中程式中使用使用ioctl函数控制函数控制设备的的I/O通道。通道。14opennintop

6、en(constchar*pathname,intflags);nintopen(constchar*pathname,intflags,mode_tmode);n返回返回值若所有欲核若所有欲核查的的权限都通限都通过了了检查则返回返回0值,表示成功,只要有,表示成功,只要有一个一个权限被禁止限被禁止则返回返回-1。n参数参数pathname指向欲打开的文件路径字符串。下列是参数指向欲打开的文件路径字符串。下列是参数flags所所能使用的旗能使用的旗标:O_RDONLY以只以只读方式打开文件方式打开文件O_WRONLY以只写方式打开文件以只写方式打开文件O_RDWR以可以可读写方式打开文件。写方

7、式打开文件。上述三种旗上述三种旗标是互斥的,也就是不可同是互斥的,也就是不可同时使用,但可与下列的旗使用,但可与下列的旗标利用利用OR(|)运算符运算符组合。合。15O_CREAT若欲打开的文件不存在若欲打开的文件不存在则自自动建立建立该文件。文件。O_EXCL如果如果O_CREAT也被也被设置,此指令会去置,此指令会去检查文件是否存在。文件若不存在文件是否存在。文件若不存在则建立建立该文件,否文件,否则将将导致打开文件致打开文件错误。O_NOCTTY如果欲打开的文件如果欲打开的文件为终端机端机设备,不将,不将该终端机当成端机当成进程控制程控制终端机。端机。O_TRUNC若文件存在并且以可写的

8、方式打开若文件存在并且以可写的方式打开时,此旗,此旗标会令文件会令文件长度清度清为0,而原来,而原来存于存于该文件的文件的资料也会消失。料也会消失。O_APPEND当当读写文件写文件时会从文件尾开始移会从文件尾开始移动,也就是所写入的数据会以附加的方式,也就是所写入的数据会以附加的方式加入到文件后面。加入到文件后面。O_NONBLOCK以不可阻断的方式打开文件,也就是无以不可阻断的方式打开文件,也就是无论有无数据有无数据读取或等待,都会取或等待,都会立即返回立即返回进程之中。程之中。O_NDELAY同同O_NONBLOCK。O_SYNC以同步的方式打开文件。以同步的方式打开文件。O_NOFOL

9、LOW如果参数如果参数pathname所指的文件所指的文件为一符号一符号连接,会令打开文件失接,会令打开文件失败。O_DIRECTORY如果参数如果参数pathname所指的文件并非所指的文件并非为一目一目录,会令打开文件失,会令打开文件失败。16参数参数mode组合组合n此此为Linux2.2以后特有的旗以后特有的旗标,以避免一些系,以避免一些系统安全安全问题。参数。参数mode则有下列数种有下列数种组合,只有在建立新文件合,只有在建立新文件时才会生效,此外真正建文件才会生效,此外真正建文件时的的权限会受到限会受到umask值所影所影响,因此响,因此该文件文件权限限应该为(mode-umak

10、s)。)。nS_IRWXU00700权限,代表限,代表该文件所有者具有可文件所有者具有可读、可写及可、可写及可执行的行的权限。限。nS_IRUSR或或S_IREAD,00400权限,代表限,代表该文件所有者具有可文件所有者具有可读取的取的权限。限。nS_IWUSR或或S_IWRITE,00200权限,代表限,代表该文件所有者具有可写入的文件所有者具有可写入的权限。限。nS_IXUSR或或S_IEXEC,00100权限,代表限,代表该文件所有者具有可文件所有者具有可执行的行的权限。限。nS_IRWXG00070权限,代表限,代表该文件用文件用户组具有可具有可读、可写及可、可写及可执行的行的权限。

11、限。nS_IRGRP00040权限,代表限,代表该文件用文件用户组具有可具有可读的的权限。限。nS_IWGRP00020权限,代表限,代表该文件用文件用户组具有可写入的具有可写入的权限。限。nS_IXGRP00010权限,代表限,代表该文件用文件用户组具有可具有可执行的行的权限。限。nS_IRWXO00007权限,代表其他用限,代表其他用户具有可具有可读、可写及可、可写及可执行的行的权限。限。nS_IROTH00004权限,代表其他用限,代表其他用户具有可具有可读的的权限限nS_IWOTH00002权限,代表其他用限,代表其他用户具有可写入的具有可写入的权限。限。nS_IXOTH00001权限

12、,代表其他用限,代表其他用户具有可具有可执行的行的权限。限。17系统延时接口系统延时接口unsignedintsleep(unsignedintseconds);秒秒级级intusleep(useconds_tusec);微秒微秒级级18主函数功能实现主函数功能实现intmain(intargc,char*argv)intfd;fd=open(/dev/leds,0);if(fd0)printf(Opendeviceerrorn);return-1;19While语句语句while(1)light_red(fd,A);light_red(fd,B);light_green(fd,C);slee

13、p(10);20While语句语句light_red(fd,C);light_red(fd,B);light_green(fd,A);sleep(10);light_red(fd,A);light_red(fd,C);light_green(fd,B);sleep(10);21Close关闭文件结束关闭文件结束close(fd);return0;22#include#include#include#includeintlight_red(intfd,charcross);intlight_green(intfd,charcross);intget_numcar();unsignedintsle

14、ep(unsignedintseconds);/thespaceoftimeissecond(s)intusleep(useconds_tusec);/thespaceoftimeismicrosecnd(us)intmain(intargc,char*argv)intfd;fd=open(/dev/leds,0);if(fd0)printf(Opendeviceerrorn);return-1;while(1)light_green(fd,A);/Arepresentstraightlight_red(fd,a);/arepersentbendlight_green(fd,B);/Brepr

15、esentstraightlight_green(fd,b);/brepresentbendsleep(get_numcar();light_red(fd, A); light_red(fd, a); light_red(fd, B); light_red(fd, b); sleep(get_numcar(); light_red(fd, A); light_green(fd, a); light_red(fd, B); light_green(fd, b); sleep(get_numcar(); light_red(fd, A); light_red(fd, a); light_red(f

16、d, B); light_red(fd, b); sleep(get_numcar();close(fd);return -1;23intlight_red(intfd,charcross)if(fd0)return-1;if(cross!=A)&(cross!=a)&(cross!=B)&(cross!=b)return-1;switch(cross)caseA:ioctl(fd,0,0);break;casea:ioctl(fd,0,1);break;caseB:ioctl(fd,0,2);break;caseb:ioctl(fd,0,3);break;default:return0;24

17、intlight_green(intfd,charcross)if(fd0)return-1;if(cross!=A)&(cross!=a)&(cross!=B)&(cross!=b)return-1;switch(cross)caseA:ioctl(fd,1,0);break; casea:ioctl(fd,1,1);break;caseB:ioctl(fd,1,2);break;caseb:ioctl(fd,1,3);break; default:return-1;return0;int get_numcar()int i,j;srand(int)time(0);j=1+(int)(10.0*rand()/(RAND_MAX+1.0); return 30+j;2526

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号