单片机实验(一)

news2024/11/24 6:25:29

前言

实验一:用单片机控制多只数码管(屏)分别左、右滚动显示自己完整的学号;
实验二:用单片机控制LED16×16点阵交替正序、逆序显示自己的中文姓名。

参考链接:

LED数码管的静态显示与动态显示(Keil+Proteus)-CSDN博客

LED点阵显示原理(取字模软件+Keil+Proteus)-CSDN博客

C51单片机笔记(动态数码管与8*8点阵) - 知乎 (zhihu.com)

实验一

keil

我不知道这个是不是我理解的那个意思,如果不需要实现同时点亮八个数码管的话(不知道能不能实现),就是每次点亮一个的话,这个滚动就只需要修改循环和增加数组里面的元素即可。

只需要修改keil,不需要修改proteus的原理图。

原理:P0口根据共阳极的码来确定输出什么数字,P2来确定在哪一个地方输出,可以用到移位函数方便一点。

左移滚动

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
	
uchar code dis_code[]={0xA4,0xC0,0xA4,0xF9,0x99,0xC0,0xA4,0xC0,0xC0,0xF9,0xA4,0x82};//202140200126(共阳极段码表)

//延时
void delay(uint t){
	uchar i;
	while(t--)
		for(i=0;i<200;i++);
}

void main(){
	uchar i,j=0x01;
	while(1){
		for(i=0;i<12;i++){
			j=_cror_(j,1);//循环移位函数,将j循环右移1位
			P0=dis_code[i];//P0口输出段码
			P2=j;//P2口输出位控码
			delay(123);//延时
			P0=0x00;
		}
	}
}

 右移滚动

下面两种都可以,前者就是修改了最开始输出的位置j和移位函数,后者将输出反过来,将数组反过来了,总之前者更加简便一点。

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
	
uchar code dis_code[]={0xA4,0xC0,0xA4,0xF9,0x99,0xC0,0xA4,0xC0,0xC0,0xF9,0xA4,0x82};//202140200126(共阳极段码表)


//延时
void delay(uint t){
	uchar i;
	while(t--)
		for(i=0;i<200;i++);
}

void main(){
	uchar i,j=0x01;
	while(1){
		for(i=0;i<12;i++){
			j=_cror_(j,1);//循环移位函数,将j循环右移1位
			P0=dis_code[i];//P0口输出段码
			P2=j;//P2口输出位控码
			delay(123);//延时
			P0=0x00;
		}
	}
}
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
	

uchar code dis_code[]={0x82,0xA4,0xF9,0xC0,0xC0,0xA4,0xC0,0x99,0xF9,0xA4,0xC0,0xA4};//621002041202

//延时
void delay(uint t){
	uchar i;
	while(t--)
		for(i=0;i<200;i++);
}

void main(){
	uchar i,j=0x01;
	while(1){
		for(i=0;i<12;i++){
			j=_cror_(j,1);//循环移位函数,将j循环右移1位
			P0=dis_code[11-i];//P0口输出段码
			P2=j;//P2口输出位控码
			delay(123);//延时
			P0=0x00;
		}
	}
}

35f409fb449948e18399a4bbd6e58761.png

576678ae973a400e8d105f79d9050f54.png

实验二

keil

这个只需要修改keil的代码,不需要改Proteus中的原理图。

keil修改部分就是修改数组和循环,修改数组表示你要输出什么,修改循环表示你要输出几个字,

如果姓名一起只有两个字,就需要把循环改成四次,把数组里面的元素之前是顺序排列了一次,如今增加逆序的部分。

原理:通过P1口控制当前扫描的行,通过P0口和P2来确定当前行哪些地方需要点亮,当扫描的速度过快的时候就让人感觉是整个汉字一起打印的,所以数组里面装着就是你姓名对应的16*16点阵码。

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int 
#define out0 P0
#define out1 P1
#define out2 P2


void delay(uint y) //延时函数
{
	uchar x=250;
	for(;y>0;y--)
	{
		while(--x);
		x=100;
	}
}

uchar code string[]=
{
/*--  文字:  刘  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x20,0x10,0x20,0x10,0x20,0xFF,0x25,0x40,0x24,0x42,0x24,0x44,0x24,0x28,0x24,
0x28,0x24,0x10,0x24,0x10,0x24,0x28,0x24,0x24,0x20,0x42,0x20,0x41,0x28,0x00,0x10,

/*--  文字:  健  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x04,0x08,0x04,0x08,0x3F,0x74,0x24,0xC4,0x7F,0x46,0x24,0x26,0x3F,0x25,0x04,
0x74,0x3F,0x44,0x04,0x44,0x04,0xD4,0x7F,0x24,0x04,0x64,0x04,0x94,0x7F,0x0C,0x00,

/*--  文字:  健  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x04,0x08,0x04,0x08,0x3F,0x74,0x24,0xC4,0x7F,0x46,0x24,0x26,0x3F,0x25,0x04,
0x74,0x3F,0x44,0x04,0x44,0x04,0xD4,0x7F,0x24,0x04,0x64,0x04,0x94,0x7F,0x0C,0x00,
	
	/*--  文字:  刘  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x08,0x20,0x10,0x20,0x10,0x20,0xFF,0x25,0x40,0x24,0x42,0x24,0x44,0x24,0x28,0x24,
0x28,0x24,0x10,0x24,0x10,0x24,0x28,0x24,0x24,0x20,0x42,0x20,0x41,0x28,0x00,0x10,

}  ;
void main()
{	uchar i,j,n;
	while(1)
	{
		for(j=0;j<4;j++)	//共显示4个汉字
		{
			for(n=0;n<40;n++)//每个汉字整屏扫描40次
			{
				for(i=0;i<15;i++)//逐行扫描16行
				{
					out1=i%15;//输出行码
			        out0=string[i*2+j*32];//输出列码C0~C7
					out2=string[i*2+1+j*32];//输出列码C8~C15
					delay(4);//每一行之间的延时
					//out0=0xff;
					//out2=0xff;
				}
			}
		}
	}
}

94fd774ce3d44e2c877344fa92effc29.png 

运行结果

14b3f9f8c5814c269976bcfc5de9dddd.png

总结

继续努力

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1214052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

城市智慧排水监测系统,实时守护城市水脉

城市智慧排水监测系统&#xff0c;通过新一代信息技术与排水技术的完美融合&#xff0c;让数据价值得以充分发掘&#xff0c;实现智慧排水监测系统的控制智能化、数据资源化、管理精确化、决策智慧化。它如同城市的守护者&#xff0c;时刻关注着城市排水系统的运行状态&#xf…

算法-二分查找-简单-搜索插入位置

记录一下算法题的学习3 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入: nums [1,3,5,6], …

Windows server 2012 R2系统服务器远程桌面服务激活服务器RD授权分享

Windows server 2012 R2系统服务器远程桌面服务激活服务器RD授权 二、激活服务器&#xff0c;获取许可证服务器ID和许可证密钥包ID三、激活终端服务器四、配置远程桌面会话主机授权服务器 上期我分享了Windows server 2012 R2系统服务器远程桌面服务的安装教程&#xff0c;若是…

基于模拟退火算法的TSP问题建模求解(Python)

基于模拟退火算法的TSP问题建模求解&#xff08;Python&#xff09; 一、模拟退火算法&#xff08;Simulated Annealing Algorithm&#xff0c;SAA&#xff09;工程背景模拟退火算法用于优化问题求解原理 二、旅行商问题&#xff08;Travelling salesman problem&#xff0c;TS…

Sentinel 流控规则

Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 SpringbootDubboNacos 集成 Sentinel&…

【机器学习7】优化算法

1 有监督学习的损失函数 1.1 分类问题 对二分类问题&#xff0c; Y{1,−1}&#xff0c; 我们希望sign f(xi,θ)yi&#xff0c; 最自然的损失函数是0-1损失&#xff0c; 函数定义特点0-1损失函数非凸、非光滑&#xff0c;很难直接对该函数进行优化Hinge损失函数当fy≥1时&…

机器学习中的偏差漂移:挑战与缓解

一、介绍 机器学习算法已在各个行业得到广泛采用&#xff0c;在自动化流程、制定数据驱动决策和提高效率方面发挥着关键作用。然而&#xff0c;他们也面临着挑战&#xff0c;其中一个重要的问题是偏见。机器学习模型中的偏差可能会导致不公平和歧视性的结果&#xff0c;并对现实…

代理IP怎么使用

使用代理IP的步骤如下&#xff1a; 获取代理IP地址&#xff1a;从代理IP服务商处获取代理IP地址。打开浏览器&#xff1a;打开浏览器&#xff0c;并进入代理设置页面。设置代理IP&#xff1a;在代理设置页面中&#xff0c;将代理IP地址和端口号填写到对应的文本框中&#xff0…

Centos8配置Zabbix5.0中文汉化

1.点击【Sign in】按钮&#xff0c;输入用户名和密码进入Zabbix的首页&#xff0c;结果如图。 2.点击左边导航栏的【User settings】链接&#xff0c;进入用户个性化设置界面&#xff0c;结果如图。 3.在搭建Zabbix的虚拟机上使用yum命令下载中文包。 yum install glibc-langpa…

Java实现拼图游戏

拼图游戏是一种智力类游戏&#xff0c;玩家需要将零散的拼图块按照一定的规律组合起来&#xff0c;最终拼成完整的图案。拼图游戏的难度可以根据拼图块数量、拼图的形状、图案的复杂程度等因素来调整。这种游戏适合各个年龄层的玩家&#xff0c;能够提高大脑的观察力、空间感知…

【java学习—十四】java动态代理(6)

文章目录 1. 相关概念2. 步骤3. 举例 问题&#xff1a; 假设一个java项目有100个java类&#xff0c;每个java有10个方法&#xff0c;这总共有1000个方法&#xff0c;现在有这样一个需求&#xff0c;需要在每个java方法加上2句话&#xff1a;在方法执行前输出这个方法开始执行&a…

多区域OSPF配置

配置命令步骤&#xff1a; 1.使用router ospf 进程ID编号 启用OSPF路由 2.使用network 直连网络地址 反掩码 area 区域号 将其归于对应区域 注意&#xff1a; 1.进程ID编号可任意&#xff08;1-65535&#xff09; 2.反掩码用4个255相减得到 3.area 0 为主干区域 4.连接不…

【libGDX】初识libGDX

1 前言 libGDX 是一个开源且跨平台的 Java 游戏开发框架&#xff0c;于 2010 年 3 月 11 日推出 0.1 版本&#xff0c;它通过 OpenGL ES 2.0/3.0 渲染图像&#xff0c;支持 Windows、Linux、macOS、Android、iOS、Web 等平台&#xff0c;提供了统一的 API&#xff0c;用户只需要…

OLAP与OLTP:数据处理系统的比较分析

大家好&#xff0c;如今企业会从各种来源生成大量数据&#xff1a;客户互动、销售交易、社交媒体等等。要从这些数据中提取有意义的信息&#xff0c;需要能够有效处理、存储和分析数据的系统。 OLAP&#xff08;联机分析处理&#xff09;和OLTP&#xff08;联机事务处理&#…

SQLite3 数据库学习(三):SQLite C API 接口详解

参考引用 SQLite 权威指南&#xff08;第二版&#xff09;SQLite3 入门 1. 接口基本使用 SQLite C API 接口在线文档 1.1 打开数据库文件 返回值 成功返回 0 &#xff08;SQLITE_OK&#xff09;&#xff0c;失败返回 1 &#xff08;SQLITE_ERROR&#xff09; 参数 const cha…

Python 中的 tqdm() 方法

tqdm&#xff08;阿拉伯语"taqaddum"的缩写&#xff0c;意为"进展"&#xff09;是Python中一个用于在循环中显示进度条的库。它提供了一种简单而又灵活的方式来监测代码执行的进度&#xff0c;特别是在处理大量数据或耗时较长的任务时非常有用。 1、安装 …

第1章 走近Java【深入理解Java虚拟机:JVM高级特性与最佳实践(第三版)】

Java技术体系所包含的内容 Java技术发展的时间线 注释

C++11『右值引用 ‖ 完美转发 ‖ 新增类功能 ‖ 可变参数模板』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1.右值引用1.1.什么是右值引用&#xff1f;1.2.move 转移资源1.3.左值引用 vs …

操作符——C语言初阶

一.算数操作符&#xff1a; - * / % 、-、*、/这四个运算符均可用于整数及浮点数的运算。 当使用/运算符时&#xff0c;如果两个操作数均为整型&#xff0c;那么执行整数除法&#xff0c;运算结果也为整型&#xff1b;如果两个操作数至少一个为浮…

Facebook账号运营技巧

Facebook作为全球知名的社交媒体平台之一&#xff0c;坐拥着庞大的用户群体&#xff0c;吸引大量的跨境电商加入&#xff0c;那么肯定就会有少部分的卖家对于Facebook账号运营不是很了解&#xff0c;下面小编将讲一下Facebook账号运营的一些小技巧。 1、明确目标受众 首先需要明…