找回密码
 立即注册

QQ登录

只需一步,快速开始

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

带详细注释跑马灯源码 单片机输入输出端口控制实验

[复制链接]
跳转到指定楼层
楼主
ID:344781 发表于 2018-6-4 16:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验一 单片机输入输出端口控制实验
  
  用P1口作为输出口,接8位用作逻辑电平显示的发光二极管。设计程序使发光二极管间隔300ms先奇数亮再偶数亮,循环3次;一个发光二极管亮上下循环3次;两个分别从两边向中间流动3次;再从中间向两边流动3次;8个全部闪烁3次;关闭全部发光二极管,停止

有程序及注释

  1.   #include<reg52.h>  //52单片机头文件
  2.   #include <intrins.h> //包含有左右循环移位子函数的库
  3.   #define uint unsigned int    //宏定义
  4.   #define uchar unsigned char  //宏定义
  5.   void delay(uint z)  //延时函数,z的取值为这个函数的延时ms数,如delay(200);大约延时200ms.
  6.   {//delay(500);大约延时500ms.
  7.   uint x,y;
  8.   for(x=z;x>0;x--)
  9.   for(y=110;y>0;y--);       
  10.   }
  11.   void main()                    //主函数
  12.   {
  13.   uchar a,i,j;
  14.   for(j=0;j<3;j++)      //寄偶交替
  15.   {
  16.   P1=0x55;       //点亮小灯
  17.   delay(300); //延时300毫秒
  18.   P1=0xaa;
  19.   delay(300); //延时300毫秒
  20.   }
  21.   for(j=0;j<3;j++)    //流水灯
  22.   {
  23.   a=0xfe;
  24.   for(i=0;i<8;i++)
  25.   {
  26.   P1=a;       //点亮小灯
  27.   delay(300); //延时300毫秒
  28.   a=_crol_(a,1);
  29.   }
  30.   P1=0xff;
  31.   for(j=0;j<3;j++)     //从两边往中间流
  32.   {
  33.   P1=0x7e;       //点亮小灯
  34.   delay(300); //延时300毫秒
  35.   P1=0xbd;
  36.   delay(300); //延时300毫秒
  37.   P1=0xdb;       //点亮小灯
  38.   delay(300); //延时300毫秒
  39.   P1=0xe7;
  40.   delay(300); //延时300毫秒
  41.   }
  42.   P1=0xff;
  43.   for(j=0;j<3;j++)    //从中间往两边流
  44.   {
  45.   P1=0xe7;       //点亮小灯
  46.   delay(300); //延时300毫秒
  47.   P1=0xdb;
  48.   delay(300); //延时300毫秒
  49.   P1=0xbd;       //点亮小灯
  50.   delay(300); //延时300毫秒
  51.   P1=0x7e;
  52.   delay(300); //延时300毫秒
  53.   P1=0xff;
  54.   for(j=0;j<6;j++)    //全部闪烁
  55.   {
  56.   P1=~P1;       //点亮小灯
  57.   delay(300); //延时300毫秒
  58.   }
  59.   P1=0xff;
  60.   while(1);
  61.   }
  62.   
  63.   思考题程序代码:
  64.   #include <reg52.h> //包含所需的头文件
  65.   #include <intrins.h>
  66.   #define uint unsigned int //定义类型别名为无符号的整型
  67.   #define uchar unsigned char //定义类型别名为无符号的字符型
  68.   
  69.   void delayms(uint);//声明延时子函数
  70.   
  71.   
  72.   void main()
  73.   {
  74.   uint i,j;
  75.   uchar aa;// 定义一个变量给p1口赋值
  76.   aa=0xfe;//赋值11111110  
  77.   for(i=0;i<3;i++)
  78.    {
  79.      P1=0x55; // 点亮所有奇数小灯
  80.   
  81.      delayms(300);//延时300毫秒
  82.   
  83.         P1=0xaa; //点亮所有偶数小灯
  84.   
  85.      delayms(300); //延时300毫秒
  86.       }
  87.   
  88.    for(i=0;i<3;i++)
  89.   {
  90.   for(j=0;j<7;j++)
  91.   {
  92.   P1=aa;//点亮第一个小灯
  93.   delayms(300);
  94.      aa=_crol_(aa,1);//将aa循环左移一位后赋值给aa循环7次
  95.              }
  96.   
  97.   aa=0x7f;//把11101111赋值给aa
  98.   for(j=0;j<7;j++)
  99.   {
  100.   P1=aa;//点亮中间的小灯
  101.   delayms(300);//延时300ms
  102.   aa=_cror_(aa,1); //将aa循环左移一位后赋值给aa循环7次
  103.   
  104.   }
  105.   }
  106.   
  107.   for(i=0;i<3;i++)//两个分别从两边向中间依次点亮
  108.   {
  109.    P1=0x7e;
  110.    delayms(300);
  111.    P1=0xbd;
  112.    delayms(300);
  113.    P1=0xdb;
  114.    delayms(300);
  115.    P1=0xe7;
  116.    delayms(300);
  117.    }
  118.      for(i=0;i<3;i++)//从中间向两边依次点亮
  119.   
  120.    {
  121.    P1=0xe7;
  122.    delayms(300);
  123.    P1=0xdb;
  124.    delayms(300);
  125.    P1=0xbd;
  126.    delayms(300);
  127.    P1=0x7e;
  128.    delayms(300);
  129.   }
  130.   
  131.        for(i=0;i<3;i++)
  132.    {
  133.    P1=0x00;//全亮
  134.    delayms(300);//延时300ms
  135.   P1=0xff;//全灭
  136.    delayms(300);
  137.   
  138.    }
  139.    while(1);
  140.   }
  141.   
  142.   void delayms(uint xms)//延时子程序
  143.   {uint i,j;
  144.   for(i=xms;i>0;i--)//i=xms
  145.     for(j=110;j>0;j--);
  146.   }
  147.   
  148.  
复制代码

完整的Word格式文档51黑下载地址:
单片机实验.doc (21 KB, 下载次数: 8)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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