CVAVR教程文档格式.docx
《CVAVR教程文档格式.docx》由会员分享,可在线阅读,更多相关《CVAVR教程文档格式.docx(139页珍藏版)》请在冰豆网上搜索。
CVAVR编译器简介:
一、标示符二、数据类型三、关键字四、常用内部函数.
附录3:
实习命题参考程序:
一、自定义文件头程序二、命题程序〔M1-M40〕三、演示程序
实践教学说明:
1命题路径及文件名:
如D:
\GY1\M0101〔含义高职外表-学号-命题编号〕
其中:
命题M,考题K
2考核模式及分值:
1上电时状态(20分)2操纵状态1(30分)3操纵状态2(30分)4状态返回(20分)
一、延时显示与移位
M01.试编程序,使8个发光管和8个数码管全部按0.5秒间隔闪光。
M01A.试编程序,使单个发光管亮按0.2秒时刻间隔向左循环移动。
M02.试编程序,使发光管按0.5秒向左逐位循环全部点亮。
M02.A试编程序,使单个数码管显示台号尾数并按0.3秒时刻间隔向左循环移动。
教学提示:
1.I/O口设置提示:
编写程序中必须先说明I/O口的状态:
如下图每个口有三个口地址。
2.闪光提示:
使数码管闪光有3种方法1).亮灭分别延时2)使用取反语句3〕使用异或语句
3.内部自延时提示:
延时函数〔微秒级〕:
文件头:
#include"
delay.h"
格式:
delay_us(1~65535〕
delay_ms(1~65535〕
例:
delay_us(100)//100微妙
delay_ms(100)//100毫秒
4.发光管移位提示:
chari;
for(i=0;
i<
=8;
i++)
{PORTC=0xFF>
>
i;
delay_ms(500);
}
5.数码管移位提示:
8;
{PORTD=~(0X80>
i);
二、键控分支
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)while
(1){…}
程序参考框架:
if(PIND.7==0)while(PIND.0==1)
{左移}
if(PIND.0==0)while(PIND.7==1)
{右移}
三、自动计数
M05.试编程序,使右1数码管间隔03秒显示0~F不断循环。
M06.试编程序,使两头数码管0~9不断循环中小于5时发光管低四位亮,等于5时全亮,大于5时高四位亮。
(以上间隔0.5S)
教学提示:
1.解题思路
建一个全局型单维数组变量并给出0~F对应的数码管代码,然后将数组值通过循环语句按顺序延时赋给PB口。
2.共阴极数码管字段显示原理
3.数码管代码表
四、键控计数
M07.试编程序,上电后使八个发光管全灭,每按右1键一次使八个发光管以亮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〔见教材〕
bitp1;
p1=PIND.0;
if(PIND.0==0&
&
p1==1)PORTC--;
delay_ms(20);
五、逻辑操纵
假如用拨动开关左1和右1二位代表逻辑输入A、B,发光管最高位左1位代表逻辑输出Y,试编程序实现下述逻辑关系:
M09.与非逻辑
M09A.同或逻辑
1.与或非逻辑图为例〔使用PA口输入和PC口输出〕
1)文件头中定义三个位变量:
bitA,B,Y
2)输入变量赋值:
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.模拟举重电子表决器(加权三取二)。
说明:
三个举重裁判:
一个主裁判两个副裁判,主裁具有否决权,即当主裁不同意时那么此举无效。
只有主裁再加上至少一个副裁同意那么此举有效。
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倍。
试用拨动开关分别代表A1、B1、C2用电户,用发光管代表发电机Y1、Y3运行状态。
编写操纵程序,能依照各用电户的启动与关闭情形,以最节约电能的方式自动启停发电机。
1.解逻辑命题步骤
1)按命题定义变量并建真值表;
2)由真值表直截了当列逻辑式并简化逻辑式;
或由真值表建卡诺图由卡诺图列简化逻辑式;
3)依照逻辑式编写程序;
2.M10.解题要点
按命题定义变量、建真值表、化简如以下图:
3M10B.解题要点
按命题定义变量、建真值表、公式化简如以下图:
M10C水箱水位自动显示及操纵
假如用拨动开关右1、右2、右3代表水位低中高检测开关A、B、C,发光管右1、右2、右3那么指示开关状态。
数码管显示0-1-2-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-00)。
M12.试编程序,使数码管循环高速显示:
〝0000~9999〞当数字小于2006时发光管低四位亮否那么发光管高四位亮。
M12A.试编程序,使数码管循环显示0000~FFFF,方式为〝--数字--〞,当数字小于8000时发光管单灯循环右移否那么循环左移。
显示原理及参考程序
1.要显示的数据:
2.显示数据过程:
3.显示子程序
voiddisplay(void)//文件名
{unsignedchari;
i++){
PORTB=ledbuff[i];
//将缓冲区数据送PORTB口
PORTD=~(1<
<
//开始显示
delay_ms
(1);
//每一位显示保持一定时刻
}
4.BCD转换程序
ledbuff[0]=tabel[XX%10];
ledbuff[1]=tabel[XX/10%10];
ledbuff[2]=tabel[XX/100%10];
ledbuff[3]=tabel[XX/1000%10];
语句1例:
XX=1234:
除10取余等于4。
语句2例:
除10取商等于123.4,
再除10取余等于3。
其它类推。
5.HEX转换程序
ledbuff[0]=tabel[XX%16];
ledbuff[1]=tabel[XX/16%16];
ledbuff[2]=tabel[XX/256%16];
edbuff[3]=tabel[XX/256/16%16];
M13.试编程序,使点阵管动态显示〝甲〞字。
M13A.试编程序,使点阵管动态间隔约1秒轮番显示〝电〞、〝力〞两字。
…..教学提示:
点阵动态显示字位与字段排列如下:
如甲的代码。
七、外中断使用
M14.试编程序,上电后,发光管不显示,按住中断0键手离开后发光管低4位亮。
按住中断1键手离开后发光管高4位亮。
M15.试编程序,用外中断0和1分别操纵发光管左右循环依次全部点亮的方向,中断0右循环,中断1左循环。
1.中断原理
2.中断消抖程序1
delay_ms(20);
if(PIND.2==1)
PORTC=0X0F;
GIFR|=0X40;
3.中断消抖程序2
while(PIND.2==0)
八、定时/计数器使用
M16.试编程序,用定时/计数器0查询方式使8个发光管间隔0.5秒闪亮。
M17.用定时/计数器0中断方式实现数码管低4位显示-00-到-60-秒循环计时。
M17A.同上题,分别用定时/计数器0,64分频,1ms时基〔t〕,中断方式实现数码管低4位显示-00-到-60-秒循环计时
1.T0中断原理图:
2.T0查询法初始化
PORTC=0xFF;
DDRC=0xFF;
TCCR0=0x02;
//接内部RC震荡器,8分频。
TCNT0=56;
//计数器初装X=FF-t/T
//注:
T为分频后周期,t为计数器溢出周期。
3.T0查询法编程
for(i=250;
i>
0;
i--)//查询次数统计
{while(!
(TIFR&
0x01));
//查询是否溢出
TIFR|=0x01;
//清溢出位
TCNT0=56;
//重新置数}
4.T0中断法服务程序
interrupt[TIM0_OVF]T0_INT()//中断函数
{TCNT0=56;
//预置数
secdd++;
//200us
If(secdd==50)secdd=0;
secd++;
//10ms
If(secd==100)secd=0;
sec++;
//1s
If(sec==60)sec=0;
min++;
//1m}
(二)定时中断操纵
用定时器0中断方式实现:
M18.试编程序,使数码管循环显示59-分59秒-1/100秒(初始数据00-00-00)。
M18A.试编程序,显示同上,按住左1键暂停,手离开那么连续。
M19.试编程序,使数码管循环显示23-时59分-59秒(初始数据08-00-00)。
M19A.试编程序,显示同上。
要求小时十位无效零消隐。
在T0中断程序中写入秒百分之一秒〔secd〕、秒〔sec〕、分〔min〕、小时〔hour〕变量。
九、定时/计数器应用
(一)时钟显示
M20试作一个时实电子钟:
1.上电后由显示8-00-00开始走时。
2.小时十位无效零消隐。
3.有调时/分功能。
无效零/闪点参考
ledbuff[1]=table[sec/10];
if(secd>
50)ledbuff[2]=table[min%10];
elseledbuff[2]=table[min%10]|0x80;
//闪点
if((min/10)==0)ledbuff[3]=0;
//无效零
elseledbuff[3]=table[min/10];
(二)高频测量
M20A.较高频率的测量(1k-10kHz)
如下图:
由555振荡器发出方波频率信号送给MEGA16芯片的PB1口,然后经T1计数检测在由数码管显示该方波频率数。
M20B.较低频频率的测量
由T0产生较低频率方波频率信号送给MEGA16芯片的PD6口,然后经T1捕捉后再由数码管显示该方波频率数。
十、脉宽调制PWM
M21.试编程序,使数码管亮度由暗逐步变亮再逐步变暗。
M22.试编程序,使数码管亮度分别从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集成块进行数码显示电子时钟。
在实习板上,将7219W1接口与数码管字位LEDW1接口用扁平线相连,将7219D1接口与数码管字段LEDD1接口用扁平线相连。
2.集成块驱动显示8×
8点阵LED管
M26.用显示驱动7219集成块进行显示点阵汉字〝光〞。
M26A.用7219点阵驱动集成块显示移动的〝电力〞两字。
M27.用显示驱动7219集成块同时进行数字汉字显示。
在实习板上,将7219W2接口与点阵字位LEDW2接口用扁平线相连,将7219D2接口与点阵字段LEDD2接口用扁平线相连。
2.7219驱动点阵排列方式如下图:
十二、模数转换A/D功能的使用:
M28.用显示驱动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行中间位置显示〝小时-分-秒〞。
可参考附录相关函数规定。
输出字符见7位ASCII码表:
十四、4×
4矩阵键盘的使用:
〔占用1个8位I/O口资源〕
M34.上电后,用液晶显示4×
4矩阵键盘按键数据。
M35.上电后,8发光管不亮,按4×
4矩阵键盘j16发光管高4位亮,按j17发光管低4位亮,按j35后全亮,按j36后全灭。
M36.用液晶显示器显示〝小时-分-秒〞,用矩阵键盘J35,J36调整时、分。
M37.用矩阵键盘右2排改变采集通道号及采集对应的数据。
教学提示
1矩阵键盘连接图:
2矩阵键盘键值图〔key〕:
十五异步通信练习
M38通过异步通信接口发送8个字节的数据,接收8个字节的数据,并显示接收的数据。
教学提示
在实习板上,将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脚电压值时发光管LED0.4秒闪光。
十七常数设置练习
M40试用4×
4矩阵键盘将16个整型常数储存到M16芯片中的EEROM中。
十八应用命题教学演示
综合演示程序1:
数码管显示数字-点阵管显示移动汉字-液晶显示ASCII码-发光管循环移动。
综合演示程序2:
时钟-汉字-电子音乐。
十九AVR单片机毕业论文课题参考
1智能型数字定时交通灯操纵系统
2节日彩灯-时钟-汉字-音乐系统
3多路数据采集-巡测-选点-报警系统
4水箱水位检测-报警-显示-操纵系统
二十AVR单片机毕业论文参考框架
〔基于AVR单片机的数据采集系统〕
题目-作者-摘要-关键词-正文:
一、概述〔或引言〕
1用AVR单片机实现数据采集的优势〔可与传统m51相比〕
硬件方面:
例
1)AVR内部资源丰富自带模数A/D数模D/A(PWM)转换,使电路简单可靠。
2)AVR指令执行速度更快是m51的几十倍。
更适合多点数据巡回检测
3)AVR内部有程序储备器〔FLASH〕和数据储备器(EEROM)无须向m51一样需外加储备器。
可减少成本及简化电路…等等。
软件方面:
1)使用高级C语言比汇编语言有更大的优势,专门在数据处理方面高级语言更直观且运算起来更方便。
2)高级语言在程序移植、功能拓展、程序解读方面更有独到之处…等等
二、AVR数据采集系统框图
输入模块中可增加模拟量隔离〔耦合式如AD202见资料〕和开关量隔离〔光电式如4N31〕电路等。
三、主控电路
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等可参考有关资料〕送出。
2开关量输出由应通过光电隔离再通过驱动电路〔如可控硅,继电器等〕输出。
六、软件设计
1软件功能说明
2软件流程框图
3程序清单〔应有必要的注解〕
七、终止语〔略〕
八、参考文献:
说明资料出处
九、附录:
提供必要的表格图形等
附录1:
自定义文件头应用说明
1.动态显示文件头#include<
dtpcd.txt>
1)连接:
PB----LEDD,PC----LEDW
2)函数:
初始化init();
显示子程序disp();
转换子程序bcd(longn);
hex(longn);
2.时钟T0中断文件头#include<
szt0.txt>
无
2)函数初始化init_t0();
时刻变量hour,min,sec,secd,(0.01s)secdd(0.2ms)。
3.矩阵键盘扫描文件头#include<
4x4pc.txt>
或#include<
4x4pd.txt>
PC口或PD口----矩阵键盘接口
2)函数初始化无;
子程序jp();
键值charkey。
4.7219驱动文件头#include<
7219p1.txt>
7219p0.txt>
7219D1----LEDD1,7219W1----LEDW1;
7219D2----LEDD2,7219W2----LEDW2;
初始化spi_7219();
数码管/点阵管复位子程序voidc_7219(chari,charj)
数码显示子程序spi_xie(chari,charj)
点阵显示子程序voidspi_xie1(chari1,charj1,)
单参数显示子程序voidx_7219(longx)
时钟显示子程序voidsz_7219(charhour,charmin,charsec)
多参数显示子程序charxunce_7219(chari,inty,charn)
5.模数转换A/D文件头#include<
abc.txt>
PA口----8电位器插口;
初始化无,数据采集子程序floatadcx(charadc_input,floatn)
6.脉宽调制PWM文件头#include<
pwm.txt>
1)输出:
PD4口/PD5口;
初始化voidinit_p(void),10位,正向。
3)操纵OCR1A/