36

主题

2

好友

3090

积分

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
27774
帖子
3064
精华
0
经验
3090 点
金钱
3036 ¥
注册时间
2007-9-27
发表于 2011-8-24 04:03 | 显示全部楼层
LZ辛苦了!难得坚持写了那么多篇教程。

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-24 10:31 | 显示全部楼层
LZ你好,我刚买了块板子,正在艰难自学中。。。。。。。。。

点亮了第一个发光管
#include<reg52.h>
   sbit  A=P2^0;
   void main()
   {
           A=0;
   }

我要想把P2的所有引脚发光管都点亮,这程序应该怎么写啊

424

主题

3

好友

1万

积分
     

超级版主 当前离线

Rank: 8Rank: 8

UID
13663
帖子
13726
精华
6
经验
10608 点
金钱
8449 ¥
注册时间
2006-10-21

论坛版主 优秀版主 乐于助人 DIY大赛获奖

发表于 2011-8-24 11:27 | 显示全部楼层
LZ你好,我刚买了块板子,正在艰难自学中。。。。。。。。。

点亮了第一个发光管
#include
   sbit   ...
homeboy 发表于 2011-8-24 10:31


#include<reg52.h>
//   sbit  A=P2^0;
   void main()
   {
           P2=0x00;   //让P2口全0
   }

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-24 12:17 | 显示全部楼层
嗯,明白了,谢谢老大,试了一下,直接这样就可以点亮:
#include<reg52.h>
   void main()
   {
          P2=0x00;  
   }

不明白的是,0x00的意思就是P2口全0.我试了一下0x0也可以啊,编译时没有错误,下载后也能全点亮

6

主题

1

好友

897

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
27354
帖子
871
精华
0
经验
897 点
金钱
887 ¥
注册时间
2007-9-18
发表于 2011-8-24 14:13 | 显示全部楼层
好帖,支持一下.

11

主题

0

好友

1818

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
230051
帖子
3857
精华
0
经验
1818 点
金钱
1760 ¥
注册时间
2010-8-15
发表于 2011-8-24 14:19 | 显示全部楼层
来学习了

15

主题

0

好友

921

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
70789
帖子
3007
精华
0
经验
921 点
金钱
914 ¥
注册时间
2008-12-25
发表于 2011-8-24 14:23 | 显示全部楼层
好多次都想学,单最后都没学出个样来,单片机还是比较难,至少跟三级管比较

3

主题

2

好友

425

积分

业余侠客 当前离线

Rank: 4

UID
162399
帖子
871
精华
0
经验
425 点
金钱
425 ¥
注册时间
2010-1-7
发表于 2011-8-24 15:34 | 显示全部楼层
这个东西蛮实用的,跟着学!

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-24 16:06 | 显示全部楼层
本帖最后由 homeboy 于 2011-8-24 16:39 编辑

按键自锁开关这一句不太明白,为什么是这样写的?
void delay (unsigned int a){     // 1ms延时程序
        unsigned int i;
        while( --a != 0){                   --a != 0 这个是什么意思?                 for(i = 0; i < 600; i++);   为什么自锁开关还要for语句啊

15

主题

1

好友

289

积分

业余侠客 当前离线

Rank: 4

UID
239951
帖子
705
精华
0
经验
289 点
金钱
284 ¥
注册时间
2010-9-13
发表于 2011-8-24 16:53 | 显示全部楼层
强帖要顶下,留名学习

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-24 17:01 | 显示全部楼层
本帖最后由 homeboy 于 2011-8-24 17:03 编辑

用LZ的自锁开关改了一下,变成了延时关断开关,程序如下:
#include <REG51.h>         
sbit LED= P0^0;         
sbit KEY     =   P1 ^ 0;   
void delay (unsigned int a){   
        unsigned int i;
        while( --a != 0){
                for(i = 0; i < 600; i++);         
        }                                                      
}
void main(void){
        KEY = 1;
        LED = 1;
        while(1){
                if(KEY == 0){LED=0;delay(2000);LED=1;
                                }
                               
                                     }
                         }   
                              
         

不太懂delay后面这个数字到底是不是毫秒?2000的话应该是2秒,但写入单片机后实际感觉要达到8秒以上,什么原因啊?


LZ我问了好几个问题,别忘了一一答复啊,谢谢

47

主题

2

好友

991

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
63566
帖子
1437
精华
0
经验
991 点
金钱
1028 ¥
注册时间
2008-11-16
发表于 2011-8-24 17:47 | 显示全部楼层
回复 184# homeboy


    0x就是代表16进制的数  0X00的00就是16进制数,转换成二进制就是0000 0000 ;

67

主题

0

好友

2170

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
44250
帖子
4957
精华
0
经验
2170 点
金钱
2152 ¥
注册时间
2008-5-28
发表于 2011-8-24 17:49 | 显示全部楼层
#include
//   sbit  A=P2^0;
   void main()
   {
           P2=0x00;   //让P2口全0
   }
ahao 发表于 2011-8-24 11:27



    昨天看了下,老师说这是总线式驱动。

26

主题

1

好友

358

积分

业余侠客 当前离线

Rank: 4

UID
162704
帖子
794
精华
0
经验
358 点
金钱
369 ¥
注册时间
2010-1-8
发表于 2011-8-24 19:47 | 显示全部楼层
感谢楼主分享

10

主题

0

好友

1560

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
29693
帖子
1802
精华
1
经验
1560 点
金钱
1560 ¥
注册时间
2007-10-31
发表于 2011-8-25 06:17 | 显示全部楼层
单片机的教程网上不少,不过某些号称“十天学会****”的说法其实都是噱头,因为要是说了大实话,估计就没有多少人有信心去研究了。如果那么容易搞定的话,相信这世上会单片机的人早就比会音响DIY的人多得去了,可事实呢?希望楼主所说的“连小学生都看的懂”,能真正普及一些单片机知识。

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-25 08:57 | 显示全部楼层
昨天LZ没来啊

67

主题

0

好友

2170

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
44250
帖子
4957
精华
0
经验
2170 点
金钱
2152 ¥
注册时间
2008-5-28
发表于 2011-8-25 11:52 | 显示全部楼层
看了一天,刚刚学会了一个笨办法做流水灯。
#include<reg52.h>
unsigned int a;
void main()
{
        a=50000;
        P1=0xFE;
        while(a--);
        a=50000;
        P1=0XFD;
        while(a--);
        a=50000;
        P1=0xfb;
        while(a--);
        a=50000;
        P1=0xF7;
        while(a--);
        a=50000;
        P1=0Xef;
        while(a--);
        a=50000;
        P1=0xdf;
        while(a--);
        a=50000;
        P1=0xbf;
        while(a--);
        a=50000;
        P1=0X7f;
        while(a--);
}
暂时,还没学会调用子程序。今天就会了。

67

主题

0

好友

2170

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
44250
帖子
4957
精华
0
经验
2170 点
金钱
2152 ¥
注册时间
2008-5-28
发表于 2011-8-25 11:56 | 显示全部楼层
回复 191# homeboy


    很明显的这个不是MS,这个要和晶振联系起来算,具体怎么算,去看看10天学会单片机吧。

9

主题

0

好友

80

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
262171
帖子
295
精华
0
经验
80 点
金钱
195 ¥
注册时间
2010-11-17
发表于 2011-8-25 14:13 | 显示全部楼层
你好,下面这个电子钟程序如要在P1-5口加一个发光二极管做秒位闪动要怎么改程序。
#include <at89x52.h>
#include <DS1302.h>
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned char time[]={0,0,0,0,0,0,0,0};
unsigned char date[]={0,0,0,0,0,0,0,0};
SYSTEMTIME  time1;   
                             
void delay(unsigned char i)      
{
  unsigned char j;
  while((i--)!=0)
  {
    for(j=123;j>0;j--);
  }
}
unsigned char button_time(n,x,y)        
unsigned char n,x,y;
{
    if(P1_7==0)
    {
        delay(50);
        if(P1_7==0)
            {
                n++;
            if(n==x)
                n=0;
            while(P1_7==0);
            }
    }

    if(P1_5==0)
    {
        delay(50);
        if(P1_5==0)
            {
            if(n==0)
                n=y;
                else
            n--;                                                
            while(P1_5==0);
               }
    }
    return n;
}

unsigned char button_date(n,x,y)        
unsigned char n,x,y;
{
    if(P1_7==0)
    {
        delay(50);
        if(P1_7==0)
            {
                n++;
            if(n==x)
                n=1;
            while(P1_7==0);
            }
    }

    if(P1_5==0)
    {
        delay(50);
        if(P1_5==0)
            {
            if(n==1)
                n=y;
                else
            n--;                                                
            while(P1_5==0);
               }
    }
    return n;
}

void display(second10,second1,minute10,minute1,hour10,hour1)        
unsigned char second10,second1,minute10,minute1,hour10,hour1;  
{
  P2=0xfe;
  P0=dispcode[second10];
  delay(1);

  P2=0xfd;
  P0=dispcode[second1];        
  delay(1);

  P2=0xfb;
  P0=dispcode[10];               
  delay(1);

  P2=0xf7;
  P0=dispcode[minute10];
  delay(1);

  P2=0xef;
  P0=dispcode[minute1];        
  delay(1);

  P2=0xdf;
  P0=dispcode[10];               
  delay(1);

  P2=0xbf;
  P0=dispcode[hour10];        
  delay(1);

  P2=0x7f;
  P0=dispcode[hour1];        
  delay(1);
}        

void main()
{  
   unsigned char flag;
   Initial_DS1302();                                       
   while(1)                                                            
   {
       DS1302_GetTime(&time1);                              
       time[5]=(time1.Second)%10;               
       time[4]=(time1.Second)/10;               
       time[3]=(time1.Minute)%10;               
       time[2]=(time1.Minute)/10;               
       time[1]=(time1.Hour)%10;                  
       time[0]=(time1.Hour)/10;                    
           date[5]=(time1.Day)%10;
           date[4]=(time1.Day)/10;
           date[3]=(time1.Month)%10;
           date[2]=(time1.Month)/10;
           date[1]=(time1.Year)%10;
           date[0]=(time1.Year)/10;               

           if(P1_4==0)               
           {
                        delay(50);
                        if(P1_4==0)
                        {
                                flag++;
                                if(flag>1)
                                {
                                        flag=0;
                                }
                        }
                        while(P1_4==0);
                }
           if(P1_6==0)               
           {
                           delay(50);
                        if(P1_6==0)
                        {
                                flag++;
                                if(flag>7)
                                {
                                        flag=0;
                                }
                        }
                        while(P1_6==0);
                }

                switch(flag)
                {
                        case 0:display(time[0],time[1],time[2],time[3],time[4],time[5]);               
                                   break;

                        case 1:display(date[0],date[1],date[2],date[3],date[4],date[5]);               
                                   break;

                        case 2:time1.Year=button_date(time1.Year,100,99);                                                
                                   DS1302_SetTime(0x8c,time1.Year);
                                   display(date[0],date[1],10,10,10,10);
                                   break;

                        case 3:time1.Month=button_date(time1.Month,13,12);                                                
                                   DS1302_SetTime(0x88,time1.Month);
                                   display(10,10,date[2],date[3],10,10);
                                   break;

                        case 4:time1.Day=button_date(time1.Day,32,31);                                                        
                                   DS1302_SetTime(0x86,time1.Day);
                                   display(10,10,10,10,date[4],date[5]);
                                   break;

                        case 5:time1.Hour=button_time(time1.Hour,24,23);                                            
                                   DS1302_SetTime(0x84,time1.Hour);
                                   display(time[0],time[1],10,10,10,10);
                                   break;

                        case 6:time1.Minute=button_time(time1.Minute,60,59);                                    
                                   DS1302_SetTime(0x82,time1.Minute);
                                   display(10,10,time[2],time[3],10,10);
                                   break;

                        case 7:time1.Second=button_time(time1.Second,60,59);                                    
                               DS1302_SetTime(0x80,time1.Second);
                                   display(10,10,10,10,time[4],time[5]);
                                   break;
                }                 
        }
}

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-25 20:56 | 显示全部楼层
难道要太监?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部