在用51單片機做關于調頻調壓電源的設計,控制部分已經做好了,生產可調spwm波各位大佬有沒有好的方法
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真圖
單片機源程序如下:
- #include <reg51.h> //包含頭文件
- #include <intrins.h> //包含移位函數頭文件
- //段碼表
- unsigned char code dis_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 4, 5, 6, 7, 8, 9, off
- //毫秒級延時函數
- unsigned char key[9]={0x3f,0x3e,0x5b,0x5b,0x3f,0x71,0x3f,0x6d,0x3f};
- sbit l1=P3^0;
- sbit l2=P3^1;
- sbit n1=P3^2;
- sbit n2=P3^3;
- sbit n3=P3^4;
- sbit n4=P3^5;
- void delay(unsigned int x)
- {
- unsigned char i;
- while(x--)
- {
- for(i=0;i<120;i++);
- }
- }
- //主函數
- void main()
- { int num1=2,num2=2,num3=0,num5=0,num6=5,num7=0;
- unsigned char k,m=0x7f;
- P1 = 0xff; //先關閉數碼管
- P2 = 0x00; //
- while(1)
- {
- l1=0;
- l2=1;
- if(n1==0)
- { num1++;
- if(num1>9)
- {num1=0;
- }
- key[2]=dis_code[num1];
- while(n1==0)
- {;
- }
- }
- if(n2==0)
- { num2++;
- if(num2>9)
- {num2=0;
- }
- key[3]=dis_code[num2];
- while(n2==0)
- {;
- }
- }
- if(n3==0)
- { num3++;
- if(num3>9)
- {num3=0;
- }
- key[4]=dis_code[num3];
- while(n3==0)
- {;
- }
- }
- l1=1;
- l2=0;
- if(n1==0)
- { num5++;
- if(num5>9)
- {num5=0;
- }
- key[6]=dis_code[num5];
- while(n1==0)
- {;
- }
- }
- if(n2==0)
- { num6++;
- if(num6>9)
- {num6=0;
- }
- key[7]=dis_code[num6];
- while(n2==0)
- {;
- }
- }
- if(n3==0)
- { num7++;
- if(num7>9)
- {num7=0;
- }
- key[8]=dis_code[num7];
- while
- (n3==0)
- {;
- }
- }
- for(k = 0;k < 8;k++) //循環8次
- {
- P2 = 0xFF; //每顯示一位都要關閉位選端口一次
- m=_crol_(m,1); //循環左移
- P2=m; //每次選通一個位選端口
- P1=key[k+1]; //段碼送P0口
- delay(2);
- }
- }
- }
復制代碼
所有資料51hei提供下載:
矩陣鍵盤控制數碼管.rar
(25.18 KB, 下載次數: 11)
2018-5-17 21:12 上傳
點擊文件名下載附件
|