红绿灯编程实现_第1页
红绿灯编程实现_第2页
红绿灯编程实现_第3页
红绿灯编程实现_第4页
红绿灯编程实现_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、红绿灯编程实现图示2状态图3伪码While(1) A红=B红=C绿=0;A绿=B绿=C红=1; delay 100s; A绿=B红=C红=0;A红=B绿=C绿=1; delay 100s; A红=B绿=C红=0;A绿=B红=C绿=1; delay 100s;4硬件支持的分析我们有4个Led,用于表示6个灯?Led0 亮表示 A路口绿灯亮 灭表示A路口红灯亮Led1 亮表示B路口绿灯亮 灭表示B路口红灯亮Led2 亮表示C路口绿灯亮 灭表示C路口红灯亮 5Include头文件#include #include #include #include 6预处理 所谓预处理是指在进行编译的第一遍扫描之前

2、所作的工作。宏定义#define 允许用一个标识符来表示一个字符串, 称为宏。文件包含#include 注意实际情况中的重定义情况。7子函数int light_red(int fd, char lukou)int light_green(int fd, char lukou)8函数库函数和自定义函数 printf 、 scanf 、 getchar函数的特性 返回值,参数,变量的有效区域 函数,变量的申明9子函数输入参数判断 if(fd 0) return -1; if(lukou != A) & (lukou != B) & (lukou != C) return -1; 10语句结构分支语

3、句 if语句,switch语句循环语句 while语句,for语句转移语句 break语句,return语句11Switch分支语句 switch(lukou) case A: ioctl(fd, 0, 0); break; case B: ioctl(fd, 0, 1); break; case C: ioctl(fd, 0, 2); break; default: break; 12文件操作 文件操作 open open(/dev/leds, 0); ioctl ioctl(fd, 0, 1); close close(fd);13ioctlint ioctl(int handle, in

4、t cmd,int *argdx, int argcx); ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就 是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。其中fd就是用户程式打开设备时使用open函数返回的文件标示符,cmd就是用户程式对设 备的控制命令,至于后面的省略号,那是一些补充参数,一般最多一个,有或没有是和 cmd的意义相关的。 ioctl函数是文件结构中的一个属性分量,就是说如果你的驱动程式提供了对ioctl的支 持,用户就能在用户程式中使用ioctl函数控制设备的I/O通道。14openint open( const

5、char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode);返回值若所有欲核查的权限都通过了检查则返回0 值,表示成功,只要有一个权限被禁止则返回-1。参数pathname 指向欲打开的文件路径字符串。下列是参数flags 所能使用的旗标: O_RDONLY 以只读方式打开文件 O_WRONLY 以只写方式打开文件 O_RDWR 以可读写方式打开文件。 上述三种旗标是互斥的,也就是不可同时使用,但可与下列的旗标利用OR(|)运算符组合。15O_CREAT 若欲打开的文件不存在则自动建立

6、该文件。 O_EXCL 如果O_CREAT 也被设置,此指令会去检查文件是否存在。文件若不存在则建立该文件,否则将导致打开文件错误。O_NOCTTY 如果欲打开的文件为终端机设备,不将该终端机当成进程控制终端机。 O_TRUNC 若文件存在并且以可写的方式打开时,此旗标会令文件长度清为0,而原来存于该文件的 资料也会消失。 O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。 O_NONBLOCK 以不可阻断的方式打开文件,也就是无论有无数据读取或等待,都会立即返回进程之中。 O_NDELAY 同O_NONBLOCK。 O_SYNC 以同步的方式打

7、开文件。 O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,会令打开文件失败。 O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,会令打开文件失败。16参数mode 组合此为Linux2.2以后特有的旗标,以避免一些系统安全问题。参数mode 则有下列数种组合,只有在建立新文件时才会生效,此外真正建文件时的权限会受到umask值所影响,因此该文件权限应该为(mode-umaks)。 S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行的权限。 S_IRUSR 或S_IREAD, 00400权限,代表该文件所有者具有可读取的权限。

8、 S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。 S_IXUSR 或S_IEXEC, 00100 权限,代表该文件所有者具有可执行的权限。 S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。 S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。 S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。 S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。 S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。 S_IROTH 00004 权限,代表其他用户具有可读的

9、权限 S_IWOTH 00002权限,代表其他用户具有可写入的权限。 S_IXOTH 00001 权限,代表其他用户具有可执行的权限。17系统延时接口unsigned int sleep(unsigned int seconds); 秒级int usleep(useconds_t usec); 微秒级18主函数功能实现int main(int argc, char *argv)int fd;fd = open(/dev/leds, 0);if(fd 0) printf(Open device errorn); return -1;19While语句while(1) light_red(fd,

10、A); light_red(fd, B); light_green(fd, C); sleep(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);return 0;22#include #include #include #include int light_red(int fd, char cross);i

11、nt light_green(int fd, char cross);int get_numcar();unsigned int sleep(unsigned int seconds); /the space of time is second(s)int usleep(useconds_t usec); /the space of time is microsecnd(us)int main(int argc, char *argv)int fd;fd = open(/dev/leds, 0);if(fd 0) printf(Open device errorn); return -1;wh

12、ile(1) light_green(fd, A); / A represent straight light_red(fd, a); / a repersent bend light_green(fd, B); / B represent straight light_green(fd, b); / b represent bend sleep(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); l

13、ight_green(fd, a); light_red(fd, B); light_green(fd, b); sleep(get_numcar(); light_red(fd, A); light_red(fd, a); light_red(fd, B); light_red(fd, b); sleep(get_numcar();close(fd);return -1;23int light_red(int fd, char cross) if(fd 0) return -1; if(cross != A) & (cross != a) & (cross != B)& (cross !=

14、b) return -1; switch(cross) case A: ioctl(fd, 0, 0); break; case a: ioctl(fd, 0, 1); break; case B: ioctl(fd, 0, 2); break; case b: ioctl(fd, 0, 3); break; default: return 0;24int light_green(int fd, char cross)if(fd 0) return -1; if(cross != A) & (cross != a) & (cross != B)& (cross != b) return -1; switch(cross) case A: ioctl(fd, 1, 0); break

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论