|
发表于 2011-7-22 23:15:20
|
显示全部楼层
回复【楼主位】WANGMING
-----------------------------------------------------------------------
//发光二极管纯软件PWM示例程序
//编译环境 ICCAVR V7.16A
//系统时钟1MHZ,内部RC
//日期:2011.07.22
//***********************************************************************
// 包含文件
//***********************************************************************
#include <string.h>
#include <stdio.h>
#include <iom48v.h>
#include <macros.h> //Atmega128头文件
#define uchar unsigned char
#define ulong unsigned long
#define uint unsigned int
/*------------------------------------------------------------------------------
函数说明
------------------------------------------------------------------------------*/
//---------------------延时程序说明------------------------
void delay_1us(void); //1us延时函数
void delay_10us(void); //10us延时函数
void delay_1ms(void); //1ms延时函数
void delay_nus(unsigned int n); //n us延时函数
void delay_nms(unsigned int n); //n ms延时函数
//---------MCU端口初始化程序说明---------
void port_init(void);
//==============================================================================
//*************************************************************************
// 系统初始化子程序
//*************************************************************************
void port_init(void)
{
DDRB=0xff; //设置PB口为输出
PORTB=0x00;
DDRC=0x3f; //设置PB口为输出
PORTC=0xc0;
DDRD=0xff; //设置PB口为输出
PORTD=0x00;
}
/**************延时程序****************/
/*1M内部RC时钟*/
//1us
void delay_1us(void) //1us延时函数
{
_NOP();
}
//10us
void delay_10us(void) //10us延时函数
{
delay_1us();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
delay_1us();
}
//nus
void delay_nus(uint n) //N us延时函数
{
uint i=0;
for (i=0;i<n;i++)
delay_1us();
}
//1ms
void delay_1ms(void) //1ms延时函数
{
unsigned char i=13;
while(i--)
{
delay_10us();
}
}
//nms
void delay_nms(uint n) //N us延时函数
{
while(n--)
{
delay_1ms();
}
}
//*************************************************************************
// 主程序
//*************************************************************************
void main(void)
{ uint i,j,k;
uchar temp=0x01;
port_init();
while(1)
{
for(i=0;i<1000;)
{//for(j=0;j<1;j++)
{
for(k=0;k<3;k++)
{PORTB=temp;PORTD=0xff;
delay_nus(i+1);
PORTB=0;PORTD=0;
delay_nus(1000-i);
}
}
if(i<200) i+=8;
else if((i>=200)&&(i<500)) i+=50;
else i+=120;
}
for(i=0;i<1000;)
{//for(j=0;j<1;j++)
{
for(k=0;k<3;k++)
{PORTB=temp;PORTD=0xff;
delay_nus(1000-i);
PORTB=0;PORTD=0;
delay_nus(i+1);
}
}
if(i<200) i+=8;
else if((i>=200)&&(i<500)) i+=50;
else i+=120;
}
temp<<=1;
if(temp==0) temp=1;
}
} |
|