标题:
51单片机spwm程序
[打印本页]
作者:
斜月为谁明
时间:
2018-5-12 17:26
标题:
51单片机spwm程序
#include<reg52.h>
#define unint unsigned int
#define unchar unsigned char
unchar code pwm[5][120]={
{ 4 , 12 , 20 , 27 , 35 , 43 , 51 , 58 , 66 , 74 ,
81 , 88 , 96 , 103 , 110 , 117 , 124 , 131 , 137 , 144 ,
150 , 156 , 162 , 168 , 174 , 180 , 185 , 190 , 195 , 200 ,
205 , 209 , 213 , 217 , 221 , 224 , 228 , 231 , 234 , 237 ,
239 , 241 , 243 , 245 , 246 , 247 , 248 , 249 , 250 , 250 ,
250 , 250 , 249 , 248 , 247 , 246 , 245 , 243 , 241 , 239 ,
237 , 234 , 231 , 228 , 224 , 221 , 217 , 213 , 209 , 205 ,
200 , 195 , 190 , 185 , 180 , 174 , 168 , 162 , 156 , 150 ,
144 , 137 , 131 , 124 , 117 , 110 , 103 , 96 , 88 , 81 ,
74 , 66 , 58 , 51 , 43 , 35 , 27 , 20 , 12 , 4
},
{ 8 , 24 , 39 , 55 , 70 , 85 , 99 , 113 , 127 , 140 ,
153 , 165 , 177 , 187 , 198 , 207 , 215 , 223 , 229 , 235 ,
240 , 244 , 247 , 249 , 250 , 250 , 249 , 247 , 244 , 240 ,
235 , 229 , 223 , 215 , 207 , 198 , 187 , 177 , 165 , 153 ,
140 , 127 , 113 , 99 , 85 , 70 , 55 , 39 , 24 , 8},
{ 10 , 29 , 49 , 68 , 87 , 105 , 122 , 139 , 155 , 170 ,
184 , 196 , 208 , 218 , 227 , 234 , 241 , 245 , 248 , 250 ,
250 , 248 , 245 , 241 , 234 , 227 , 218 , 208 , 196 , 184 ,
170 , 155 , 139 , 122 , 105 , 87 , 68 , 49 , 29 , 10 },
{ 16 , 47 , 77 , 106 , 134 , 159 , 182 , 202 , 219 , 232 ,
242 , 248 , 250 , 248 , 242 , 232 , 219 , 202 , 182 , 159 ,
134 , 106 , 77 , 47 , 16},
{20,58,96,130,162,190,213,231,243,249,249,243,231,213,190,162,130,96,58,20 }};
// 反正弦变化
unchar i=0;
unchar m=0;
unchar dr=0;
sbit output=P0^0; //脉冲输出
sbit key=P3^0; //频率转换键
void init();
void delay(unint);
void main()
{
init();
TR0=1; //启动定时器0
output=1; //给脉冲
TR1=1; //启动定时器1
while(1)
{
if(key==0)
{
delay(5);
if(key==0)
{
while(1)
if(key==1)
{
i++; //关光标
if(i==5)
i=0;
break;
}
}
}
switch (i)
{
case 0: m=100;break; //20Hz 100个数据
case 1: m=50;break; //40HZ 50个数据
case 2: m=40;break; //50HZ 40个数据
case 3: m=25;break; // 80Hz 25个数据
case 4: m=20;break; //100HZ 20个数据
}
}
}
void init()
{
TMOD=0x11;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
TH1=(65536-100)/256;
TL1=(65536-100)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
ET1=1; //开定时器1中断
}
/****************************延时*****************************/
void delay(unint z)
{
unint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void time0() interrupt 1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
output=1;
TR1=1; //启动定时器1
}
void time1() interrupt 3
{
output=0;
TR1=0; //停止定时器1
TH1=(65536-pwm[i][dr])/256;
TL1=(65536-pwm[i][dr])%256;
dr++;
if(dr==m)
dr=0;
}
复制代码
作者:
faridzled
时间:
2018-5-12 18:30
thanks for sharing
作者:
lkhlkh
时间:
2018-5-12 19:33
调制频率是多少?
作者:
qianxun77
时间:
2021-6-3 17:08
这是频率多大的
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1