1.打开软件
2.软件中打开配套代码
File -> Open -> Project/Solution...
然后找到开发板配套资料包的项目文件:
加载中....
有时候软件会提示你更新ATmega_DFP的库,这里取消即可
此时可以看到项目已经打开了:
备注:这里打开此项目也可以直接在代码的文件目录里面,双击项目文件
双击一下main.c文件,可以看到整个代码的内容如下:
再看一下开发板流水灯对应的单片机引脚原理图:
6路发光二极管的流水灯,通过一个双排的排针短路到单片机的PF2~PF7口,这个时候跳线帽记得安装上,如上图红色框框。
通过下面发光二极管的原理图可以知道:
只要单片机的PF2~PF7输出低电平,对应的对应的灯即可点亮,电流通过灯D5-D10再到限流电阻R5-R10,然后再到单片机,使得灯亮起。
再看看芯片手册关于电流的说明:
此时我们使用了10K的电阻,满足条件,自己在设计发光二极管的时候,限流电阻最好不要过小,别导致单片机发热。
再看看代码:
首先还是头文件的定义:
#include <avr/io.h>
#define F_CPU 8000000UL //外部晶振设置
#include <util/delay.h>
再对灯口进行宏定义,这里使用蜂鸣器进行上电提示
#define LED PORTF
#define BEEL_ON (PORTB |= 0x01)
#define BEEL_OFF (PORTB &= ~(0x01))
unsigned char i = 0;//tab 为设置F口输出的值,对应的低、高电平可以点亮、熄灭LED灯
unsigned char tab[16] =//此数据赋值到PF口
{0XFB,0XF3,0XE3,0XC3,0X83,0X03,0X03,0X83,0XC3,0XE3,0XF3,0XFB,0X55,0XAA,0X55,0XAA};
上面的数值赋值到PF口时,一个8位的数据刚好对应的PF 8个io(PF0~PF7),如下图:
如下图,跟第二个数据对比,第一个数据PF2输出低,第二个数据PF2和PF3输出低电平,其他数据一次类推。
/*******************************************************************************
* 函数名称: io_init()
* 入口参数: void
* 函数作者: 木仔科技
* 功能描述: IO口初始化
*******************************************************************************/
void io_init(void)
{
DDRB |= 0x01; //设置PB0为输出 蜂鸣器
PORTB &= ~(0x01);//PB0输出低电平
DDRF = 0xFC;//LED灯口 PF2~PF7设置为输出
PORTF = 0xFC;//输出高电平即:1111 1100 所有灯不亮
}
/*******************************************************************************
* 函数名称: main()
* 入口参数: void
* 函数作者: 木仔科技
* 功能描述: 主函数
*******************************************************************************/
int main(void)
{
io_init();//io初始化
BEEL_ON;//蜂鸣器响
_delay_ms(100);//蜂鸣器响的时间,如何不习惯的,可以删除蜂鸣器响
BEEL_OFF;//蜂鸣器关闭
/* Replace with your application code */
while (1)
{
LED = 0X00;//灯全亮_delay_ms(1000);//延时LED = 0XFC;//灯全灭_delay_ms(1000);//延时
for(i = 0;i < 16;i ++)//循环数组共16个数据,赋值到F口,对应高低电平点亮或不点亮LED灯
{LED = tab[i];//从第一个数据开始0xFB->0xF3->0xE3->0xC3....._delay_ms(200);//延时,灯亮、灭时间}i = 0;//16个数据都赋值完了,又重新开始}
}