《[工学]CVAVR教程.doc》由会员分享,可在线阅读,更多相关《[工学]CVAVR教程.doc(105页珍藏版)》请在三一办公上搜索。
1、AVR实习践教学指导书AVR单片机实习教学指导书保定电力职业技术学院动力工程系热自教研室2007年4月18日目录一 自延时与数据移位(M01- M02)二 键控分支(M03- M04)三 自动计数(M05- M06)四 键控计数(M07- M08)五、逻辑控制(M09- M10)(一) 由逻辑图编程(二) 由逻辑命题编程六 动态显示与数据转换(M11- M13)七 外中断使用(M14- M15)八 定时/计数器使用(M16- M19)(一) 定时器设置:(二) 定时中断控制九 定时/计数器应用(M20- M20B)(一) 实时钟显示(二) 高频测量(三) 低频测量十 脉宽调制PWM(M21-
2、M22)十一 显示驱动7219集成块使用(M23- M27)(一) 数码显示:8位8段数码管巡回显示多参数(二) 点阵显示:88点阵字符汉字显示控制十二.模数转换A/D功能的使用(M28- M29)十三.液晶显示器的使用(M30- M33)十四44矩阵键盘的使用(M34- M37)十五 异步通信(M38)十六 模拟比较器(M39)十七 常数设置(M40)十八 教学演示综合测试程序(M41- M42)十九 AVR毕业论文参考课题二十 AVR毕业论文参考框架附图1:实习系统连接图附图2:AVR芯片引脚图附图3:实习板电路原理图附录1.自定义文件头应用说明。附录2:CVAVR编译器简介:一、标示符
3、二、数据类型 三、关键字 四、常用内部函数. 附录3:实习命题参考程序:一、自定义文件头程序 二、命题程序(M1- M40)三、演示程序实践教学说明:1命题路径及文件名:如 D:GY1M0101(含义 高职仪表- 学号- 命题编号)其中:命题 M,考题 K2考核模式及分值:1上电时状态(20分) 2控制状态1(30分) 3控制状态2 (30分) 4状态返回(20分)一、延时显示与移位 M01.试编程序,使8个发光管和8个数码管全部按0.5秒间隔闪光。 M01A.试编程序,使单个发光管亮按0.2秒时间间隔向左循环移动。 M02.试编程序,使发光管按0.5秒向左逐位循环全部点亮。M02.A试编程序
4、,使单个数码管显示台号尾数并按0.3秒时间间隔向左循环移动。教学提示:1.I/O口设置提示:编写程序中必须先说明I/O口的状态:如图所示每个口有三个口地址。2.闪光提示:使数码管闪光有3种方法1).亮灭分别延时2)使用取反语句3)使用异或语句3.内部自延时提示:延时函数 (微秒级):文件头: #include delay.h 格式:delay_us(165535) delay_ms(165535)例:delay_us(100)/100微妙 delay_ms(100)/100毫秒4.发光管移位提示: char i; for (i=0;ii; delay_ms(500);5.数码管移位提示: ch
5、ar i; for (i=0;ii); delay_ms(500);二、键控分支 M03.试编程序,上电后,显示台标尾数,发光管全灭。按左1键后使八个发光管向左逐个全部点亮,循环进行。按右1键后使八个发光管向右逐个全部点亮,循环进行。(0.5秒)。M04.试编程序,上电后, 0.3秒闪光显示台号尾数,按右1键发光管由中间向 两边依次全亮,按右2键由两边向中间全亮。按左1键后返回显示台号尾数。教学提示:按键控制的几种模式1.程序等待按后通过:while(PIND.0=1) ;2.按住时等待或执行预定程序:while(PIND.0=0) ;3.按一键后执行预定程序时if(PIND.0= =0) w
6、hile(1) 程序参考框架: if(PIND.7= =0) while(PIND.0=1)左移if(PIND.0= =0) while(PIND.7=1)右移三、自动计数 M05.试编程序,使右1数码管间隔03秒 显示0F不断循环。 M06.试编程序,使两头数码管09不断循环中小于5时发光管低四位亮,等于5时全亮,大于5时高四位亮。(以上间隔0.5S) 教学提示:1.解题思路 建一个全局型单维数组变量并给出0 F对应的数码管代码,然后将数组值通过循环语句按顺序延时赋给PB口。2.共阴极数码管字段显示原理3.数码管代码表四、键控计数 M07.试编程序,上电后使八个发光管全灭,每按右1键一次使八
7、个发光管以亮1灭零方式记一个数。M08.试编程序,每按一次左1键数码管加一个数,数码管到9时归0继续不断循环计数。教学提示:1.键控抖动波形图:2.键控计数消抖程序1 if (PIND.0=0) /等待键按下 while (PIND.0=0)/等待键松开 delay_ms(2); /前沿延时消抖 / delay_ms(2); /后沿延时消抖 PORTC- - ; /上升沿有效3.键控计数消抖程序2(见教材) bit p1; p1=PIND.0;if(PIND.0=0&p1=1) PORTC- - ;p1=PIND.0;delay_ms(20); 五、逻辑控制(一) 由逻辑图编程 如果用拨动开关
8、左1和右1二位代表逻辑输入A、B,发光管最高位左1位代表逻辑输出Y,试编程序实现下述逻辑关系: M09.与非逻辑M09A.同或逻辑教学提示:1.与或非逻辑图为例(使用PA口输入和PC口输出)1) 文件头中定义三个位变量:bit A,B,Y2) 输入变量赋值: A=PINA.0; B=PINA.7;3) 变量逻辑运算: Y=!(A|B);4) 输出变量送出赋值: PORTC.7=Y;(二) 由逻辑命题编程 如果用拨动开关左1、左2、左3代表逻辑输入A、B、C,发光管左1、左2、左3位指示其状态,用数码管1和0指示输出状态试编程序实现下述逻辑关系:M10.模拟少数服从多数表决器(三取二)。M10A
9、.模拟举重电子表决器(加权三取二)。说明:三个举重裁判:一个主裁判两个副裁判 ,主裁具有否决权,即当主裁不同意时则此举无效。只有主裁再加上至少一个副裁同意则此举有效。M10B.模拟电源负荷智能分配(三对二变量)。 如果用拨动开关左1、左2、左3代表逻辑输入A、B、C,发光管左1、左2、左3位指示其状态,用数码管左1和右1位亮灭指示输出YA、YB状态试编程序实现下述逻辑关系:如图所示有3个用电户:A1、B1、C2,其中A与B用电量相同,C2则是2倍A1的用电量。这些用电户分别由2台发电机Y1、Y3供电,发电机Y1的最大功率等于B1的功率消耗,发电机Y3的最大功率是Y1的3倍。试用拨动开关分别代表
10、A1、B1、C2用电户,用发光管代表发电机Y1、Y3运行状态。编写控制程序,能根据各用电户的启动与关闭情况,以最节约电能的方式自动启停发电机。教学提示:1.解逻辑命题步骤 1) 按命题定义变量并建真值表; 2) 由真值表直接列逻辑式并简化逻辑式;或由真值表建卡诺图由卡诺图列简化逻辑式; 3) 根据逻辑式编写程序;2. M10.解题要点 按命题定义变量、建真值表、化简如下图:3 M10B.解题要点 按命题定义变量、建真值表、公式化简如下图:M10C水箱水位自动显示及控制如果用拨动开关右1、右2、右3代表水位低中高检测开关A、B、C,发光管右1、右2、右3则指示开关状态。数码管显示0- 1- 2-
11、 3分别代表水位指示,数码管显示E则代表故障,如图所示,试编程序实现下述功能: 无水时数码管显示0,且发光管左1位0.4秒闪光报警。水位漫过A数码管显示1,水位漫过B数码管显示2,水位漫过C数码管显示3,且发光管左2位0.4秒闪光报警。否则数码管显示E表示线路故障且发光管左3位0.4秒闪光报警。 教学提示1.连接方法:在实习板上,PB口接口与数码管字段LEDD1接口用扁平线相连,PD接口与数码管字位LEDW1接口用扁平线相连。PC口与开关插口连接,PA口红灯插口连接。2.水箱控制流程图参考:六、动态显示与转换 M11.试编程序,使数码管显示:“12345678”。(M11A:08- 00- 0
12、0)。 M12.试编程序,使数码管循环高速显示:“00009999”当数字小于2006时发光管低四位亮否则发光管高四位亮。M12A.试编程序,使数码管循环显示0000FFFF,方式为“- - 数字- - ”,当数字小于8000时发光管单灯循环右移否则循环左移。教学提示:显示原理及参考程序1.要显示的数据:2.显示数据过程:3.显示子程序void display(void) /文件名 unsigned char i; for (i=0;i8;i+) PORTB=ledbuffi;/将缓冲区数据送PORTB口 PORTD=(10;i- - ) /查询次数统计 while (!(TIFR&0x01)
13、; /查询是否溢出 TIFR|=0x01;/清溢出位 TCNT0=56; /重新置数4.T0中断法服务程序interrupt TIM0_OVFT0_INT()/中断函数 TCNT0=56; /预置数 secdd+; /200usIf(secdd=50) secdd=0;secd+;/10msIf(secd=100) secd=0;sec+;/1sIf(sec=60) sec=0;min+;/1m(二) 定时中断控制 用定时器0中断方式实现: M18.试编程序,使数码管循环显示59- 分59秒- 1/100秒(初始数据00- 00- 00) 。 M18A.试编程序,显示同上,按住左1键暂停,手离
14、开则继续。 M19.试编程序,使数码管循环显示23 - 时59分- 59秒(初始数据08- 00- 00)。 M19A.试编程序,显示同上 。要求小时十位无效零消隐。教学提示:在T0中断程序中写入秒百分之一秒(secd) 、秒(sec)、分(min)、小时(hour)变量。九、定时/计数器应用 (一) 时钟显示M20 试作一个时实电子钟: 1.上电后由显示8- 00- 00开始走时。 2.小时十位无效零消隐。3.有调时/分功能。教学提示:无效零/闪点参考ledbuff1=table sec/10; if (secd50) ledbuff2=table min%10; else ledbuff2
15、=table min%10|0x80;/闪点 if(min/10)=0) ledbuff3=0;/无效零 else ledbuff3=table min/10; (二) 高频测量 M20A.较高频率的测量(1k- 10kHz)如图所示:由555振荡器发出方波频率信号送给MEGA16芯片的PB1口,然后经T1计数检测在由数码管显示该方波频率数。(三) 低频测量M20B.较低频频率的测量如图所示:由T0产生较低频率方波频率信号送给MEGA16芯片的PD6口,然后经T1捕获后再由数码管显示该方波频率数。十、脉宽调制PWMM21.试编程序,使数码管亮度由暗逐渐变亮再逐渐变暗。M22.试编程序,使数码管
16、亮度分别从0- 1- 2- 3- 4- 5V电压间隔1秒循环输出。 教学提示:脉宽调制工作原理: 如图所示:由内部寄存器OCR1A(或OCR1B)控制引脚PD5(或PD6)高电平输出的占空比,T图为设置为快速正向输出式的波形图。脉宽调制原理(正向快速)十一、显示驱动7219集成块使用1. 集成块驱动显示8位8段数码管(使用串行口传送方式只占用2个I/O口资源) M23.用显示驱动7219集成块进行数码显示1- 8数字。(使用串行口传送方式只占用3位I/O口)M24.用显示驱动7219集成块进行数码显示8通道号123.45数据。(要求:学会7219两个子程序调用)M25.用显示驱动7219集成块
17、进行数码显示电子时钟。教学提示:在实习板上,将7219W1接口与数码管字位LEDW1接口用扁平线相连,将7219D1接口与数码管字段LEDD1接口用扁平线相连。2. 集成块驱动显示88点阵LED管M26.用显示驱动7219集成块进行显示点阵汉字“光”。M26A.用7219点阵驱动集成块显示移动的“电力”两字。M27.用显示驱动7219集成块同时进行数字汉字显示。教学提示:1.连接方法:在实习板上,将7219W2接口与点阵字位LEDW2接口用扁平线相连,将7219D2接口与点阵字段LEDD2接口用扁平线相连。2.7219驱动点阵排列方式如图所示:十二、模数转换A/D功能的使用:M28.用显示驱动
18、7219集成块显示第1通道A/D转换数据(0- 1023对应0- 5V)。M29.用显示驱动7219集成块显示第6通道A/D转换数据:0- 500对应0- 5V,一阶滤波(系数0.3),8次采集取均值M29A 要求同上,当数据大于400时,8发光管200mS闪光。M29B 要求同上,每隔5秒显示分别显示0,1,6,7通道数据。教学提示:A/D转换原理示意图十三、液晶显示器的使用:M30.用液晶显示器显示“YB0501- 台号- 学号”。M31.用液晶显示器显示0000- 9999循环间隔100ms。M32.用液晶显示器显示“编号- A/D转换数据”。M33.用液晶显示器第2行中间位置显示“小时
19、- 分- 秒”。教学提示:可参考附录相关函数规定。输出字符见7位ASCII码表:十四、44矩阵键盘的使用:(占用1个8位I/O口资源)M34.上电后,用液晶显示44矩阵键盘按键数据。M35.上电后,8发光管不亮,按44矩阵键盘j16发光管高4位亮,按j17发光管低4位亮,按j35后全亮,按j36后全灭。M36.用液晶显示器显示“小时- 分- 秒”,用矩阵键盘J35,J36调整时、分。M37.用矩阵键盘右2排改变采集通道号及采集对应的数据。教学提示1矩阵键盘连接图:2矩阵键盘键值图(key):十五 异步通信练习M38 通过异步通信接口发送8个字节的数据,接收8个字节的数据,并显示接收的数据。 教
20、学提示在实习板上,将7219W1接口与LEDW1接口用扁平线相连,将7219D1接口与LEDD1接口用扁平线相连。使用7219芯片控制的8位8段数码显示器显示时钟。将通信接口的RXD与TXD用连接线短接,通过RS232接口的异步通信单机自发自收(图1)或双机通信(图2)。 图1单机通信自发自收连接 图2双机通信连接十六 模拟比较器练习M39 如图所示:先将两电位器接入10位A/D转换并显示转换值(0- 1023),调整电位器是其值分别为1/2 *1023。然后用单股插线一头插入电位器RW0、RW1中心抽头,另一头插入M16芯片PB2、PB3引脚。试编程序当PB2脚电压值大于PB3脚电压值时发光
21、管LED0.4秒闪光。十七 常数设置练习M40 试用44矩阵键盘将16个整型常数保存到M16芯片中的EEROM中。十八 应用命题教学演示 综合演示程序1 :数码管显示数字- 点阵管显示移动汉字- 液晶显示ASCII码- 发光管循环移动。综合演示程序2 :时钟- 汉字- 电子音乐。十九 AVR单片机毕业论文课题参考1智能型数字定时交通灯控制系统2节日彩灯-时钟-汉字-音乐系统3多路数据采集-巡测-选点-报警系统4水箱水位检测-报警-显示-控制系统二十AVR单片机毕业论文参考框架(基于AVR单片机的数据采集系统)题目- 作者- 摘要- 关键词- 正文:一、 概述(或引言)1 用AVR单片机实现数据
22、采集的优势(可与传统m51相比)硬件方面:例1) AVR内部资源丰富自带模数A/D数模D/A(PWM)转换,使电路简单可靠。2) AVR指令执行速度更快是m51的几十倍。更适合多点数据巡回检测3) AVR内部有程序存储器(FLASH)和数据存储器(EEROM)无须向m51一样需外加存储器。可减少成本及简化电路等等。软件方面:例1) 使用高级C语言比汇编语言有更大的优势,尤其在数据处理方面高级语言更直观且计算起来更方便。2) 高级语言在程序移植、功能拓展、程序解读方面更有独到之处等等二、AVR数据采集系统框图例:输入模块中可增加模拟量隔离(耦合式如AD202见资料)和开关量隔离(光电式如4N31
23、)电路等。三 、主控电路1芯片选择可列表说明2 时钟晶振电路3 键盘矩阵电路4显示电路(可拓展点阵汉字显示)5 报警电路6驱动电路 等等四 、模拟量开关量输入电路 1压力差压信号(如1151)经I/U转换电路转成0- 5v信号进主控模块2温度信号(如热电偶)经mv/U转换电路转成0- 5v信号进主控模块3转速信号、开关量可通过整形电路和光电隔离电路进进主控模块等 五 、模拟量开关量输出电路1 模拟量输出是主控cpu进行脉宽调制(pwm)后输出,然后还需用运算放大器进行滤波缓冲隔离后转换成电压信号0- 5V送出。需要时还需通过电压电流转换电路(可使用专用集成块:如AM462,XTR110等可参考
24、有关资料)送出。 2开关量输出由应经过光电隔离再通过驱动电路(如可控硅,继电器等)输出。六 、软件设计1软件功能说明2软件流程框图3程序清单(应有必要的注解)七 、结束语 (略) 八、参考文献:说明资料出处 九、附录:提供必要的表格图形等附图1:实习系统连接图附图2:AVR芯片引脚图附图3:实习板电路原理图附录1:自定义文件头应用说明1. 动态显示文件头#include 1)连接:PB-LEDD,PC-LEDW2)函数:初始化init();显示子程序disp();转换子程序bcd(long n); hex(long n);2. 时钟T0中断文件头#include 1)连接:无2)函数 初始化i
25、nit_t0();时间变量hour,min,sec,secd,(0.01s)secdd(0.2ms)。3. 矩阵键盘扫描文件头#include 或#include 1)连接:PC口或PD口-矩阵键盘接口2)函数 初始化 无;子程序jp();键值char key。4. 7219驱动文件头#include 或#include 1)连接:7219D1-LEDD1,7219W1-LEDW1;7219D2-LEDD2,7219W2-LEDW2;2)函数:初始化spi_7219();数码管/点阵管复位子程序void c_7219(char i,char j)数码显示子程序spi_xie(char i,ch
26、ar j) 点阵显示子程序void spi_xie1(char i1,char j1,)单参数显示子程序void x_7219(long x)时钟显示子程序void sz_7219(char hour,char min,char sec)多参数显示子程序char xunce_7219(char i,int y,char n)5. 模数转换A/D文件头#include 1)连接:PA口-8电位器插口;2)函数:初始化 无,数据采集子程序float adcx( char adc_input,float n)6. 脉宽调制PWM文件头#include 1)输出:PD4口/PD5口;2)函数:初始化
27、void init_p(void),10位,正向。3)控制OCR1A/OCR1B;7. 液晶显示LCD文件头#include 1)连接:PD口-lcd插口;PDPA0-0x12,0x15,0x18,0x1b2)函数:初始化 lcd_init(16);时钟显示子程序void sz_lcd(char hour,char min,char sec)通道数据显示子程序char xunce_lcd(char i,long y)8. 音乐文件头#include 和#include 1)连接:PA.0口-扬声器插针;2)函数:初始化void init_m(void); 音乐子程序music(char qm)
28、;时间变量hour,min,sec,secd,(0.01s)secdd(0.2ms)附录2:CodesionAVR编译器简介 一、 .标识符:CodeVisionAVR(以下简称为CVAVR)的标识符可以由字母、数字和下划线组成,但是必须用字母或下划线开头,CVAVR标识符最长只能是32个字符。二、CVAVR数据类型 三、 关键字: 关键字 用 途说 明break程序语句退出最内层循环体bit数据类型声明位变量case程序语句switch语句中的选择项 char 数据类型声明 单字节整型数或字符型数据 const 存储类型声明 在程序执行过程中不可修改的变量值continue 程序语句 退出本
29、次循环,转向下一次循环 defaut 程序语句 switch语句中的失败选择项 do 程序语句 构成dowhile循环结构 double 数据类型声明 双精度浮点数eeprom存储类型声明else 程序语句 构成 ifelse选择结构 enum 数据类型声明 枚举 extem 存储类型声明 在其他程序模块中声明了的全局变量flash数据类型声明 float 数据类型声明 单精度浮点数 for 程序语句 构成for循环结构 goto 程序语句 构成goto循环结构 if 程序语句 构成if- else选择结构 int 类据类型声明 基本整型数interrupt中断标示符 long 数据类型声明
30、长整型数 return 程序语句 函数返回 short 数据类型声明 短整型数 signed 数据类型声明 有符号数二进制的最高位为符号位 sizeof 运算符 计算表达式或数据类型的字节数sfrb字节定义sfrw字定义 static 存储类型声明 静态变量 struct 数据类型声明 结构类型数据 switch 程序语句 构成switch选择结构 typedef 数据类型声明 重新进行数据类型定义 union 数据类型声明 联合类型数据 unsigned 数据类型声明 无符号数据 void 数据类型声明 无类型数据 volatile 数据类型声明 声明该变量在程序执行中可被隐含改变 whil
31、e 程序语句 构成while和dowhile循环语句 四、CodeVsionAVR编译器常用库函数 1) 字符类型函数 下列函数支持ASCII字符运算,使用这些函数之前应当用#include”ctypeh预处理。(1) unsigned char isalnum(char c):如果c是数字或字母则返回1,否则返回0。(2) unsigned char isalpha(char c):如果c是字母则返回1,否则返回0。(3) unsigned char isascii(char c):如果c是ASCII码(0127)则返回1,否则返回0。(4) unsigned char iscntrl(ch
32、ar c):如果c是控制字符(031或127)则返回1,否则返回0。(5) unsigned char isdigit(char c):如果c是十进制数字则返回1,否则返回0。(6) unsigned char islower(char c):如果c是小写字母则返回1,否则返回0。(7) unsigned char isphnt(char c):如果c是一个可打印字符(32- 127)则返回1,否则返回0。(8) unsigned char ispunct(char c):如果c是一个标点字符(ASCII码中除了控制字符、数字和字母以外的字符)则返回1,否则返回0。 :(9) unsigned
33、 char isspace(char c):如果c是空格、CR和HT返回1,否则返回0。(10) unsigned char isupper(char c):如果c是大写字母则返回1,否则返回0。(11) unsigned char isxdigit(char c):如果c是16进制数字则返回1,否则返回0。(12) chartoascii(char c):返回字符c对应的ASCII。(13) unsigned char toint(char c):把c当做16进制字符并返回对应的10进制整数(范围:015)。(14) char tolower(char c):如果c是大写字母则返回对应的小写
34、字母,其他的字符保持不变。(15) char toupper(char c):如果c是小写字母则返回对应的大写字母,其他的字符保持不变。 2) 标准输入输出函数 下列函数支持通过UART端口的输入输出(IO),使用这些函数之前应当用#include “stdio.h预处理,并对相应的端口初始化。(1) char getchar(void):使用查询方式返回由UART接收的一个字符。(2) void putchar(char c):使用查询方式由UART发送一个字符c。(3) void puts(char *str):使用putchar把SRAM中以空字符o0”结束的字符串输出,并在输出结束后自
35、动插入回车符。(4) void putsf(charflash *str):使用putchar把FLASH中的以空字符“0”结束的字符串输出,并在输出结束后自动插入换行符。(5) void wintf(charflash *fmtstr,argl,arg2,.)使用putchar按格式说明符输出fmtstr字3) 标准内存分配函数 使用这些函数之前应当用#include”stdlibh预处理。(1) int atoi(char *str):转换字符串str为整型数并返回它的值,str指向字符串的起始字符必须是数字字符或小数点,否则返回0。当碰到字符串中第一个十进制数字和小数点以外的字符时,转换
36、结束。 (2) long int atol(char *str):转换字符串str为长整型数并返回它的值,str指向字符串的起始字符必须是数字字符或小数点,否则返回0。当碰到字符串中第一个十进制数字和小数点以外的字符时,转换结束。(3) void itoa(int n,char *str):转换整型数为字符型字符串。str指向字符串的起始字符必须是数字字符或小数点,否则返回0。当碰到字符串中第一个十进制数字和小数点以外的字符时,转换结束。(4) void ltoa(longint n,char *str):转换长整型数为字符型字符串,这个函数的原型和源代码在ltoah文件中。(5) void
37、ftoa(float n,unsigned char decimals,char *str):转换浮点数为字符型字符串,由decimals指定字符串的长度,这个函数的原型和源代码在ftoah文件中。(6) void ftoe(float n,unsigned chardecimals,char *str):转换浮点数为字符型字符串,由decimals指定字符串的长度,字符串采用以e为底的方法,这个函数的原型和源代码在ftoeh文件中。(7) float atof(char *str):转换字符串为浮点数,字符串str起始字符必须是数字字符或小数点,否则返回0。当碰到字符串中第一个十进制数字和小
38、数点以外的字符时,转换结束。这个函数的原型和源代码在atoh文件中。(8) int rand(void):产生一个032767之间的随机数。(9) void srand(int seed):设置随机数发生器的种子数。4) 数学函数使用这些函数之前应当用#include”mathh预处理。(1) unsigned char cabs(char n):返回n的绝对值。(2) unsigned int abs(char n):返回n的绝对值。(3) unsigned long labs(long int n):返回n的绝对值。(4) float fabs(float n):返回n的绝对值。(5) signed char cmax(char a,char b):返回a和b的最大值。(6) int max(inta,int b):返回a和b的最大值。(7) long int lmax(long int a, long int b):返回a和b的最大值(8) float fman(float a,float b):返回a和b的最大值。(9) char cmin(char a,char b):返回a和b的最小值。(10) int min(int a,int b):返回a和b的最小值。(11) long int lmin(long int a,long int