C语言如何画图

Python013

C语言如何画图,第1张

framebuffer(帧缓冲)。

帧的最低数量为24(人肉眼可见)(低于24则感觉到画面不流畅)。

显卡与帧的关系:由cpu调节其数据传输速率来输出其三基色的配比。

三基色:RGB(红绿蓝)。

在没有桌面和图形文件的系统界面,可以通过C语言的编程来实现在黑色背景上画图!

用下面的代码,在需要的地方(有注释)适当修改,就能画出自己喜欢的图形!

PS:同样要编译运行后才能出效果。

#include <stdio.h>

#include <sys/mman.h>

#include <fcntl.h>

#include <linux/fb.h>

#include <stdlib.h>

#define RGB888(r,g,b) ((r &0xff) <<16 | (g &0xff) <<8 | (b &0xff))

#define RGB565(r,g,b) ((r &0x1f) <<11 | (g &0x3f) <<5 | (b &0x1f))

int main()

{

int fd = open("/dev/fb0", O_RDWR)

if(fd <0){

perror("open err. \n")

exit(EXIT_FAILURE)

printf("xres: %d\n", info.xres)

printf("yres: %d\n", info.yres)

printf("bits_per_pixel: %d\n", info.bits_per_pixel)

size_t len = info.xres*info.yres*info.bits_per_pixel >>3

unsigned long* addr = NULL

addr = mmap(NULL, len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0)

if(addr == (void*)-1){

perror("mmap err. \n")

单片机可以用汇编语言编程,也可以用高级语言C、Basic编程,也可以用图形化语言编程。工业控制中普遍采用可编程控制器,其CPU模块内的微控制器往往是普通的单片机,而可编程控制器可以梯形图编程,或者用流程图编程。现在的智能教育机器人控制器均用单片机,而这些机器人的编程大多支持流程图编程。上海广茂达电子信息有限公司的能力风暴系列机器人采用VJC可视化流程图与C语言编程;中鸣机器人系列采用机器人快车软件编程,该软件也是可视化流程图与C语言编程;西米亚公司的乐高系列、博思威龙机器人、美国的VEX系列机器人、双龙公司的机器人DIY系列均可以采用可视化流程图与C语言编程。而这些机器人的控制系统核心均为单片机。由此可知,普通单片机的开发一定可以采用流程图编程。其实,机器人的流程图编制软件可以反过来作为相应单片机的编程软件。下面用一个实例详细说明单片机如何用图形化编程。

1 问题描述

某机器上,2台电机通过滚珠丝杠驱动工作台做顺序运动,如图1所示。用单片机系统控制2台电机,实现规定的顺序动作。当行程开关KX1压下时,电机D1带动卡紧机构右移,右移到撞块压下KX2时,电机D1停转,并且这种状态延迟一段时间T1。电机D2按以下顺序开始动作:当行程开关KX3压下时,电机D2带动工作台右移,工作台右移到撞块压下KX4时,电机D2停转,并且这种状态延迟一段时间T2;然后电机D2反转,带着工作台向左返回,工作台返回左侧压下KX3时,电机D2停转,同时电机D1反转,松开卡紧机构直到KX1压下,电机D1停转。

图1 卡紧机构和工作台的顺序动作动作

顺序如图2所示。

图2 动作顺序图

2 单片机控制系统组成

实现上述控制功能的方案有多种,如继电器接触器控制系统、可编程序控制器控制系统、单片机控制系统等。本文用单片机控制系统来实现上述控制动作,单片机控制系统的组成如图3所示。

图3 单片机控制系统结构图

单片机采用Motorola公司的MC68HC11E1。为了仿真实验的需要,单片机控制系统采用上海广茂达电子信息有限公司的能力风暴机器人ASUII中的主控制板。行程开关KX1~KX4用机器人上的碰撞开关来模拟,碰撞开关电路如图4(a)所示。电机D1、D2用机器人2轮的驱动电机来模拟,电路如图4(b)所示。其中,电机驱动芯片选用的是TI公司的SN754410。

图4 能力风暴机器人上的碰撞开关电路和驱动电机电路

3 VJC程序流程

使用能力风暴机器人的编程开发环境VJC1.6(可以从上海广茂达电子信息有限公司网站www.grandar.com上下载)编制、调试和下载程序。针对上述单片机双电机启停控制系统,用VJC1.6编制的流程图如图5所示。实际的单片机控制系统,只要把相应的传感器及其驱动电路、电机及其驱动电路更改成适应实际对象的元器件,就仍然可以用这种单片机控制板和相应的编程软件。更进一步的应用可以扩充软硬件系统。

程序总体为一循环程序。在每一次循环中,依次检测4个碰撞开关,按照电机的动作顺序要求启动或停止电机。程序模块的使用和变量的设置方法此处从略,请参见说明书,或与上海广茂达电子信息有限公司联系。

图5的流程图在VJC1.6环境下可以转化为C语言程序,具体可参看VJC1.6的使用。

在VJC1.6环境下编制的程序,无论是流程图还是C语言程序,均可以直接下载到单片机的闪存或EEPROM中, 这也是这种编程和开发方法受到人们欢迎的原因。但是目前这种方法仅用在以单片机为核心的智能机器人的程序开发之中,还没有专门用于单片机开发的这种图形化编程环境,相信不久的将来就会出现这种方法。

图5 双电机启停控制部分流程图

结语

这里单片机系统实现的功能就相当于一个可编程控制器系统,而且编程语言是流程图语言。可见,某些单片机系统略加扩充就可以成为一个可以使用流程图编程、C语言编程和汇编语言编程的功能相当完备的可编程控制器,从而与现有的可编程控制器在工业控制领域并驾齐驱。

打开APP阅读更多精彩内容

相关推荐

图形

面向STEM教育的图形化编程机器人

2023-01-03

16

Codecraft:嵌入式机器学习的图形化编程

2022-11-08

79

求openharmony图形化的编程软件

2022-05-05

0

Mixly图形化编程软件介绍

2021-09-01

0

最近做了个【51单片机积木式图形化中文编程软件/c语言代码生成器/电路仿真】

2021-08-08

0

浅析Mixly图形化编程软件

2021-08-04

0

Scratch图形化编程软件安装包下载

2021-06-18

752

labview图形化编程分享!

2019-10-20

0

【推荐】Arduino图形化编程软件

2018-05-13

0

LabVIEW图形化编程语言的编程范式

2015-01-19

0

图形化编程软件LabVIEW应用课程

2013-08-01

0

图形化编程

2013-05-24

0

Arduino教程_Arduino图形化编程教程_ArduBlock

2012-09-25

10969

cpuview图形化单片机编程软件下载

2010-04-09

5615

当千本樱遇上步进电机。。。

机械工程 电路设计分析

周广x

2022年02月11日 10:21:57

教你制作流水灯

电工技术 电路设计分析 流水灯

周广x

2022年02月10日 16:20:29

和同学制作特斯拉线圈,暑假特别的一天

元器件 芯片验证板 开发板

周广x

2022年02月10日 16:15:25

高中某UP用7分钟教你制作特斯拉线圈 - 1.高中某UP用7分钟教你制作特斯拉线圈

电气设备 电路设计分析

周广x

2022年02月11日 10:29:51

教你制作LM317扩流可调稳压电源,最大电流能到5A呢!

稳压电源 LM lm317 可调稳压电源

周广x

2022年02

下面举一个用drawpoly()函数画箭头的例子。#include

#include

int main()

{

int gdriver, gmode, i

int arw[16]={200,102,300,102,300,107,330,<br/>100,300,93,300,98,200,98,200,102}

gdriver=DETECT

initgraph(&gdriver, &gmode, "c:\\caic\\bgi")

setbkcolor(BLUE)

cleardevice()

setcolor(12)/*设置作图颜色*/

drawpoly(8, arw)/*画一箭头*/

getch()

closegraph()

return 0

}

设定线型函数

在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。

void far setlinestyle(intlinestyle,unsigned upattern,int thickness)该函数用来设置线的有关信息,其中linestyle是线形状的规定,

见下表:

有关线的形状(linestyle)

━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

─────────────────────────

SOLID_LINE 0 实线

DOTTED_LINE 1 点线

CENTER_LINE 2 中心线

DASHED_LINE 3 点画线

USERBIT_LINE 4 用户定义线

━━━━━━━━━━━━━━━━━━━━━━━━━

有关线宽(thickness)

thickness是线的宽度,见下表。

━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数 数值 含义

─────────────────────────

NORM_WIDTH 1 一点宽

THIC_WIDTH 3 三点宽

━━━━━━━━━━━━━━━━━━━━━━━━━

对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。此进uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。 void far getlinesettings(struct linesettingstypefar *lineinfo)该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:

 struct linesettingstype

 {

 int linestyle

 unsigned upattern

 int thickness

 }