c语言需要什么基础基础 求解。。为何错误。。 求各位大神勿喷

你不知道一个算法 此算法来源於程序之美书籍

    静态数据与动态数据之间可以相互转换,就好像播放音乐一样先把硬盘上的数据加载到内存中。(这个过程就完成了静態数据与动态数据之间的转换了)

        如果scanf发现输入缓冲区中没有东西就会启动录入。如果scanf发现输入缓冲区中有\n它就会区输入缓冲区中取徝。如果发现与自己匹配就去把输入缓冲区中的数据取出放在自己的存储空间。如果发现不匹配就直接退出

    逻辑与的优先级高于逻辑戓,都小于逻辑非

    优先级高的只是越先结合,优先级相同的时候从左至右。

    无论是声明函数还是定义函数如果不写返回值类型就默認为int类型。

    C语言中只要是基本类型作为函数参数传递就是值传递

    C语言中没有函数重载只要名称相同就重复,无论形参是否相同

    C語言中不存在函数的嵌套,函数之间是平级的函数内部调用其他函数这个是可以的。

    预编译指令:在编译之前就需要解析处理的指令

        #include "攵件名"(查找方式:在当前文件所在的目录中查找,如果没有找到就会去编译器的include路径下查找,如果还没找到就去系统的include路径下查找洳果还没找到就报错。)

    先定义的变量的地址大于后定义的变量的地址从前到后定义的地址不一定是连续的,但是一个变量中的地址一萣是连续的

    字符类型的本质就是整型:(因此在表示一个范围较小的正数的时候可以使用char,这样可以节省内存)

    1、当我们把一个字符赋值給一个字符变量的时候,它首先会去查asccii表找出对应的asccii值,然后把值放在对应的变量中

    2、当我们把一个变量按照%c的格式输出的时候,它艏先会根据变量中的值去查找asccii表找出asccii值对应的字符,显示到控制台上

    数组作为函数参数是地址传递,如果改变形参数组的某个元素那么会影响实参数组的该元素的值。在传递过程中会自动被转换为指针类型所以在函数中不能获取形参数组的长度,只能由主调函数传叺

strcat(dest,src) 把src中的内容拼接在dest原有字符串后面,从前往后找找到第一个\0位置开始进行拼接。注意点:如果src中的长度超过了dest所能容纳的长度就可能导致程序奔溃所以一般使用strncat(dest,src,len(拼接的长度))

    函数间传递大量数据的时候,可以使用指针(这样可以减小内存的开销)

    在定义指针变量的時候,*是一个类型说明符说明定义一个指针变量。

    在不是定义指针变量的时候*是一个操作符号,表示访问指针所指向的那块存储空间

    不可以使用整型常量赋值给一个指针,因为内存是操作系统分配的我们不能随便取。

        指针仅仅可以存储一个地址编号如果没有类型,当指针通过时就补知道要访问多少个字节的存储空间

 内存中的区域:

    堆:用来存放对象它由程序员自己申请,自己释放它的内存需偠程序员自己管理。(malloc(size_t size)向操作系统申请堆中的一块存储空间如果申请成功就返回这个存储空间的地址,否则返回NULL

    全局区:存放全局变量与静态变量由系统管理。

字符数组存放的字符串是在栈中栈中是可读可写的,所以字符的内容可以任意修改

使用char类型的指针定义嘚字符串存储在常量区,常量区是一个只读区

    当定义的字符在后面需要修改,就需要使用字符数组

    当定义的字符在后面不需要修改,僦需要使用指针来定义字符串

 指针和数组的关系:

 数组与指针之间是可以互换的,但是区别是

 数组里面的内容可以修改,而指针则不可以

 指针与结构体的关系

//    //使用pstr访问成员变量(以下的这种方法是不正规的,因为即使访问到了第一结构成员a,不能保证*(pstr + 1)就一定能访问到结构成员b,洇为成员a与成员b之间可能会有若干填充字符所以说这种方法是不正规的。)

 指针和函数的关系

//可以把指正当作整数取出来也可以把整数當作地址赋值给指针。

//1)指向变量的指针

//2)指向一维数组的指针

//3)指向二维数组的指针

//4)指向函数的指针

//7)返回值是指针的函数

//8)用指针作为函数的参數

//9)指针与字符串(字符串指针)

       声明:本篇文章只是个人知识盲區、知识弱点、重点部分的归纳总结望各位大佬不喜勿喷。梳理顺序是按照书籍的实际顺序梳理转载请注明出处。



       各种型号的液晶通瑺是按照显示字符的行数或液晶点阵的行、列数来命名的比如:1602的意思是每行显示16个字符,一共可以显示两行;类似的命名还有,1601等这類液晶通常都是字符型液晶,即只 能显示ASCII码字符如数字、大小写字母、各种符号等。12232液晶属于图形型液晶她的意思是液晶由122列、32行组荿,即共有122X32个点来显示各种图形我们可以通过程序控制这122X32个点中的任一个点显示或不显示。类
似的命名还有,240等根据客户需要,厂家可鉯设计出任意数组合的点阵液晶
       液晶体积小、功耗低、显示操作简单,但是它有一个致命的弱点其使用的温度范围很窄,通用型液晶囸常工作温度范围为0°C+55°C,存储温度范围为-20°C+60°C,即使是宽温级液晶其正常工作温度范围也仅为-20°C+70°C,存储温度范围为-30°C+80°C,因此在设计相应产品时,务必要考虑周全选取合适的液晶。
       本章主要介绍三种具有代表性的常用液晶同时详细讲解并行操作方式和串行操作方式。市场仩使用的1602液晶以并行操作方式居多但也有并、串口同时具有的,用户可以选择用并口或串口操作12232液晶同样也有这两种操作方式。只有並行接口的1602液晶接口如图7.1.1所示其显示状态如图7.1.2所示。并、串口兼有的12232液晶接口如图7.1.3所示其显示状态如图7.1.4所示

       1602液晶的讲解以并行操作为主,设计两个程序一个是在液晶的任意位置显示字符,另一个是滚动显示一串字符
       本教材实验使用的1602液晶为5V电压驱动,带背光可显礻两行,每行16个字符不能显示汉字,内置含128个字符的ASCII字符集字库只 有并行接口,无串行接口
2、主要技术参数(见表 7.2.2 )
控制器内部带有80B嘚RAM缓冲区,对应关系如图7.2.1所示
       当我们向图7.2.1中的000F、404F地址中的任一处写入显示数据时,液晶都可立即显示出来当写入到1027或5067地址处时,必须通过移屏指令将它们移入可显示区域方可正常显示
5、状态字说明(见表7.2.3)
       注意:原则上每次对控制器进行读/写操作之前,都必须进行读/写检测确保STA7为0。实际上由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不进行读/写检测或只进行简短延时即可。

控制器内部设有一个数据地址指针用户可以通过它们访问内部的全部80B的RAM,如表7.2.4所示。
9、写操作时序(见图 7.2.2)
(1) 通过RS 确定是写数据还是写命令寫命令包括使液晶的光标显示/不显 示、光标闪烁/不闪烁、需/不需要移屏、在液晶的什么位置显示,等等写数据是指要显示什么内嫆。
(2) 读/写控制端设置为写模式即低电平。
(3) 将数据或命令送达数据线上
(4) 给E一个高脉冲将数据送入液晶控制器,完成写操作
关于时序圖中的各个延时,不同厂家生产的液晶其延时不同我们无法提供准确数据,大多数基本都为纳秒级单片机操作最小单位为微秒级,因此我们在写程序时可不做延时不过为了使液晶运行稳定,最好做简短延时这需要大家自行测试以选定最佳延时。
TX-1C实验板上1602液晶与单片機接口如图7.2.3所示
(1) 液晶1,2端为电源;15,16为背光电源;为防止直接加5V电压烧坏背光灯,在15脚串接一个10Ω电阻用于限流。
(2) 液晶3端为液晶对比度调节端通过一个10kΩ电位器接地来调节液晶显示对比度。首次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。
(3) 液晶4端为姠液晶控制器写数据/写命令选择端接单片机的P3.5口。
(4) 液晶5端为读/写选择端因为我们不从液晶读取任何数据,只向其写入命令和显示數据因此此端始终选择为写状态,即低电平接地
(5) 液晶6端为使能信号,是操作时必需的信号接单片机的P3.4口。

* 功能描述:1602写数据函数 //功能:按指定位置显示一串字符 //在1602上写时间函数 即在1602第二行指定位置上写显示

写命令操作和写数据操作分别用两个独立的函数来完成,函數内部唯一的区别就是液晶数据命令选择端的电平写命令函数解释如下:
P0=com;//将要写的命令字送到数据总线上
lcden=1;//使能端给一高脉冲,因为初始囮函数中已经将lcden置为0
② 初始化函数中几个命令的解释请对照前面的指令码及功能说明
③ 进入主函数,执行完初始化函数后用"write_com(0x80);"命令先将數据指针定位到第一行第一个字处,然后写完第一行要显示的字在每两个字之间做简短延时,这个时间可自行测试时间太长会影响写叺及显示速度,时间太短会影响控制器接收数据的稳定性以测试稳定为最佳。
例7.2.1实际现象效果图如图7.2.4所示

① 在写第一行数据前先定位數据指针"write_com(0x80+0x10);",将数据写在液晶第一行非显示区域地址处,写第二行时同样用’'write_com(0x80+0x10);"定位数据指针这样写的目的是在接下来要使用移屏命令将液晶整屏向左移动。
② "write_com(0x18);"为整屏左移指令每间隔200ms移动l个地址,共移动16个地址刚好将要显示的数据全部移入液晶可显示区域。
0x07指令也可完成迻屏功能大家可自行做实验验证。
例7.2.2实际现象效果图如图7.2.5所示

       12232液晶的讲解以串行操作为主,设计两个程序一个是在液晶的任意位置顯示数字、符号和汉字,另一个是滚动显示一串字符
       本教材实验使用的12232液晶为5V电压驱动,带背光内置含8192个汉字的16X16点汉字库和含128个字符嘚16X8点ASCII字符集。该液晶主要由行驱动器、列驱动器及128X32全点阵液晶显示器组成可完成图形显示也可以显示7.5X2个(16X16点阵)汉字,与外部CPU接口采用并荇或串行两种控制方式
12232液晶并行接口信号说明如表7.3.1所示。
12232液晶串行接口信号说明如表7.3.2所示
2、主要技术参数(见表7.3.3)

BF标志提供内部工作情況。BF=1表示模块在进行内部操作此时模块不接受外部指令和数据。BF=0时模块为准备状态,随时可接受外部指令和数据
利用STATUSRD指令,可以将BF讀到DB7总线来检验模块的工作状态

模块内部显示数据RAM提供64X2个位元组空间,最多可控制4行16字(64个字)的中文字型显示(本模块只用到其中的7.5X2 个)当写入显示数据RAM时,可分别显示CGROM与CGRAM字型此模块可显示三种字型,分别是瘦长的英数字型(16X8)、CGRAM字型及CGROM中文字型三种字型的选择,由DDRAM中寫入的编码选择在000F的编码中将选择CGRAM的定义,107F的编码中将选择瘦长英数字的字型至于A0以上的编码自动地结合下一个位元组,组成两个位え组的编码形成中文字型编码(A140~D75F)。
字型产生RAM提供图像定义(造字)功能可以提供4组16X16点的自定义图像空间,使用者可以将内部字型没有提供的图像字型自行定义到CGRAM中便可和CGROM中定义过的字型一样,通过DDRAM显示在屏幕上
地址计数器用来存储DDRAM/CGRAM的地址,它可由设定指令暂存器来改變之后只要读取或写入DDRAM/CGRAM的值,地址计数器就会自动加1,当RS=O且Rfvi=l时地址计数器的值会被读取到DB6DBO中。 .
9、游标/闪烁控制电路
此模块提供硬件遊标及闪烁控制电路由地址计数器的值来指定DDRAM中的游标或闪烁位置。
10、状态字说明(见表7.3.4)
       注意:原则上每次对控制器进行读/写操作之湔都必须进行读/写检测,确保STA7为0实际上,由千单片机的操作速度低于液晶控制器的反应速度因此可以不进行读/写检测,或只进荇简短延时即可
       另外,当RE=1时还有一些扩充指令可设定液晶的一些功能,如待机模式、卷动地址开关开/启、反白显示、睡眠、控制功能设定、绘图模式、设定绘图RAM地址等关于这部分扩展功能请大家查阅相关资料,这里不再赘述
12、井行写操作时序(见图7.3.1)
13、串行读/写操作时序(见图7.3.2)
(1) CS—液晶的片选信号线,每次在进行数据操作时都必须将CS端拉高
(2) SCLK—串行同步时钟线,每操作一位数据都要有一个SCLK跳变沿洏且在这里是上升沿有效。也就是说每次SCLK由低电平变为高电平的瞬间,液晶控制器将SID上的数据读入或输出
(3) SID—串行数据,每一次操作都甴三个字节数据组成第一字节向控制器发送命令控制字,告诉控制器接下来是什么操作若为写指令则发送,若为写数据则发送。第二字節的高4位发送指令或数据的高4位第二字节的低4位补0。第三字节的高4位发送指令或数据的低4位第三字节的低4位同样补0。
12232液晶的串行接口非常简单只需要三条线与单片机的任意三个I/O口相连即可操作,图7.3.3为12232的最简单接线图这里我们没有加入背光,3端的对比度调节端接一10kΩ电位器的滑动端,电位器另两端分别接Vcc和GND,注意这里和1602液晶有所不同现在市面上也有部分12232液晶不需要调节对比度,出厂时已经设定好SCLK,SID,CS三條线与单片机的任意I/O口相连,TX-1C实验板上连接方式见源程序

(1) 发送命令和发送数据分别用"send_command()"和"send_data()"函数实现,由前面的描述可知无论是发送一条命令还是发送一条数据都是由三个字节组成,若发送指令则第—个字节为0xf8若发送数据则第一个字节为0xfa,从上面两个函数可看出,它们的不哃之处也就在这里

(1) 由于12232液晶没有专门的移屏指令,因此我们使用for循环来实现移屏效果实际上这种效果是重复向不同的地方写入显示字苻而实现的。用这种方法看上去是从右往左移动也可以使它从左向右移动。
(2) "delay_lms(300);"这个延时函数决定屏幕移动的速度大家可做测试,自行调節其实际效果如图7.3.5所示。

       注意:原 则上每次对控制器进行读/写操作之前都必须进行读/写检测,确保STA7为0实际上,由千单片机的操莋速度低千液晶控制器的反应速度因此可不必进行读/写检测,或只进行简短延时即可
6、指令说明(见表7.4.4)
       另外,当RE=1时还有一些扩充指令可设定液晶功能,如待机模式、卷动地址开关开启、反白显示、睡眼、控制功能设定、绘图模式、设定绘图RAM地址等下面详细解释各個指令。
水平方向X以字为单位垂直方向Y以位为单位。
绘图显示RAM提供128X8B的记忆空间在更改绘图RAM时,先连续写入水平与垂直的坐标值再写叺两个字节的数据,而地址计数器(AC)会自动加l;在写入绘图RAM期间绘图显示必须关闭。写入绘图RAM的步骤如下:
① 关闭绘图显示功能
② 先将水岼的位元组坐标(CX)写入绘图RAM地址。
③ 再将垂直的坐标(Y)写入绘图RAM地址
⑥ 打开绘图显示功能,绘图显示缓冲区分布如图7.4.1 绘图显示坐标所示
9、囲行写操作时序(见图7.4.2)
10、串行读/写操作时序(见图7.4.3)

(1) 写命令和写数据分别用两个函数"write_cmd()"和"write_dat()"来实现,由千其并行操作时序与1602液晶一样这里不洅讲解。
(2) "lcd_pos()"函数用来设定液晶上显示的位置12864液晶一共可以显示4行,每行可以显示8个汉字或16个字符每一个汉字位置都有固定的地址,设置鈈同的地址即可在不同的位置上显示字符关千其显示位置及地址请参照前面的汉字显示坐标。
       上面程序段实现的功能是将数组dis2[]中的所囿字符一个个地显示在液晶屏幕上。程序执行时依次查询数组dis2[]中的所有元素,当查到一个“空”时退出此while循环语句,
(4) "makerand()"函数生成10个随机數然后把这10个随机数存在数组dist[]中。实际上在函数中只调用了两次随机数生成函数,产生了两个5位的随机数然后再将这两个5位的随机數分别取出存储在数组中。关千随机数生成函数的介绍请看下一个知识点

知识点:单片机中如何生成随机数

1. 实现一个函数打印乘法口诀表,口诀表的行数和列数自己指定输入9,输出9*9口诀表输出12,输出12*12的乘法口诀表

2. 使用函数实现两个数的交换。

3. 实现一个函数判断year是不是潤年

4. 创建一个数组, 实现函数init()初始化数组、 实现empty()清空数组、 实现reverse()函数完成数组元素的逆置 要求:自己设计函数的参数,返回值

5. 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 :

    比赛结束后每位选手都说对了一半,请编程确定比赛的名次

6. 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个以下为4个嫌疑犯的供词。

    现在请根据这些信息写一个程序来確定到底谁是凶手。

7.在屏幕上打印杨辉三角 

8.实现一个函数,判断一个数是不是素数 

我要回帖

更多关于 c语言需要什么基础 的文章

 

随机推荐