找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4946|回复: 24
打印 上一主题 下一主题
收起左侧

大神快来

[复制链接]
跳转到指定楼层
楼主
我用的是51单片机 问一下 如何控制AD来控制他的一个灯让他从最亮到最暗两秒循环 我的是DAC0832
  #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
void delay(uint);
sbit csda=P3^2;
sbit wr=P3^6;
void main()
{
csda=0;
wr=0;
num=0xff;
while(1)
{
  num=num--;
  if(num==0)
  {
     delay(50);
     num=0xff;
   }
  P0=num;



}
}
  void delay (uint z)   
  {
   uint x,y;
   for(x=z;x>0;x--)
   for(y=110;y>0;y--);
  
  
  }这样写为什么不可以 是不是不能直接对16进制数进行+-运算呢
post_newreply








分享到: QQ好友和群腾讯微博QQ空间
评分收藏0转播分享淘帖000

AD与单片机连接.jpg (87.07 KB, 下载次数: 181)

AD与单片机连接.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65766 发表于 2014-10-31 10:56 | 只看该作者
传错了

DA接口.jpg (84.76 KB, 下载次数: 177)

DA接口.jpg
回复

使用道具 举报

板凳
ID:51348 发表于 2014-10-31 16:07 | 只看该作者
本帖最后由 T29 于 2014-10-31 16:09 编辑

很好  学习  谢谢
回复

使用道具 举报

地板
ID:51348 发表于 2014-11-1 00:44 | 只看该作者
没看到驱动部分,是不是驱动的问题
回复

使用道具 举报

5#
ID:67992 发表于 2014-11-2 15:51 | 只看该作者
要搞清--num和num--的区别;num=num--则num的值就永远不会变。
public class Test {
    public static void main(String[] args) {
        int i = 1;
        i = i++;
        System.out.println(i);
    }
}

先想一想,这个程序会输出什么?是1还是2?按照我最初的想法,输出应该是2,因为把i赋值给i相当于没做什么操作,然后对i进行自加操作,所以变量i的值变为2了。但实际输出结果却是1!

跟David讨论了一下,他说这个i = i++;的操作可能相当于以下三步操作:①把变量i的值取出来,放在一个临时变量里(我们先记作temp);②把变量i的值进行自加操作;③把临时变量temp的值作为自增运算前i的值使用,在本题中就是给变量i赋值。因此,经过以上三步操作以后,虽然变量i在第②步操作中进行了自增运算,但第三步操作以后又把原来的值赋给了它,故最后输出结果为1。虽然我不确定这种解释是否正确,毕竟对底层实现细节不是太了解,但这种解释至少跟结果是符合的。

评分

参与人数 1威望 +50 黑币 +50 收起 理由
huqin + 50 + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:65766 发表于 2014-11-4 21:16 | 只看该作者
dgahz 发表于 2014-11-2 15:51
要搞清--num和num--的区别;num=num--则num的值就永远不会变。
public class Test {
    public static v ...

受教了 多谢大神 我去试试
回复

使用道具 举报

7#
ID:65766 发表于 2014-11-4 21:17 | 只看该作者
dgahz 发表于 2014-11-2 15:51
要搞清--num和num--的区别;num=num--则num的值就永远不会变。
public class Test {
    public static v ...

受教了 多谢大神 我去试试
回复

使用道具 举报

8#
ID:67992 发表于 2014-11-4 21:20 | 只看该作者
while(1)
{
  num=num--;
  if(num==0)
  {
     delay(50);

改成
while(1)
{
  num--;
  if(num==0)
  {
回复

使用道具 举报

9#
ID:65766 发表于 2014-11-4 21:40 | 只看该作者
还有一个问题 :这段程序这样表示可以吗:num=0xff;num=--num 就是我上面说的 能对16进制进行运算吗
回复

使用道具 举报

10#
ID:67992 发表于 2014-11-4 22:05 | 只看该作者
可以。编程可以用十进制和十六进制,不可用二进制。十进制和十六进制都能运算
回复

使用道具 举报

11#
ID:67992 发表于 2014-11-4 22:08 | 只看该作者
本帖最后由 dgahz 于 2014-11-4 22:12 编辑

如P1=0xFF和P1=255效果一样
回复

使用道具 举报

12#
ID:67992 发表于 2014-11-4 22:11 | 只看该作者
这段程序这样表示可以吗:num=0xff;num=--num

可以,先减可以,后减不行
回复

使用道具 举报

13#
ID:65766 发表于 2014-11-4 22:22 | 只看该作者
可程序要实现的功能却没有实现 我是想让上面发的电路图中的最右边的D12灯实现从亮到暗变换 。。不知道程序哪里错了 大神给点意见呗
回复

使用道具 举报

14#
ID:67992 发表于 2014-11-5 09:37 | 只看该作者
本帖最后由 dgahz 于 2014-11-5 09:44 编辑

试试:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;

sbit csda=P3^2;
sbit wr=P3^6;
void delay7ms800us(void)   //误差 0us 12m晶振
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=193;a>0;a--);
}

void main()
{
csda=0;
wr=0;
num=0xff;
while(1)
{  P0=num;  
delay7ms800us();
  num--;
  
  if(num==0)
  {
     
     num=0xff;
   }





回复

使用道具 举报

15#
ID:65766 发表于 2014-11-5 21:30 | 只看该作者
我编译了一下 貌似有错误啊 大神 对了 我用的是ATM89C52 单片机 还有就是void delay7ms800us(void)   //误差 0us 12m晶振
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=193;a>0;a--);
}这个我没看懂 就是个延时函数还是什么

IMG_20141105_212554.jpg (2.06 MB, 下载次数: 135)

IMG_20141105_212554.jpg

IMG_20141105_212603.jpg (1.84 MB, 下载次数: 148)

IMG_20141105_212603.jpg
回复

使用道具 举报

16#
ID:65766 发表于 2014-11-5 21:30 | 只看该作者
我编译了一下 貌似有错误啊 大神 对了 我用的是ATM89C52 单片机 还有就是void delay7ms800us(void)   //误差 0us 12m晶振
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=193;a>0;a--);
}这个我没看懂 就是个延时函数还是什么
回复

使用道具 举报

17#
ID:67992 发表于 2014-11-5 21:42 | 只看该作者
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num;
sbit csda=P3^2;
sbit wr=P3^6;
void delay7ms800us(void)   //误差 0us 12m晶振
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=193;a>0;a--);
}
void main()
{
        csda=0;
        wr=0;
        num=0xff;
    while(1)
    {   P0=num;  
        delay7ms800us();
        num--;
                if(num==0)
                {
                   num=0xff;
                }
    }
}
回复

使用道具 举报

18#
ID:67992 发表于 2014-11-5 21:43 | 只看该作者
是延时函数
回复

使用道具 举报

19#
ID:67992 发表于 2014-11-5 21:45 | 只看该作者
重新编译好给你,上次那个随便拿记事本写好给你,没检查,不好意思

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

20#
ID:65766 发表于 2014-11-8 13:46 | 只看该作者
我去试试
回复

使用道具 举报

21#
ID:65766 发表于 2014-11-8 20:06 | 只看该作者

这个延时函数 我不是很明白 他没运行一次是多少时间 另外就是那个由亮到暗这个功能是实现了  但数码管却也在变化 我不太理解 难道这两个是连在一块的 ?
回复

使用道具 举报

22#
ID:67992 发表于 2014-11-8 20:36 | 只看该作者
有个软件叫单片机小精灵,里面你要延时多长它自动帮你算,形成C代码,复制过来就可以了。数码管会变应该是共用了P0口,开发板单片机IO都是共用的。你看一下你的板电原理图就清楚了。
回复

使用道具 举报

23#
ID:65766 发表于 2014-11-8 21:38 | 只看该作者
这两个之间貌似连了锁存器 可以通过设置锁存器来关闭数码管吗
回复

使用道具 举报

24#
ID:65766 发表于 2014-11-8 21:40 | 只看该作者
哦 好像弄错了 好像没有啊
回复

使用道具 举报

25#
ID:67992 发表于 2014-11-8 23:00 | 只看该作者
发个电路图过来
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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