网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月18日漏签0天
单片机吧 关注:212,077贴子:1,047,637
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 5回复贴,共1页
<<返回单片机吧
>0< 加载中...

关于89c52的PWM亮度调节和adc0832的数据输出

  • 只看楼主
  • 收藏

  • 回复
  • 迷庆太
  • 新兵
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
想做一个根据光照调节亮度的LED灯
pwm调节亮度和adc0832的数据输出是两个子程序
分别拿来测试都测试不行 更别说组合起来了..
输出都为P1口 接了8个发光二极管每个二极管都串联了1K的电阻
adc0832是打算读取光照传感器的数据直接在P1输出 这是测试一
程序就是网上找的 自己也写过 时序也对照过了 应该是没问题的
可是仿真的时候改变传感器光照输出的数据也没有变化
在实物上也一样 改变光照也是输出的灯的个数都是没有变化的
adc0832的程序如下
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
sbit DO=P2^2;
sbit CLK=P2^0;
sbit DI=P2^1;
sbit CS=P2^3;
uchar adc0832_data()
{
uchar i,Dat1=0,Dat2=0;
CLK = 0;DI = 1;CS = 0;_nop_();CLK = 1;//第一个上升沿
CLK = 0;DI = 1;_nop_();CLK = 1;//第二个上升沿 DI=1表示 双通道 单极性 输入
CLK = 0;DI = 0;_nop_();CLK = 1;//第三个上升沿 DI=0表示选择通道1(CH0)
_nop_();CLK = 0;//第四个下降沿 开始输出转换数据
for(i=0;i<8;i++)//读取8位数据
{
CLK = 1;
CLK = 0;
_nop_();
if(DO) Dat1|=0x80>>i;
}
for(i=0;i<8;i++)//读取8位相反数据
{
if(DO) Dat2|=0x01<<i;
CLK = 1;
CLK = 0;
_nop_();
}
CS = 1;DI = 1; CLK = 1;//读取完成释放总线
if(Dat1==Dat2)//数据效验如果正确则返回读取数据
return Dat1;
}
void main()
{
uchar a;
while(1)
{
a=adc0832_data();
P1=a;};}
至于pwm调节亮度子程序测试的方法是打算运用定时器完成从最亮到最暗的变化
程序如下
#include<reg52.h>
#define uint unsigned int
uint LEVEL=10;
void LIGHT(void) //PWM点亮程序
{
uint n;
for(n=0;n<10;n++) //10级
{
if(n<=LEVEL)
P1=0x00;
if(n>LEVEL) //调整占空比
P1=0xff;}
}
void main()
{
TMOD=0x01; //T0中断1
TR0=1;
ET0=1;
TH0=(65535-50000)/256;TL0=(65535-50000)%256; //刷新率20HZ
EA=1;
while(1)
{LIGHT();};}
void T0_test(void) interrupt 1
{
TH0=(65535-50000)/256;TL0=(65535-50000)%256;
if(LEVEL=0)LEVEL=10;
LEVEL--;
}
仿真时所有的led都是恒定亮度 电压也没有变化 实物也是
不知道问题出在哪 纠结了很久了 求大神们解答
另外 因为纠结这些问题太久了开始怀疑自己的逻辑
按照课本上的一些程序直接输到keil中然后用protues模拟以及输入52中
都得不到应该有的结果
比如说这个程序
#include"reg52.h"
sbit PWM=P1^0;//定义输出脚
void main()
{
TMOD=0x01; //定时器0工作方式1
TH0=(65536-10000)/256; //12M晶振10MS计时常数
TL0=(65536-10000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1);
}
//中断函数,启动后每10MS进入一次中断
void T0_time(void) interrupt 1
{
TH0=(65536-10000)/256; //12M晶振10MS计时常数
TL0=(65536-10000)%256;
if(PWM)PWM=0; //输出脚取反
else PWM=1;
}
虽然说我的晶振是11.0592M的但这也应该就影响个时间吧
完全不明白为什么会仿真无结果以及无法在单片机上得出结果
已经快崩溃了....
是不是我学错了什么.....


  • hello卷卷
  • 大尉
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
那年,小小的我,天真地回答着老师,说长大要做一名科学家,为祖国效力 如今,我长大了,坐在电脑旁,看着玲琅满目的专业,却迷茫了…… 那年,小小的我,批评老爸天天喝酒不回家,一点也不爱我 如今,我长大了,喝着曾经最讨厌的酒,还得向着朋友们硬挤出微笑…… 那年,小小的我,说自己要做一只自由的鸟,到处飞 如今,我长大了,认识了什么叫社会,什么叫责任…… 那年,小小的我,拥有着王般的骄傲,有一群小弟围来围去的 如今,我长大了,会为了生计,放下一切,委曲求全…… 那年,小小的我,说一定要好好学习,然后来养爸妈 如今,我长大了,懂了学习再好,有时也不及人家的后台…… 那年,小小的我,想哭就哭,想笑就笑 如今,我长大了,才明白,笑是给大家看的,哭才是给自己的…… 那年,小小的我,看到流浪猫、狗,都会抱回家里 如今,我长大了,看着那些虏动物的事,却无能为力…… 那年,小小的我,最看不起那些浪费时间的人 如今,我长大了,却无时无刻的都在虚度光阴…… 那年,小小的我,讨厌平庸的生活,发誓一定要让自己的人生活得精彩 如今,我长大了,我只能对着曾经的梦想,流下一滴苦涩的泪…… 那年,小小的我,以为相爱,以为信任,就能走到永远 如今,我长大了,一切其实不过一句我不爱你了…… 那年,小小的我,相信世界上只有好人,信任所有的人 如今,我长大了,才发现只有自己不会背叛自己…… 到底,什么算成熟,什么叫长大? 人最终都会变成自己最讨厌的那个样子吗?为什么原来我都不懂什么叫烦恼,而如今,我成为一个悲伤的孩子。 或许吧,人都是戴着面具生活的动物。 可惜、留恋又有什么用呢,时光不会倒退。我的天真早被吞噬了,我的幼稚早被磨没了。还剩下什么呢?不过,一具行尸走肉的躯体罢了。


2025-08-18 01:29:40
广告
不感兴趣
开通SVIP免广告
  • 喵了个咪
  • 下士
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
出结果了吗仁兄


  • 贴吧用户_7ReQJ3G
  • 新兵
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
兄弟会了吗?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 5回复贴,共1页
<<返回单片机吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示