zoukankan      html  css  js  c++  java
  • AVR_GCC程序设计基础

    1.在avr studio的project options(工程选项里面)在General选项里面需要注意的是:

    avr_studio

    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<<i

    2、可先定义变量i,并使之在0~7之间取值,PORTB = _BV(i)

    要使PB端口逐位轮流循环置0:

    1、可先定义变量i,并使之在0~7之间取值,然后使PORTB = ~(1<<i )

    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<strlen(s);i++){显示字符};

    i=0;while(s[i++]!=’\0’){显示字符}

    备注:

    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<strlen(str[1]);i++){显示字符串str[1][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++){显示字符};

  • 相关阅读:
    POJ_2387_最短路
    HDU_3172_带权并查集
    Python_多线程1(创建线程,简单线程同步)
    POJ_3013_最短路
    codeforces_725C_字符串
    python_文件io
    codeforces_731D_(前缀和)(树状数组)
    codeforces_738D
    java反射机制
    struts2入门
  • 原文地址:https://www.cnblogs.com/xmphoenix/p/1968263.html
Copyright © 2011-2022 走看看