OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4356|回复: 2

新人求助,怎么用51单片机使用pwm输出的模块?定时器卡出占空比吗??求

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-4-3
在线时间
0 小时
发表于 2015-4-4 09:16:38 | 显示全部楼层 |阅读模式
5金钱


初来论坛,求罩本人大一新生,对电子很感兴趣,闲暇之余想做个PM2.5检测仪,求各位大大帮忙,下面是我乱写的编程,感觉不靠谱,请各位大大过目,
void delay(uint z)    //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)  //写命令
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)  //写数据
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()    //初始化
{
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{
tt=0;
num=0;
init();
TMOD=0x01; //设置定时器0为工作方式
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;      //开总中断
ET0=1;     //开定时器0中断
TR0=1;     //启动定时器0
while(1)
{
if(tt==1)   //每1ms中断一次
{
if(P1^1==0)
{
num++;
}
}
if(tt==1000)
{
if(num<20)
{
write_data('A');
}
else if(num>=20 && num<40)
{
write_data('B');
}
else if(num>=40 && num<60)
{
write_data('C');
}
else if(num>=60)
{
write_data('D');
}
}
}
}
void exter0() interrupt 1  //1ms
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
tt++;
}

shiyan2.Uv2

2.02 KB, 下载次数: 21

凡人的智慧
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-4-3
在线时间
0 小时
 楼主| 发表于 2015-4-4 09:50:05 | 显示全部楼层
我重新改了下,不知道行了嘛?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit C1=P1^1;  //PM2.5管脚
sbit F1=P3^7;  //蜂鸣器管脚
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uchar tt,jj,num,xians;
void delay(uint z)    //延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)  //写命令
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)  //写数据
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()    //初始化
{
lcden=0;
write_com(0x38);
write_com(0x0e);
write_com(0x06);
write_com(0x01);
write_com(0x80);
}
void main()
{
tt=0;
num=0;
init();
TMOD=0x01; //设置定时器0为工作方式
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;      //开总中断
ET0=1;     //开定时器0中断
TR0=1;     //启动定时器0
TR1=1;     //启动定时器1;
while(1)
{
if(tt==1)   //每1ms中断一次
{
tt=0;
if(P1^1==0)
{
num++;
}
}
if(jj==1000)  //没1s中断一次,显示器显示
{
jj=0;
if(num<20)
{
write_data('A');
}
else if(num>=20 && num<40)
{
write_data('B');
}
else if(num>=40 && num<60)
{
write_data('C');
}
else if(num>=60)
{
write_data('D');
}
}
}
}
void exter0() interrupt 1  //1ms
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
tt++;
}void exter() interrupt 3  
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
jj++;
}
凡人的智慧
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-4-5 00:07:36 | 显示全部楼层
回复【2楼】楚轩:
---------------------------------
下载试试了,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表