AVR单片机程序
- 格式:doc
- 大小:141.00 KB
- 文档页数:39
AVR单片机GCC程序设计1. 介绍AVR单片机是一种基于哈佛架构的8位微控制器,具有高性能、低功耗和广泛的应用领域。
GCC是一种开源的编译器套装,可用于编译C、C++和其他编程语言。
本文将介绍AVR单片机的GCC程序设计,包括开发环境的搭建、程序的编写和调试等内容。
2. 开发环境搭建为了进行AVR单片机的GCC程序设计,我们需要搭建相应的开发环境。
以下是搭建开发环境的步骤:2.1 安装AVR工具链AVR工具链是AVR单片机编程的基础,它包含了编译器、汇编器、链接器等工具。
可以从AVR官方网站上下载并安装AVR工具链。
2.2 安装开发环境在进行AVR单片机GCC程序设计之前,需要安装一个适合的开发环境。
常用的开发环境有AVR Studio和Atmel Studio等。
可以根据个人需求选择一个适合的开发环境进行安装。
2.3 配置编译器在开发环境中配置编译器是非常重要的步骤。
需要将AVR工具链的路径添加到系统环境变量中,以便编译器能够找到相应的工具。
3. GCC程序编写在搭建好开发环境后,就可以开始编写GCC程序了。
以下是GCC程序编写的基本步骤:3.1 编写主函数GCC程序的入口是一个名为”main”的函数。
可以在这个函数中进行初始化操作和主程序的编写。
#include <avr/io.h>int main() {// 初始化代码while (1) {// 主程序代码}}3.2 配置引脚AVR单片机的GPIO引脚可以作为输入或输出使用。
可以使用AVR提供的头文件来配置引脚。
#include <avr/io.h>int main() {DDRB = 0xFF; // 将PB引脚配置为输出while (1) {// 主程序代码}}3.3 读写引脚可以使用AVR提供的函数来读写引脚的电平。
#include <avr/io.h>int main() {DDRB = 0xFF; // 将PB引脚配置为输出while (1) {PORTB = 0xFF; // 将PB引脚输出高电平// 延时PORTB = 0x00; // 将PB引脚输出低电平// 延时}}3.4 中断处理AVR单片机支持外部中断,可以在需要的时候触发中断处理函数。
基于AVR单片机的计算器程序在当今的数字化世界中,计算器已成为我们日常生活和工作中不可或缺的工具。
尽管市面上存在许多不同类型的计算器,但基于AVR单片机的计算器程序具有更高的灵活性和可定制性。
本文将介绍如何使用AVR单片机开发一个简单的计算器程序。
一、硬件需求1、AVR单片机:选择一个适合你需求的AVR单片机,如ATmega328P,ATmega128等。
2、按键:你需要为每个数字和操作符提供按键。
3、LED或其他显示设备:用于显示计算器的输出结果。
4、编程器和调试器:用于将程序烧录到单片机上,并进行调试。
二、软件需求1、AVR-GCC:用于编写、编译和链接AVR单片机的程序。
2、AVR-Libc:这是AVR单片机的标准C库。
3、一个文本编辑器或集成开发环境(IDE):用于编写和调试程序。
三、程序设计1、定义按键和LED的接口:你需要定义每个按键和LED与单片机的接口。
这通常涉及设置单片机的特定引脚为输入或输出模式。
2、编写按键处理函数:然后,你需要编写一个函数来处理按键的输入。
这个函数应该能够检测按键的按下和释放,并相应地更新计算器的状态。
3、编写计算逻辑:接下来,你需要编写逻辑来处理各种计算操作。
这可能包括加减乘除、括号、取余等操作。
4、编写显示更新函数:你需要编写一个函数来更新LED上的显示内容。
这个函数应该根据当前的状态来决定显示什么结果。
四、调试和测试在完成程序设计后,你需要使用调试器将程序烧录到单片机上,并进行测试。
你可以通过单步执行程序来检查每个函数是否按预期工作,并确保计算器的整体行为符合预期。
五、结论基于AVR单片机的计算器程序具有很高的灵活性和可定制性,使大家可以根据需要开发出各种不同的计算器。
通过使用AVR单片机,大家可以控制整个系统的硬件和软件,从而能够创建出满足大家特定需求的计算器。
尽管这是一个复杂的项目,但只要大家掌握了AVR单片机的基础知识,大家就可以成功地完成这个项目。
GCC开发AVR单片机程序
静态库的使用
本文档本只介绍GCC 开发AVR程序时,静态库的生成与使用,不涉及其它内容,更多内容请参考其它文档。
1.静态库的生成
编译.O文件后,调用avr-ar.exe 生成静态库文件。
静态库文件名的命名规范是以lib为前缀,紧接着跟静态库名,扩展名为.a。
命令格式如下:
avr-ar -cr libnew.a new.o
-c:create的意思。
-r:replace的意思,表示当插入的模块名已经在库中存在,则替换同名的模块。
如果若干模块中有一个模块在库中不存在,avr-ar显示一个错误消息,并不替换其他同名模块。
默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置。
2.静态库的优点
使用静态库可减小程序代码体积,(只有被调用的函数被链接)。
内存占用更少(只有有函数调用或使用变量的.O文件中的全局变量被分配空间)。
3.静态库的使用
在链接.elf文件时加入静态库文件名,并在搜索路径中包含该库文件的路径,确保链接器能找到该静态库文件。
命令格式如下:
avr-g++.exe -o bin\test.elf obj\main.o -mmcu=atmega128 libnew.a。
AVR单片机相关软件安装本次项目开发使用AVR的AT90CAN128单片机,使用JTAG ICE仿真器,需要安装的软件及驱动有AVRStudio、iccavr、USB转串口驱动以及仿真器驱动。
一、AVRStudio软件安装1. 双击开始准备安装2.单击“Next”,选择同意License3. 选择安装路径4. 选择USB 驱动5. 确定开始安装6.安装中7. 安装完成二、iccavr软件安装1.双击,接着双击iccv7avrV7.22Setup.msi,开始装备安装2. 单击下一步3. 选择安装路径4. 点击安装5. 安装完成三、USB转串口驱动1.双击,点击INSTALL,等待安装完成即可四、仿真器驱动安装(XP版)1. 双击点击SETUP.EXE安装2.安装完成,重新启动计算机AVR单片机编译烧写流程本文以在AT90CAN128芯片上编写的工程can128_sw_defn为例,简单介绍A VR 单片机的编译和烧写流程:一、A VR单片机编译流程1. 打开ICCA VR软件,下拉菜单栏上Project,点击open,弹出对话框如下:选择can128_sw_defn.prj打开,点击右侧栏中的can128_sw_defn.C文件,修改代码。
2. 点击Project->options,或者点按钮,弹出对话框如下:在Target下面的Device Configuration中选择芯片为AT90CAN128,如图所示,点击OK。
3. 点击Build Project,调试栏出现下图即为编译成功,若有错误请根据错误指示进行相应代码修改即可。
二、AVR单片机烧写流程1. 将JTAG ICE与目标板以及PC机相连。
2. 打开A VRStudio,将会提示一个welcome对话框,如下图所示:点“Cancel”即可,然后点击avr studio主窗口中的图标前面标有Con的那个图标,然后按下图选择点“Connect”即可进行JTAG的联机(由于avr studio会记忆用户使用的设备是并且同时会记忆用户使用的COM号,如果下次和上次使用的是相同的设备并且没有更换COM口,那么下次使用的时候直接点击右边标有AVR的那个图标就可以快速进入联机状态;如果下次和上次使用了不同的设备或不同的COM口请使用Con图标进行联机)。
avr单片机教程
AVR单片机是一种常用的微控制器,它由Atmel公司推出。
下面是一个简要的AVR单片机教程,包括AVR单片机的
基本知识和编程技巧。
1. 搭建AVR单片机开发环境:
- 下载并安装AVR编程工具链,例如Atmel Studio或AVR-GCC。
- 连接编程器(如USBasp或AVRISP mkII)和AVR单
片机。
2. 学习AVR单片机的基本原理:
- 了解AVR单片机的体系结构,包括CPU核心和外设。
- 学习AVR单片机的寄存器和位操作,如端口设置和IO 口操作。
- 掌握AVR单片机的时钟系统和时钟分频器。
3. 学习AVR单片机的编程语言:
- C语言是AVR单片机的主要编程语言,需要学习C语言的基本语法和数据类型。
- 掌握AVR单片机的特定编程库和API,如delay函数和IO口操作函数。
4. 学习AVR单片机的编程技巧:
- 学习如何控制IO口,包括输入输出控制和中断处理。
- 掌握定时器和计数器的使用,以实现精确的时间控制。
- 学习如何使用外部中断来响应外部事件。
5. 实践项目:
- 首先进行简单的LED闪烁项目,以检查开发环境和硬件连接是否正常。
- 然后尝试一些基本的输入输出控制实验,如按键控制LED亮灭。
- 接下来尝试更复杂的项目,如控制舵机,驱动LCD屏幕等。
以上是一个基本的AVR单片机教程的大纲,希望能够帮助你入门AVR单片机的学习和应用。
具体的学习细节和项目实践可以通过查阅相关的AVR资料和教程来深入学习。
avr单片机gcc程序设计一、前言AVR单片机是一种常见的嵌入式系统处理器,广泛应用于各种电子设备中。
GCC是一款常用的C语言编译器,也可以用于AVR单片机程序设计。
本文将介绍如何使用GCC进行AVR单片机程序设计。
二、准备工作1. 安装GCC编译器GCC编译器可以在Linux、Windows和Mac OS X等操作系统上安装。
安装方法请参考相关文档。
2. 安装AVR-GCC工具链AVR-GCC工具链包括编译器和调试器等工具,可以在Linux、Windows和Mac OS X等操作系统上安装。
安装方法请参考相关文档。
3. 准备开发板选择一款支持AVR单片机的开发板,并连接到计算机上。
4. 编写代码使用C语言编写程序,并保存为.c文件。
三、编译过程1. 编译源代码打开命令行终端,进入.c文件所在目录,执行以下命令:avr-gcc -mmcu=atmega328p -Wall -Os -o main.o main.c其中,-mmcu选项指定了目标单片机型号;-Wall选项启用所有警告信息;-Os选项启用优化;-o选项指定输出文件名。
2. 生成可执行文件执行以下命令:avr-gcc -mmcu=atmega328p -o main.elf main.o其中,-mmcu选项指定了目标单片机型号;-o选项指定输出文件名。
3. 生成HEX文件执行以下命令:avr-objcopy -j .text -j .data -O ihex main.elf main.hex其中,-j选项指定要复制的段;-O选项指定输出格式。
四、烧录过程使用AVR ISP编程器将HEX文件烧录到目标单片机中。
五、调试过程可以使用AVR-GDB进行调试。
首先需要在编译源代码时添加-g选项,生成带有调试信息的可执行文件。
然后执行以下命令:avr-gdb main.elf进入GDB调试界面后,可以使用各种GDB命令进行调试。
六、结语本文介绍了AVR单片机GCC程序设计的基本过程,包括准备工作、编译过程、烧录过程和调试过程。
ATMAGE 16 的C语言程序ATMAGE 16 的C语言程序 (1)一、PB0 口的PB0.1 LED 发光管闪烁的程序: (3)二、PA0、PB0、PC0口的LED 发光管闪烁的程序: (5)三、I/O口的输入与输出 (6)四、跑马灯 (8)五、数码管计数显示设计 (10)六、控制直流电机正反转 (16)七、单片机的定时器(T/C0)应用 (20)AVR原理图 (24)一、PB0 口的PB0.1 LED 发光管闪烁的程序:#include <avr/io.h>int main( void ){unsigned char i, j, k,led=0;DDRB=0xFF; /* all outputs */while (1){if(led)PORTB|=0X01; /* |使最后一位为1 */elsePORTB&=0XFE; /*&最后一位为0 */ led=!led;//延时for (i=0; i<255; i++)for(j=0; j<255;j++)k++;}}/////////////////////////////////////////////////////////////// #include <avr/io.h>int main( void ){unsigned char i, j, k,led=0;DDRB=0xFF; /* all outputs */while (1){if(led)PORTB=0Xfe;elsePORTB=0Xff;led=!led;for (i=0; i<255; i++) //延时for(j=0; j<255;j++)k++;}}二、PA0、PB0、PC0口的LED 发光管闪烁的程序:#include <avr/io.h>int main( void ){unsigned char i, j, k,led=0;DDRA=0xFF;//为输出DDRB=0xFF;DDRC=0XFF;while (1){if(led){PORTA|=0XFF;PORTB|=0XFF;PORTC|=0XFF;}else{PORTA&=0X00;PORTB&=0X00;PORTC&=0X00;}led=!led;//取反////////////延时////////////////for (i=0; i<255; i++)for(j=0; j<255;j++)k++;}}三、I/O口的输入与输出#include <avr/io.h>///////////////////延时us//////////////////void delay_us(int t){dot--;while(t>1);}///////////////////延时ms///////////////// void delay_ms(unsigned int t){while(t!=0){delay_us(1142);t--;}}///////////////////主程序/////////////////////int main(void){DDRA = 0xff; /* all outputs */ DDRB = 0xff; /* all outputs */ DDRC = 0xff; /* all outputs */PORTA=0XFF;PORTB=0XFF;PORTC=0XFF;while(1){//***IO口输出低电平有效,如:0X01为十六进制数,二进制表示为00000001B,再取反////////A口输出//////PORTA=~0X01; // ~表示取反delay_ms(100);//延时N秒PORTA=~0X02;delay_ms(100);PORTA=~0X04;delay_ms(100);PORTA=~0X08;delay_ms(100);PORTA=~0X10;delay_ms(100);PORTA=~0X20;delay_ms(100);PORTA=~0X40;delay_ms(100);PORTA=~0X80;delay_ms(100);PORTA=0X00;//循环结束全亮////////B口输出//////PORTB=~0X01;delay_ms(100);PORTB=~0X02;delay_ms(100);PORTB=~0X04;delay_ms(100);PORTB=~0X08;delay_ms(100);PORTB=~0X10;delay_ms(100);PORTB=~0X20;delay_ms(100);PORTB=~0X40;delay_ms(100);PORTB=~0X80;delay_ms(100);PORTB=0X00;////////C口输出//////PORTC=~0X01;delay_ms(100);PORTC=~0X02;delay_ms(100);PORTC=~0X04;delay_ms(100);PORTC=~0X08;delay_ms(100);PORTC=~0X10;delay_ms(100);PORTC=~0X20;delay_ms(100);PORTC=~0X40;delay_ms(100);PORTC=~0X80;delay_ms(100);PORTC=0X00;}}四、跑马灯#include <avr/io.h>#define uchar unsigned char#define uint unsigned intvoid delayms(uint i){uint j;for(;i!=0;i--){for(j=8000;j!=0;j--);}}void horse(uchar i){switch (i){case 1:PORTB=0X01;break; case 2:PORTB=0X03;break; case 3:PORTB=0X07;break; case 4:PORTB=0X0f;break; case 5:PORTB=0X1f;break;case 6:PORTB=0X3f;break; case 7:PORTB=0X7f;break; case 8:PORTB=0Xff;break; default:break;}}void main(void){uchar i;DDRB=0XFF;PORTB=0XFF;PORTB=0X00;delayms(10);while(1){for(i=1;i<9;i++){horse(i);delayms(10);}for(i=7;i!=0;i--){horse(i);delayms(10);}}五、数码管计数显示设计1、两个按键PB0和PB1分别控制加减。
* 文件名:闪烁灯.c* 杜邦线接法:用单条杜邦线把PD.0和J38的1端相连接。
***********************************************************************/ #include <avr/io.h>#define F_CPU 8000000 //这里的值是单片机工作的相关晶振频率#include <util/delay.h>#define LED1 PORTD|=~0XFE //LED=1 LED不亮#define LED0 PORTD&=0XFE //LED=0 LED发光int main(void){DDRD = 0x01; //PD0定义为输出,PD的其他端口为输入。
while(1){LED1;_delay_ms(500);LED0;_delay_ms(500);}}* 创立人:东流,2012年2月10日* 杜邦线接法:用8针杜邦线把PD和J38的1--8连接〔PD0对应J38的1端〕。
用杜邦线把PB0对应J38的9端。
用杜邦线把PB1对应J38的10端。
用杜邦线把PB2对应J38的11端。
用杜邦线把PB3对应J38的12端。
***********************************************************************/ #include <avr/io.h>#define F_CPU 8000000 //这里的值是单片机工作的相关晶振频率#include <util/delay.h>int main(void){DDRD = 0xff;DDRB = 0x0f;while(1){/*北面的三个LED亮*/PORTD = 0xf8;PORTB = 0xff;_delay_ms(300);/*东面的三个LED亮*/PORTD = 0xc7;PORTB = 0xff;_delay_ms(300);/*南面的三个LED亮*/PORTD = 0x3f;PORTB = 0xfe;_delay_ms(300);/*西面的三个LED亮*/PORTD = 0xff;PORTB = 0xf1;_delay_ms(300);/*北面的两个LED亮,中间一个不亮*/PORTD = 0xfa;PORTB = 0xff;_delay_ms(300);/*东面的两个LED亮,中间一个不亮*/PORTD = 0xd7;PORTB = 0xff;_delay_ms(300);/*南面的两个LED亮,中间一个不亮*/PORTD = 0xbf;PORTB = 0xfe;_delay_ms(300);/*西面的两个LED亮,中间一个不亮*/PORTD = 0xff;PORTB = 0xf5;_delay_ms(300);/*12个LED全亮*/PORTD = 0x00;PORTB = 0xf0;_delay_ms(200);/*12个LED全灭*/PORTD = 0xff;PORTB = 0xff;_delay_ms(200);/*12个LED全亮*/PORTD = 0x00;PORTB = 0xf0;_delay_ms(200);/*12个LED全灭*/PORTD = 0xff;PORTB = 0xff;_delay_ms(200);}}* 描述: 在LED上按照要求,进行不同的显示。
* 文件名:闪烁灯.c* 杜邦线接法:用单条杜邦线把PD.0和J38的1端相连接。
***********************************************************************/ #include <avr/io.h>#define F_CPU 8000000 //这里的值是单片机工作的相关晶振频率#include <util/delay.h>#define LED1 PORTD|=~0XFE //LED=1 LED不亮#define LED0 PORTD&=0XFE //LED=0 LED发光int main(void){DDRD = 0x01; //PD0定义为输出,PD的其他端口为输入。
while(1){LED1;_delay_ms(500);LED0;_delay_ms(500);}}* 文件名:闪烁灯2.c* 创建人:东流,2012年2月10日* 版本号:1.0* 杜邦线接法:用8针杜邦线把PD和J38的1--8连接(PD0对应J38的1端)。
用杜邦线把PB0对应J38的9端。
用杜邦线把PB1对应J38的10端。
用杜邦线把PB2对应J38的11端。
用杜邦线把PB3对应J38的12端。
***********************************************************************/ #include <avr/io.h>#define F_CPU 8000000 //这里的值是单片机工作的相关晶振频率#include <util/delay.h>int main(void){DDRD = 0xff;DDRB = 0x0f;while(1){/*北面的三个LED亮*/PORTD = 0xf8;PORTB = 0xff;_delay_ms(300);/*东面的三个LED亮*/PORTD = 0xc7;PORTB = 0xff;_delay_ms(300);/*南面的三个LED亮*/PORTD = 0x3f;PORTB = 0xfe;_delay_ms(300);/*西面的三个LED亮*/PORTD = 0xff;PORTB = 0xf1;_delay_ms(300);/*北面的两个LED亮,中间一个不亮*/PORTD = 0xfa;PORTB = 0xff;_delay_ms(300);/*东面的两个LED亮,中间一个不亮*/PORTD = 0xd7;PORTB = 0xff;_delay_ms(300);/*南面的两个LED亮,中间一个不亮*/PORTD = 0xbf;PORTB = 0xfe;_delay_ms(300);/*西面的两个LED亮,中间一个不亮*/PORTD = 0xff;PORTB = 0xf5;_delay_ms(300);/*12个LED全亮*/PORTD = 0x00;PORTB = 0xf0;_delay_ms(200);/*12个LED全灭*/PORTD = 0xff;PORTB = 0xff;_delay_ms(200);/*12个LED全亮*/PORTD = 0x00;PORTB = 0xf0;_delay_ms(200);/*12个LED全灭*/PORTD = 0xff;PORTB = 0xff;_delay_ms(200);_delay_ms(500); //延时0.5秒}}* 文件名:闪烁灯2.c* 描述: 在LED上根据要求,进行不同的显示。
* 杜邦线接法:用8针杜邦线把PD和J38的1--8连接(PD0对应J38的1端)。
用杜邦线把PB0对应J38的9端。
用杜邦线把PB1对应J38的10端。
用杜邦线把PB2对应J38的11端。
用杜邦线把PB3对应J38的12端。
***********************************************************************/ #include <avr/io.h>#define F_CPU 8000000 //这里的值是单片机工作的相关晶振频率#include <util/delay.h>#define uchar unsigned charint main(void){uchar i, temp;DDRD = 0xff;DDRB = 0x0f;PORTB = 0xff;PORTD = 0xff;while(1){temp = 0xf7;for(i=0; i<4; i++){PORTB = temp; //把值赋给P2口_delay_ms(100); //延时(10毫秒* j)秒temp = temp >> 1; //值右移一位temp = temp | 0x08;}PORTB = 0xff;temp = 0x7f;for(i=0; i<8; i++){PORTD = temp; //把值赋给P1口_delay_ms(100); //延时(10毫秒* j)秒temp = temp >> 1; //值右移一位temp = temp | 0x80;}PORTD=0xff;}}* 文件名:闪烁灯2.c* 杜邦线接法:用8针杜邦线把PD和J38的1--8连接(PD0对应J38的1端)。
用杜邦线把PB0对应J38的9端。
用杜邦线把PB1对应J38的10端。
用杜邦线把PB2对应J38的11端。
用杜邦线把PB3对应J38的12端。
***********************************************************************/ #include <avr/io.h>#define F_CPU 8000000 //这里的值是单片机工作的相关晶振频率#include <util/delay.h>#define uchar unsigned char//定义北面的三个灯的两灭#define LED1L PORTD&=0XFE //LED1=0 LED1红灯发光#define LED2L PORTD&=0XFD //LED2=0 LED2黄灯发光#define LED3L PORTD&=0XFB //LED3=0 LED3绿灯发光#define LED1M PORTD|=~0XFE //LED1=1 LED红灯不亮#define LED2M PORTD|=~0XFD //LED2=1 LED黄灯不亮#define LED3M PORTD|=~0XFB //LED3=1 LED绿灯不亮//定义东面的三个灯的两灭#define LED4L PORTD&=0XF7 //LED4=0 LED4红灯发光#define LED5L PORTD&=0XEF //LED5=0 LED5黄灯发光#define LED6L PORTD&=0XDF //LED6=0 LED6绿灯发光#define LED4M PORTD|=~0XF7 //LED4=1 LED红灯不亮#define LED5M PORTD|=~0XEF //LED5=1 LED黄灯不亮#define LED6M PORTD|=~0XDF //LED6=1 LED绿灯不亮//定义南面的三个灯的两灭#define LED7L PORTD&=0XBF //LED7=0 LED7红灯发光#define LED8L PORTD&=0X7F //LED8=0 LED8黄灯发光#define LED9L PORTB&=0XFE //LED9=0 LED9绿灯发光#define LED7M PORTD|=~0XBF //LED7=1 LED红灯不亮#define LED8M PORTD|=~0X7F //LED8=1 LED黄灯不亮#define LED9M PORTB|=~0XFE //LED9=1 LED绿灯不亮//定义西面的三个灯的两#define LED10L PORTB&=0XFD //LED10=0 LED10红灯发光#define LED11L PORTB&=0XFB //LED11=0 LED11黄灯发光#define LED12L PORTB&=0XF7 //LED12=0 LED12绿灯发光#define LED10M PORTB|=~0XFD //LED10=1 LED红灯不亮#define LED11M PORTB|=~0XFB //LED11=1 LED黄灯不亮#define LED12M PORTB|=~0XF7 //LED12=1 LED绿灯不亮int main(void){ unsigned char i;DDRD = 0xff; //PD口定义为输出DDRB = 0x0f; //PB口定义为输出PORTD = 0xff; //PD口赋值高电平PORTB = 0x0f; //PB口赋值高电平while(1){ /*南北红灯亮、东西绿灯亮、持续时20秒*/LED1L; LED2M; LED3M;LED4M; LED5M; LED6L;LED7L; LED8M; LED9M;LED10M; LED11M; LED12L;/*这里,我们调用_delay_ms()函数的时候,参数不要过大,最好不要超过1000,怕引起溢出*/for(i=0;i<20;i++){_delay_ms(1000); //延时20个1秒,总共时间20秒}/*南北红灯亮、东西黄灯亮、持续时间5秒*/LED1L; LED2M; LED3M;LED4M; LED5L; LED6M;LED7L; LED8M; LED9M;LED10M; LED11L; LED12M;for(i=0;i<5;i++){_delay_ms(1000);}/*南北绿灯亮、东西红灯亮、持续时间20秒*/LED1M; LED2M; LED3L;LED4L; LED5M; LED6M;LED7M; LED8M; LED9L;LED10L; LED11M; LED12M;for(i=0;i<20;i++){_delay_ms(1000);}/*南北黄灯亮、东西红灯亮、持续时间5秒*/LED1M; LED2L; LED3M;LED4L; LED5M; LED6M;LED10L; LED11M; LED12M;for(i=0;i<5;i++){_delay_ms(1000);}}}* 文件名: 数码管显示.c* 杜邦线接法:用8针排线把PD口和J12的1-8连接(PD.0接J12的1端)。