普中开源电子分享网

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: windyxin872

51学习记录

 关闭 [复制链接]

2

主题

18

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2018-4-18 22:26:52 | 显示全部楼层
续流二极管  很重要
回复 支持 反对

使用道具 举报

2

主题

18

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2018-4-18 22:36:37 | 显示全部楼层
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16 ;
typedef unsigned char u8 ;
sbit  relay =P1^4;



void main()
{
relay =0;
           while(1)
        {
          
       
        }

}
回复 支持 反对

使用道具 举报

2

主题

18

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2018-4-20 21:42:31 | 显示全部楼层
静态数码管  比较简单
程序从0-F循环显示间隔1s
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16 ;
typedef unsigned char u8 ;

u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                0x7c,0x39,0x5e,0x79,0x71};          //共阴
u8 i;
void delay1s(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=167;c>0;c--)
        for(b=171;b>0;b--)
            for(a=16;a>0;a--);
    _nop_();  //if Keil,require use intrins.h
}



void main()
{
       
           while(1)
        {
         for(i=0;i<16;i++)
         {
                 P0=~smgduan[i];
         delay1s();
         }
       
        }

}
回复 支持 反对

使用道具 举报

2

主题

18

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2018-4-21 22:14:55 | 显示全部楼层
动态数码管的显示实验
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16 ;
typedef unsigned char u8 ;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                0x7c,0x39,0x5e,0x79,0x71};          //共阴

void delay(u16 i)   //误差 0us
{
    while (i--);
}

void DigDisplay()
{
   u8 i;
   for(i=0;i<8;i++)
         {
         switch(i)
         {
          case 0:
          LSA=0        ;LSB=0;LSC=0; break        ;
          case 1:
          LSA=1        ;LSB=0;LSC=0; break        ;
          case 2:
          LSA=0        ;LSB=1;LSC=0; break        ;
          case 3:
          LSA=1        ;LSB=1;LSC=0; break;
          case 4:
          LSA=0        ;LSB=0;LSC=1; break;
          case 5:
          LSA=1        ;LSB=0;LSC=1; break;
          case 6:
          LSA=0        ;LSB=1;LSC=1; break;
          case 7:
          LSA=1        ;LSB=1;LSC=1; break;
         }
         P0=smgduan[i+1];
         delay(100);
     P0=0x00;  //消影
        }                   


}
void main()
{
       
           while(1)
        {
         
         DigDisplay();
        }

}
回复 支持 反对

使用道具 举报

2

主题

18

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2018-4-22 21:15:02 | 显示全部楼层
独立按键实验
#include "reg52.h"
typedef unsigned int u16 ;
typedef unsigned char u8 ;
sbit led=P0^0;
sbit key1=P1^0;
void delay (u16 i)
{
while(i--);
}
void  KeyPros()
{
  if(key1==0)
  {
          delay(1000);   //延时消抖
        if(key1==0)
        {
          led=~led;
        }
        while(!key1);         //等待释放
  }

}
void main()
{           led=0;
        while(1)
        {
          KeyPros();//调用按键子函数
        }
}
回复 支持 反对

使用道具 举报

2

主题

18

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2018-4-22 22:24:00 | 显示全部楼层
矩阵按键
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16 ;
typedef unsigned char u8 ;
#define GPIO_DIG P0          //数码管的段选
#define GPIO_KEY P2          //按键的接口
u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                0x7c,0x39,0x5e,0x79,0x71}; //共阴
u8 KeyValue ;
void delay(u16 i)
{
  while(i--);

}
void  KeyDown()
{
char  a=0;
   GPIO_KEY=0x0f;//  0000 1111
   if(GPIO_KEY!=0x0f)//如果有按键按下
   {
            delay(1000);
         if(GPIO_KEY!=0x0f)
         {
           switch(GPIO_KEY)        //判断那一列
           {
                    case 0x07        :  //0000 0111
                 KeyValue=0;
                 break;
                 case 0x0B        :  //0000 1011
                 KeyValue=1;
                 break;
                 case 0x0D        :  //0000 1101
                 KeyValue=2;
                 break;
                 case 0x0E        :  //0000 1110
                 KeyValue=3;
                 break;
           }
                  GPIO_KEY=0xf0;//  1111 0000
                   switch(GPIO_KEY)        //判断那一行
           {
                    case 0x70        :  //0111 0000
                 KeyValue=KeyValue;
                 break;
                 case 0xB0        :  //1011 0000
                 KeyValue=KeyValue+4;
                 break;
                 case 0xD0        :  //1101 0000
                 KeyValue=KeyValue+8;
                 break ;
                 case 0xE0        :  //1110 0000
                 KeyValue=KeyValue+12;
                 break;
           }
           while((a<50)&&(GPIO_KEY!=0xf0))
           {
               delay(1000);
                      a++;
           }
         }
   }
}
void main()
{
        
           while(1)
        {
      
          KeyDown();
                  GPIO_DIG=~smgduan[KeyValue]; //共阳
        }

}
回复 支持 反对

使用道具 举报

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2018-10-7 22:19:13 | 显示全部楼层
windyxin872 发表于 2018-4-18 22:11
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16 ;

程序直接烧录到板子上,板子就可以出现LED闪烁或者蜂鸣器响等操作了是吧?
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-5-6 09:21 , Processed in 0.097497 second(s), 27 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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