AVR单片机程序.docx
- 文档编号:26097753
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:58
- 大小:27.84KB
AVR单片机程序.docx
《AVR单片机程序.docx》由会员分享,可在线阅读,更多相关《AVR单片机程序.docx(58页珍藏版)》请在冰豆网上搜索。
AVR单片机程序
/********************************************************************
*文件名:
闪烁灯.c
*杜邦线接法:
用单条杜邦线把PD.0和J38的1端相连接。
***********************************************************************/
#include
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineLED1PORTD|=~0XFE//LED=1LED不亮
#defineLED0PORTD&=0XFE//LED=0LED发光
intmain(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
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
intmain(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
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
intmain(void)
{
uchari,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
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
//定义北面的三个灯的两灭
#defineLED1LPORTD&=0XFE//LED1=0LED1红灯发光
#defineLED2LPORTD&=0XFD//LED2=0LED2黄灯发光
#defineLED3LPORTD&=0XFB//LED3=0LED3绿灯发光
#defineLED1MPORTD|=~0XFE//LED1=1LED红灯不亮
#defineLED2MPORTD|=~0XFD//LED2=1LED黄灯不亮
#defineLED3MPORTD|=~0XFB//LED3=1LED绿灯不亮
//定义东面的三个灯的两灭
#defineLED4LPORTD&=0XF7//LED4=0LED4红灯发光
#defineLED5LPORTD&=0XEF//LED5=0LED5黄灯发光
#defineLED6LPORTD&=0XDF//LED6=0LED6绿灯发光
#defineLED4MPORTD|=~0XF7//LED4=1LED红灯不亮
#defineLED5MPORTD|=~0XEF//LED5=1LED黄灯不亮
#defineLED6MPORTD|=~0XDF//LED6=1LED绿灯不亮
//定义南面的三个灯的两灭
#defineLED7LPORTD&=0XBF//LED7=0LED7红灯发光
#defineLED8LPORTD&=0X7F//LED8=0LED8黄灯发光
#defineLED9LPORTB&=0XFE//LED9=0LED9绿灯发光
#defineLED7MPORTD|=~0XBF//LED7=1LED红灯不亮
#defineLED8MPORTD|=~0X7F//LED8=1LED黄灯不亮
#defineLED9MPORTB|=~0XFE//LED9=1LED绿灯不亮
//定义西面的三个灯的两
#defineLED10LPORTB&=0XFD//LED10=0LED10红灯发光
#defineLED11LPORTB&=0XFB//LED11=0LED11黄灯发光
#defineLED12LPORTB&=0XF7//LED12=0LED12绿灯发光
#defineLED10MPORTB|=~0XFD//LED10=1LED红灯不亮
#defineLED11MPORTB|=~0XFB//LED11=1LED黄灯不亮
#defineLED12MPORTB|=~0XF7//LED12=1LED绿灯不亮
intmain(void)
{unsignedchari;
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端)。
用8针排线把PB口和J13的1-8连接(PB.7接J13的1端)。
***********************************************************************/
#include
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
#defineuintunsignedint
//数码管的段码编码
uchartable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchartable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
intmain(void)
{
uchari=0;
DDRB=0xff;
DDRD=0xff;
PORTB=0x00;//P2口控制的数码管的位选,当P2口的某一位为低电平时,点亮。
顾客可以修改这里的值。
//比如改为0xfe,就是最后一位数码管亮。
比如改为0x7f,就是最高一位数码管点亮。
while
(1)
{
PORTD=table[i%16];//在这里取i的个位数,不带点显示
i++;
_delay_ms(1000);//延时0.5秒后显示下一个数
}
}
/********************************************************************
*文件名:
数码管显示.c
*杜邦线接法:
用8针排线把PD口和J12的1-8连接(PD.0接J12的1端)。
用8针排线把PB口和J13的1-8连接(PB.7接J13的1端)。
***********************************************************************/
#include
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
#defineuintunsignedint
//数码管的段码编码
uchartable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchartable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
intmain(void)
{
uchari,j;
DDRB=0xff;
DDRD=0xff;
while
(1)
{
for(j=0;j<100;j++)
{
PORTD=table[(i/10)%10];//在这里取i的个位数,不带点显示
PORTB=0xfd;
_delay_ms(5);//延时0.5秒后显示下一个数
PORTD=table[i%10];//在这里取i的个位数,不带点显示
PORTB=0xfe;
_delay_ms(5);
}
i++;
}
}
/********************************************************************
*文件名:
数码管显示.c
*杜邦线接法:
用8针排线把PD口和J12的1-8连接(PD.0接J12的1端)。
用8针排线把PB口和J13的1-8连接(PB.7接J13的1端)。
***********************************************************************/
#include
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
#defineuintunsignedint
//数码管的段码编码
uchartable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchartable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
intmain(void)
{
uchari=0;
DDRB=0xff;
DDRD=0xff;
PORTB=0xfe;
PORTD=table[6];
while
(1);
}
/********************************************************************
*文件名:
数码管显示.c
*杜邦线接法:
用8针排线把PD口和J12的1-8连接(PD.0接J12的1端)。
用8针排线把PB口和J13的1-8连接(PB.7接J13的1端)。
***********************************************************************/
#include
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
#defineuintunsignedint
//数码管的段码编码
uchartable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchartable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
intmain(void)
{
uchari;
DDRB=0xff;
DDRD=0xff;
while
(1)
{
PORTB=0xfe;
for(i=0;i<8;i++)
{
PORTD=table[i];//在这里取i的个位数,不带点显示
_delay_ms(3);//延时0.5秒后显示下一个数
PORTB=(PORTB<<1)|0x01;
}
i++;
}
}
/********************************************************************
*文件名:
数码管显示.c
*杜邦线接法:
用8针排线把PD口和J12的1-8连接(PD.0接J12的1端)。
用8针排线把PB口和J13的1-8连接(PB.7接J13的1端)。
***********************************************************************/
#include
#defineF_CPU8000000//这里的值是单片机工作的相关晶振频率
#include
#defineucharunsignedchar
#defineuintunsignedint
//数码管的段码编码
uchartable[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchartable_d[16]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
intmain(void)
{
uchari,j,LED_temp;
DDRB=0xff;
DDRD=0xff;
while
(1)
{
for(j=0;j<40;j++)
{
PORTB=0xfe;
for(i=0;i<8;i++)
{
PORTD=table[(i+LED_temp)%8];//数码管段值//点亮某一位数码管
_delay_ms
(2);
PORTB=(PORTB<<1)|0X01;
}
}
LED_temp+=1;
}
}
/********************************************************************
*文件名:
数码管显示.c
*杜邦线接法:
用8针排线把J11口和J12的1-8连接(J11的1端接J12的8端)。
用8
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AVR 单片机 程序