找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 19477|回复: 0
收起左侧

学习单片机的13个经典实例

[复制链接]
ID:17888 发表于 2017-6-3 18:32 | 显示全部楼层 |阅读模式
学习单片机
//实例1:用单片机控制第一个灯亮


#include<reg51.h>  //包含51单片机寄存器定义的头文件
void main(void)
  {
    P1=0xfe; //P1=1111 1110B,即P1.0输出低电平
  }
//实例2:用单片机控制一个灯闪烁:认识单片机的工作频率


#include<reg51.h>    //包含单片机寄存器的头文件
/                                       
函数功能:延时一段时间
                                         /
void delay(void)        //两个void意思分别为无需返回值,没有参数传递
{
  unsigned int i;       //定义无符号整数,最大取值范围65535
  for(i=0;i<20000;i++)  //20000次空循环
        ;               //什么也不做,等待一个机器周期
}
/                                                      
函数功能:主函数 C语言规定必须有也只能有1个主函数)
                                                        /
void main(void)
{
  while(1)      //无限循环
   {
          P1=0xfe;   //P1=1111 1110BP1.0输出低电平
          delay();   //延时一段时间
          P1=0xff;   //P1=1111 1111BP1.0输出高电平
          delay();  //延时一段时间
         }
}


//实例3:将 P1口状态分别送入P0P2P3口:认识I/O口的引脚功能
#include<reg51.h>   //包含单片机寄存器的头文件
/                                                      
函数功能:主函数 C语言规定必须有也只能有1个主函数)
                                                        /

void main(void)
{
    while(1)                   //无限循环
          {         
                 P1=0xff;        // P1=1111 1111B,熄灭LED
            P0=P1;                // P1口状态送入P0
                 P2=P1;                 // P1口状态送入P2
       P3=P1;                 // P1口状态送入P3
          }
}


//实例4:使用P3口流水点亮8LED
#include<reg51.h>   //包含单片机寄存器的头文件
/                                       
函数功能:延时一段时间
                                         /

void delay(void)
   {
          unsigned char i,j;
           for(i=0;i<250;i++)
                 for(j=0;j<250;j++)                  
                   ;
          }
/                                                      
函数功能:主函数
                                                        /
void main(void)
{
   while(1)
          {
                   P3=0xfe;   //第一个灯亮
                         delay();   //调用延时函数
                         P3=0xfd;   //第二个灯亮
                         delay();   //调用延时函数
                        P3=0xfb;   //第三个灯亮
                         delay();   //调用延时函数
                        P3=0xf7;   //第四个灯亮
                         delay();   //调用延时函数
                        P3=0xef;   //第五个灯亮
                   delay();   //调用延时函数
                        P3=0xdf;   //第六个灯亮
                    delay();   //调用延时函数
                        P3=0xbf;   //第七个灯亮
                   delay();   //调用延时函数
                        P3=0x7f;   //第八个灯亮
                   delay();   //调用延时函数  
         }

}

             //实例7:通过对P3口地址的操作流水点亮8LED
#include<reg51.h>   //包含单片机寄存器的头文件
sfr x=0xb0;   //P3口在存储器中的地址是b0H, 通过sfr可定义8051内核单片机
          //的所有内部8位特殊功能寄存器,对地址x的操作也就是对P1口的操作
/                                       
函数功能:延时一段时间
                                         /
void delay(void)
   {
          unsigned char i,j;
           for(i=0;i<250;i++)
                 for(j=0;j<250;j++)                 
                   ;   //利用循环等待若干机器周期,从而延时一段时间
          }
/                                         
函数功能:主函数
                                          /
void main(void)
{
    while(1)
          {
                    x=0xfe;   //第一个灯亮
                         delay();  //调用延时函数
                          x=0xfd;  //第二个灯亮
                         delay();  //调用延时函数
                         x=0xfb;  //第三个灯亮
                         delay();  //调用延时函数
                         x=0xf7;  //第四个灯亮
                         delay();  //调用延时函数
                        x=0xef;   //第五个灯亮
                   delay();  //调用延时函数
                        x=0xdf;   //第六个灯亮
                    delay();  //调用延时函数
                        x=0xbf;   //第七个灯亮
                   delay();  //调用延时函数
                        x=0x7f;   //第八个灯亮
                   delay();  //调用延时函数   
        }

}

        //实例8:用不同数据类型控制灯闪烁时间
#include<reg51.h>   //包含单片机寄存器的头文件
/                                                      
函数功能:用整形数据延时一段时间
                                                      /
void int_delay(void) //延时一段较长的时间
{
  unsigned int m;    //定义无符号整形变量,双字节数据,值域为0~65535
  for(m=0;m<36000;m++)
                         ;          //空操作      
}
/                                                      
函数功能:用字符型数据延时一段时间
                                                      /
void char_delay(void) //延时一段较短的时间
{
   unsigned char i,j;   //定义无符号字符型变量,单字节数据,值域0~255
        for(i=0;i<200;i++)
          for(j=0;j<180;j++)
                           ;        //空操作
}
/                                                      
函数功能:主函数
                                                      /
void main(void)  
{
  unsigned char i;
  while(1)
        {
          for(i=0;i<3;i++)
                 {
             P1=0xfe;     //P1.0口的灯点亮
                  int_delay(); //延时一段较长的时间
                  P1=0xff;     //熄灭
                  int_delay(); //延时一段较长的时间
                 }
     for(i=0;i<3;i++)
                 {
             P1=0xef;     //P1.4口的灯点亮
                  char_delay(); //延时一段较长的时间
                  P1=0xff;     //熄灭
                  char_delay(); //延时一段较长的时间
                 }         

          }

}



//实例9:用P0口、P1 口分别显示加法和减法运算结果
#include<reg51.h>
void main(void)   
{  
  unsigned char m,n;
  m=43;     //即十进制数2x16+11=43
  n=60;     //即十进制数3x16+12=60
  P1=m+n;  //P1=103=0110 0111B,结果P1.3P1.4P1.7 口的灯被点亮
  P0=n-m;  //P0=17=0001 0001B,结果P0.0P0.4的灯被熄灭
}




//实例10:用P0P1口显示乘法运算结果
#include<reg51.h> //包含单片机寄存器的头文件
void main(void)  
{
  unsigned char m,n;
  unsigned int s;
  m=64;
  n=71;
  s=m n;       //s=64 71=4544,需要16位二进制数表示,高8位送P1口,低8位送P0
               //由于4544=17 256+192=H3 16 16 16+H2 16 16+H1 16+H0
                                        //两边同除以256,可得17+192/256=H3 16+H2+H1 16+H0/256
                                        //因此,高816进制数H3 16+H2必然等于17,即4544除以256的商
                                        //816进制数H1 16+H0必然等于192,即4544除以256的余数

  P1=s/256;     //8位送P1口 ,P1=17=11H=0001 0001B, P1.0P1.4口灭,其余亮
  P0=s%256;     //8位送P0, P3=192=c0H=1100 0000B,P3.1,P3.6,P3.7口灭,其余亮
}


//实例11:用P1P0口显示除法运算结果
#include<reg51.h>   //包含单片机寄存器的头文件
void main(void)  
{
  P1=36/5;          //求整数
  P0=((36%5) 10)/5; //求小数
  while(1)         
    ;              //无限循环防止程序“跑飞”
}




//实例12:用自增运算控制P08LED流水花样
#include<reg51.h>   //包含单片机寄存器的头文件
/                                                      
函数功能:延时一段时间
                                                      /
void delay(void)
{
   unsigned int i;   
        for(i=0;i<20000;i++)
            ;
}
/                                                      
函数功能:主函数
                                                      /
void main(void)  
{
  unsigned char i;
  for(i=0;i<255;i++)  //注意i的值不能超过255
   {
          P0=i;    //i的值送P0
          delay(); //调用延时函数
        }
}



//实例13:用P0口显示逻辑""运算结果
#include<reg51.h>   //包含单片机寄存器的头文件
void main(void)  
{
  P0=(4>0)&&(9>0xab);//将逻辑运算结果送P0
  while(1)
    ;    //设置无限循环,防止程序“跑飞”

评分

参与人数 2黑币 +10 收起 理由
罗景衡 + 5 共享资料的黑币奖励!
259654 + 5 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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