历史上的今天
今天是:2024年12月03日(星期二)
2019年12月03日 | AVR_GCC程序设计基础
2019-12-03 来源:eefocus
1.在avr studio的project options(工程选项里面)在General选项里面需要注意的是:

edit configuratio:这个选项的意思是当前项目的默认输出文件夹是default,而且这个文件夹的名称是可以改的
Device:是我们要选择工作的芯片
Frequency:是芯片的工作频率
Optimizatio:是程序编译时优化的级别主要是优化程序输出可执行文件的大小
unsigned char(-funsigned char):默认程序中的char类型为是无符号类型
其他的设置都基本上是默认的设置。
2.makfile
在使用avr_gcc的编译器是,makfile是必不可少,如果你是默认的话则在你的选项里面不需要选择use external makfile选项。如果你要自己编写的话就需要放到自己的工程目录下,但是一般的情况下我们不这样做,我们只是需要在avr_gcc的安装程序里面运行MFile修改里面的基本参数保存下就可以了。
PROJECT:设置输出的项目的名称,需要的话可以自己改写
MCU:设置自己当前项目所选用的cpu
TARGET:设置输出目标调试文件(xx.elf)
DF CPU:设置cpu的时钟频率
OBJECTS:列出built时使用的目标文件(xx.0)
基本的情况大致和以上差不多,但是肯能版本的关系称呼不一样,但是这几个主要的选项是比不可以少的。
3.基本的数据类型
signed char(char) 8位 -128~127
unsigned char 8位 0~255
char 8位 以上的两种之一,关键在开始的默认选择里面是什么就是什么
int(signed int) 16位 -32768-32767
unsigned int 16位 0~65535
long(signed long) 32位 -2147483648~2147483647
unsigned long 32位 0~4294967295
float/double 32位 -3.4*10(38)~3.4*10(38)
4.基本的技巧-分解取数
对整数的分解取数
unsigned char num=224;
unsigned char tab[3];
tab[0]=num/100;
tab[1]=num/10%10;
tab[2]=num%10;
对浮点数的分解取数
float num =123.45;
unsigned int Bum=num*100;
unsigned char tab[5],i;
for(i=4;i!=0xff;i—)
{
c[i] = y%10;
y/=10;
}注解:现在我们选择的判断条件是!=0xff不是0是因为我们要循环5次当i=0时是循环第五次,循环这次后由于i是unsigned char 类型,要是在循环一次的话就会溢出成为0xff这样就不符合条件就跳出循环。同理要是要你分解0x7f的话就只要把10换成16就可以,其他的不变
备注:/是取商求模,%是取余数。
4.基本的技巧-IO管脚的操作
要使PB端口逐位轮流循环置1:
1、可先定义变量i,并使之在0~7之间取值,然后使PORTB = 1<2、可先定义变量i,并使之在0~7之间取值,PORTB = _BV(i)
要使PB端口逐位轮流循环置0:
1、可先定义变量i,并使之在0~7之间取值,然后使PORTB = ~(1<2、可先定义变量i,并使之在0~7之间取值,PORTB = ~_BV(i)
外接LED闪烁或者蜂鸣器发声:
1.#define LED_BLINK() PORTRD^=_BV(PD7)
2.#define BEEP() PORTD^=_BV(PD7)
5.数组、字符串、指针
数组:定义7段数码管0~9的共阳段码
const unsigned char tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
字符数组:定义并且在数码管上显示
1.定义:
unsigned char str[20]=”xmphoenix”;
unsigned char str[20]={“xmphoenix”};
unsigned char str[20]={‘x’,’m’,’p’,’h’,’o’,’e’,’n’,’i’,’x’};
2.显示:
for(i=0;i<9;i++){显示字符};
for(i=0;i 备注: 3.同时字符串还可以这样定义 unsigned char str[]=”xmphoenix”; usnigned char *str=”xmphoenix”; 在数组和字符串的最后面系统默认的加上了结束标志符0x00,十进制和ASCII码之间的转换:ASCII=十进制+0x30; 4.二维字符数组 定义:unsigned char str[][20]={“xmphoenix”,”ncut”,”beijing”} 显示:for(i=0;i 5.gcc的相关函数 itoa(x,(char*)x,x) 有符号的10进制x转化成字符串保存在char * itoa(x,(char*)x,x)无符号的10进制x转化成字符串保存在char * 还可以用sprintf来转换进制和ASCII码具体参考技术手册 指针: unsigned char str[20]=”xmphoenix”; unsigned char *st =str; for(i=0;*str!=0;i++){显示字符};
史海拾趣
|
摘要:本文指出建筑设计院和系统集成商承担建筑智能化系统工程设计的状况将长期存在。由于种种原因,施工图设计质量不尽如人意,存在较多的问题。精心设计、精心施工,才能提高智能化系统工程的设计质量和工程技术水平,需要领导重视,设计人员敬业 ...… 查看全部问答> |
|
软复位无法正常复位系统,大家的软复位系统中硬件是如何处理的? 每次重启到解压linux时就挂了。软复位是接到74LCX00的,和硬复位相与提供整个系统的复位信号。抓了一下软复位指令,指令发出后给出的电平实在太小了,而且时间也很短,加了个RC延迟后还是不行。想问下大家有没有什么最近简单的方法来延迟这个软复位 ...… 查看全部问答> |
|
上面的程序为一个ARM下的QT程序通过QVFB运行时的效果图。 我们知道在桌面Linux中设置系统的背景图片是非常简单的。通常只需要右键选择设置桌面背景即可。 但在Qt for Embedded Linux的环境中,并没有桌面系统,如何来设置整个 ...… 查看全部问答> |
|
不知那位大哥用过LF2407,我想请教一下:如果我想用LF2407外扩一片64Kx16的数据RAM和一片64Kx16的程序RAM,我的LF2407的引脚应该怎样搭建?另想问一下:/STRB这个引脚有何作用?在外扩存储器时 是否可以不用这个脚? … 查看全部问答> |
|
关于LM3S2B93 的CAN 使用问题,请高手帮忙。 谢~! 我在做LM3S2B93的CAN通讯的时候,出现如下两个错误: 用最新的库:driverlib.a Error[Li005]: no definition for \"CANRegRead\" [referenced from E:\\CAN\\Debug\\Obj\\my_can.o] Error[Li005]: no definition for \"CANRegW ...… 查看全部问答> |




