当前位置: 首页 > news >正文

51单片机实验课二

实验任务一:

用C语言设计实现8个led灯左右移动显示效果。具体要求如下:

左移时,8个灯中的奇数位灯依次点亮;

右移时,8个灯中的偶数灯依次点亮;

如此循环往

#include <REGX52.H>
void Delay(unsigned int xms)		//可自定义延时时间段的延时函数
{unsigned char i, j;while(xms){xms--;i = 12;j = 169;do{while (--j);} while (--i);}
}
void main()
{unsigned char i,j;while (1)         //主循环{//LED灯为低电平点亮P2=0xFD;//1111 1101(灯7亮)for(i=0;i<4;i++)   //加入 for循环,表明for循环大括号中的程序循环执行4次{Delay(100);				P2<<=2;//1111 0100  //1101 1100  //0111 1100   P2=P2|0x03;//0000 0011//1111 0111(灯5亮)  //1101 1111(灯3亮)  //0111 1111(灯1亮)} P2=0xBF;//1011 1111(灯2亮)for(i=0;i<4;i++){Delay(100);				P2=P2>>2;//0010 1111  //0011 1011//0011 1110P2=P2|0xC0;//1110 1111(灯4亮)//1111 1011(灯6亮)//1111 1110(灯8亮)}P2=0xFE;           //重新赋初始值}
}

实验任务二:

动态扫描显示---Digital-tube-stable-display

用8个数码管从左到右稳定显示自己的学号的后8位

#include <REGX52.H>//数码管段选表
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}//数码管显示子函数
void Nixie(unsigned char Location,Number)
{switch(Location)		//位码输出{case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];	//段码输出Delay(1);				//显示一段时间P0=0x00;				//段码清零,消影
}void main()
{while(1){Nixie(1,2);		//在数码管的第1位显示2Nixie(2,2);		//在数码管的第2位显示2Nixie(3,2);		//在数码管的第3位显示2Nixie(4,1);   //在数码管的第4位显示1Nixie(5,0);		//在数码管的第5位显示0Nixie(6,2);		//在数码管的第6位显示2Nixie(7,1);		//在数码管的第7位显示1Nixie(8,4);		//在数码管的第8位显示4}
}

实验任务三:

Digital-tube-scrolling-display

将自己的学号每隔一定时间向右或向左滚动循环显示出来

#include <REGX52.H>
sbit LED0=P2^4;
sbit LED1=P2^3;
sbit LED2=P2^2;
#define tube P0
#define N 500
unsigned char code zima[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//存储数码管段选码
unsigned char number[10]={2,0,2,2,2,1,0,2,1,4};//存储学号信息
void delay(int i)		//延时函数
{while(i--);
}void main()
{unsigned int i,j,k,m,n,time;		//定义变量while(1){for(m=0;m<17;m++)			//滚动显示过程等效为17位{time=100;						while(time--){n=7;for(i=0;i<2;i++)			{LED0=i;					//控制位选for(j=0;j<2;j++)			{LED1=j;					//控制位选for(k=0;k<2;k++)			{LED2=k;					//控制位选if((n+m-7>9)||(n+m-7<0))			//控制段选tube=0x00;elsetube=zima[number[n+m-7]];n--;delay(100);		//延时tube=0x00;	//消隐}}}}}}
}

main 函数中使用了嵌套的循环来完成滚动显示学号的功能。

  • 外层循环 m 从 0 循环到 16,表示滚动显示的过程等效于 17 位。

  • 内层循环 time 从 100 循环减至 0,用于控制延时。

  • 在内层循环中,使用 n 来记录当前的位数,并在每次循环中减 1,用于控制位选。因为涉及到3个位选,所以有 2 * 2 * 2 = 8 种组合,所以需要三个嵌套循环。

  • 在每次位选循环中,判断 n+m-7 是否大于 9 或小于 0,如果是,则设置段选为 0x00,否则设置 tube 为对应的学号段选码。

  • 每次段选完之后,使用 delay 函数进行延时并清空 tube

相关文章:

  • 二、人工智能之提示工程(Prompt Engineering)
  • JAVA中枚举的方法
  • Java基础 集合(二)List详解
  • 【CSS + ElementUI】更改 el-carousel 指示器样式且隐藏左右箭头
  • Qt应用软件【数据篇】大小端数据转换
  • Linux进程信号处理:深入理解与应用(2​​)
  • 【Tomcat与网络6】 Tomcat是如何扩展Java线程池的?
  • Python flask 模板详解
  • 物流平台架构设计与实践
  • Node.js的安装
  • 理解React中的setState()方法
  • R语言基础学习-02 (此语言用途小众 用于数学 生物领域 基因分析)
  • 【如何快速上手Vue.js框架——详细介绍】
  • 《Lua程序设计》-- 学习9
  • Shell脚本是一种用来自动化执行一系列命令的文本文件
  • .pyc 想到的一些问题
  • @jsonView过滤属性
  • [译]前端离线指南(上)
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Angular 2 DI - IoC DI - 1
  • C# 免费离线人脸识别 2.0 Demo
  • ES6 学习笔记(一)let,const和解构赋值
  • extjs4学习之配置
  • JavaScript设计模式之工厂模式
  • java概述
  • Laravel Mix运行时关于es2015报错解决方案
  • PAT A1120
  • redis学习笔记(三):列表、集合、有序集合
  • Redis字符串类型内部编码剖析
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 记录:CentOS7.2配置LNMP环境记录
  • 聊聊flink的BlobWriter
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 通过npm或yarn自动生成vue组件
  • 我的业余项目总结
  • 协程
  • 赢得Docker挑战最佳实践
  • 怎么将电脑中的声音录制成WAV格式
  • 《码出高效》学习笔记与书中错误记录
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #图像处理
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)fiber的基本认识
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (三)c52学习之旅-点亮LED灯
  • (五)网络优化与超参数选择--九五小庞
  • (一)RocketMQ初步认识
  • (一)为什么要选择C++