历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | Atmega16l单相逆变器SPWM原理图PCB及源程序

2019-10-21 来源:51hei

Altium Designer画的原理图和PCB图


Atmega16l单片机源码如下:

#include

#include

#define uint unsigned int

#define uchar unsigned char

uchar zd=0,c=0;

uint iv=0,ii=0,ov=0,oi=0,sj=0,b=0;

uchar table[3]={8,8,8};

#pragma data:code

flash uint table1[]={0X3f,0X06,0X5b,0X4f,0X66,0X6d,0X7d,0X07,0X7f,0X6f,0X77,0X7c,0X39,0X5e,0X79,0X71,0X00,

0X40,0XFF};

flash uint table2[]={

0,5,10,16,21,27,32,38,43,48,54,59,64,69,75,80,85,90,95,100,

105,110,115,120,124,129,134,138,143,147,152,156,160,164,168,172,176,180,184,187,

191,194,198,201,204,207,210,213,216,219,221,224,226,228,230,233,234,236,238,240,

241,242,244,245,246,247,247,248,249,249,249,249,250,249,249,249,249,248,247,247,

246,245,244,242,241,240,238,236,234,233,230,228,226,224,221,219,216,213,210,207,

204,201,198,194,191,187,184,180,176,172,168,164,160,156,152,147,143,138,134,129,

125,120,115,110,105,100,95,90,85,80,75,69,64,59,54,48,43,38,32,27,

21,16,10,5,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0};


flash uint table3[]={

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

0,0,0,0,

0,5,10,16,21,27,32,38,43,48,54,59,64,69,75,80,85,90,95,100,

105,110,115,120,124,129,134,138,143,147,152,156,160,164,168,172,176,180,184,187,

191,194,198,201,204,207,210,213,216,219,221,224,226,228,230,233,234,236,238,240,

241,242,244,245,246,247,247,248,249,249,249,249,250,249,249,249,249,248,247,247,

246,245,244,242,241,240,238,236,234,233,230,228,226,224,221,219,216,213,210,207,

204,201,198,194,191,187,184,180,176,172,168,164,160,156,152,147,143,138,134,129,

125,120,115,110,105,100,95,90,85,80,75,69,64,59,54,48,43,38,32,27,

21,16,10,5};


#pragma interrupt_handler timer2_capt_isr:5

#pragma interrupt_handler adc_sj:15

void timer2_capt_isr()

{

   TCNT2=5;

   c++;

   if(c>=2)

   {

     c=0;

         OCR1AH=0;

         OCR1AL=table2[b];

         OCR1BH=0;

     OCR1BL=table3[b];

         b++;

         if(b>=288){b=0;zd++;}

   }

}

void timer1_init()

{

    TCCR2=0X01;

        TCNT2=5;

        OCR1AH=0;

        OCR1AL=0;

        OCR1BH=0;

        OCR1BL=0;

        ICR1=250;

        TCCR1A=0XA0;

        TCCR1B=0X11;

}

void init_devices()

{

        DDRD|=BIT(4);

        DDRD|=BIT(5);

        timer1_init();

        MCUCR=0X00;

        GICR=0X00;

        TIMSK=0X40;

        SREG|=BIT(7);

}

void led()//正常指示灯

{

    PORTB|=BIT(3);

        PORTB&=~BIT(4);

}

void led1()//故障指示灯

{

   PORTB&=~BIT(3);

   PORTB|=BIT(4);

}

void led2()//报警指示灯

{

   PORTB|=BIT(4);

   PORTB|=BIT(3);

}

void ad_init(uchar a)//AD转换

{

  // uint sj;

   SFIOR=0;//设置ADC为连续工作模式

   ADMUX=a;//设置那一路ADC转换

   ADCSR=0X80;//ADC转换使能

   ADCSR|=BIT(ADSC);//启动ADC

   ADCSR|=BIT(ADIE);

   SREG|=BIT(7);

//  while(!(ADCSR&(BIT(ADIF))));//等待ADC转换完成

//  sj=ADCL;

//  sj=sj+256*ADCH;

  // ADCSR|=BIT(ADIF);

  // ADCSR=0X00;//关闭ADC

  // return sj;

}


void  show(uchar bai,uchar shi,uchar ge )

{   

         PORTC=table1[bai];

         PORTA|=BIT(7); 

         PORTA&=~BIT(7);

         PORTC=table1[shi];

         PORTA|=BIT(6);

         PORTA&=~BIT(6);

         PORTC=table1[ge];

         PORTA|=BIT(5);

         PORTA&=~BIT(5);

}

void adc_sj()

{

   sj=ADCL;

   sj=sj+256*ADCH;

   ADCSR|=BIT(ADIF);

   ADCSR=0X00;//关闭ADC

}

void  delay(uint ms)

{

           uint  x,y;

          for(x=0;x          {

             for(y=0;y<1141;y++);

          }

}

void main()

{

   uchar f=0;

   uint ci=0;

        DDRC=0XFF;

        DDRA|=BIT(5);

        DDRA|=BIT(6);

        DDRA|=BIT(7);

        PORTC=0X00;

    PORTA&=~BIT(7);

        PORTA&=~BIT(6);

        PORTA&=~BIT(5);

        DDRA&=~BIT(1);

        PORTA&=~BIT(1);

        DDRA&=~BIT(4);

        PORTA&=~BIT(4);

        

    DDRB|=BIT(3);

    DDRB|=BIT(4);

    PORTB&=~BIT(3);

    PORTB&=~BIT(4);

    DDRB|=BIT(6);

    PORTB&=~BIT(6);

    init_devices();

   while(1)

   {

    if(zd>=80)

           {

            zd=0;

                switch(f)

                {

                  case 0: table[0]=1;table[1]=17;table[2]=17;f++;ad_init(0x44);

                  break;

                  case 1:sj=sj/51;iv=sj;table[0]=iv/100;table[1]=iv%100/10;table[2]=iv%10;f++;sj=0;led();

                  break;

                  case 2: table[0]=2;table[1]=17;table[2]=17;f++;

                  break;

……………………



推荐阅读

史海拾趣

问答坊 | AI 解惑

vim中verilog/VHDL怎么自动缩进啊??

以前都是用emacs,现在想改用vim了,但是对vim的设置不太熟悉。    我在.vimrc中设置了set ai ,但是在编辑verilog/VHDL的时候还是没有办法自动缩进啊,按enter还是定位到行首去了。  各位大侠们是怎么设置的verilog/vhdl的自 ...…

查看全部问答>

关于UART的问题

写了一个简单的uart程序 在接收端显示发送端发送的数据 但后来发现发送的是6但接收端总是显示0 后来调试发现: 1.接收端给*P_UART_Data赋值6  但*P_UART_Data仍为0  即赋值不成功 而且即使没有发送接收端也会显示0 2.在发送 ...…

查看全部问答>

急急急!有关串口问题!

我用串口线把两台电脑连接,由于串口线两头是一公一母的, 所以串口线的一端用串口转换接头做了转换. (这个接头是我们公司另一个部门做的). 现在的问题是通过串口调试助手发现 串口通信时数据的接收总是单向的. 不知道是那个转换接头的问题还是 ...…

查看全部问答>

wince下adsl拨号上网

请教斑竹和各位大侠,我想在wince平台上直接接adsl modem来实现上网,但不能拨号成功。我的操作步骤描述如下:1、内核加入PPPOE;2、CE起来后,新建连接选择PPPOE;3、输入用户名密码,拨号,但拨号失败。     修改新建连接的TCP/IP属性 ...…

查看全部问答>

LED芯片制造设备现状及其工艺介绍

replyreload += \',\' + 770973;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

求助,谁有STM32GC102CB的资料

                                 谁有STM32GC102CB的资料,我想看看这款芯片的资料,那位有,感激不尽啊。…

查看全部问答>

请教大虾:在workbench环境下为什么联不上C-SPY

  用的程序是他自带的例子(LED闪烁).编译通过了,然后按PROJECT菜单中的DEBUGGER选项,出现一MESSAGES窗口提示出错:  error[e12]:una××e to open file \'cl430\' 这是怎么回事啊?   我的电脑是WINDO ...…

查看全部问答>

430的熔丝太难烧断了,求助。

最近在diy一个熔断器,我已经按照时序和6.5V的电压加在tdi上,可就是熔不断。从tdi发指令0xaaaa,TDO返回的始终是0x5555.未熔断状态。所有的操作和时序严格按ti的手册上来的,已经可以和目标430通讯,有返回码,熔断电压是6.5v,也正确,不知为何烧 ...…

查看全部问答>

帮忙看一下代码

//                   /|\\  /|\\//               MSP430F261x/241x 10k  10k     //             &n ...…

查看全部问答>