LQB05 数码管动态扫描,显示字符串

news2024/11/25 14:46:18

1、蓝桥杯51单片机开发板的数码管是共阳数码管;
需要注意段码表的推导。
掌握推导段码表。
2、stcisp软件的数码管代码,是共阴的模式,注意取反的话,如何实现?
3、定时器动态扫描的思路;
4、注意动态扫描的时候,消隐。
5、注意sprintf函数的使用,
6、注意如何添加小数点。
7、注意,如果有多个数码管的数据。轮流显示,记得将打印区的数据及时清空,不然有数据残留。memset函数;

实验一:
目的:
用数码管显示指定的内容AB:12.578
用定时器0进行1ms扫描一个数码管,8个数码管,需要8ms;

整体思路:
(1)要有段码表,采用stcisp软件的段码表,没有的自己补充一下,然后后面取反,由于软件的段码表是共阴的,所以自己补充的也要是共阴的,后面显示的时候,进行取反。组织成自己的段码表
(2)用sprintf函数,将需要显示的字符串,打印到显示数组缓冲区中;
(3)将缓冲区的数组,转换为段码,需要一个转换函数;
(4)将段码表,显示出来。

在这里插入图片描述

实现;
补充段码表。
在这里插入图片描述看到标准字库基本都有了。没有的话要自己掌握推导。

sprintf函数的使用。如果要弄懂调试原理,请看我的视频,B站的视频。
第一,包括stdio.h头文件;
打开KEIL软件的帮助,搜索,看下实例代码,然后记住%d,%u,%f这些格式符号。以及左对齐,右对齐这些内容。
第二,注意格式符号。比赛的时候,注意,%5.2f代表是有5个格子宽度,包括了两个小数点;
第三,注意(int)hour,将数据转换为int类型,才能用%d;

		sprintf(SmgBuffer,"7-U-%5.2f",wendu);//po32.5

%2d,是两个宽度,注意这个要转换为int类型才能使用。
sprintf(SmgBuffer,“%2d-%2d-%2d”,(int)hour,(int)minute,(int)second);
}
}
else if(PageIndex==1)
{
sprintf(SmgBuffer,“CC-%2d-22”,(int)a);

第三,如何添加小数点。
将最高位置1,就可以了。
SmgData =SmgData |0x80;就可以了。

步骤:
在这里插入图片描述

代码:
主要是显示温度,显示时分秒这些unsigned char数据。
代码。

代码二,500ms时间到,显示数据a=2,a每次加一,加到98,就回到2;格式BA=2–空空
每1200ms,显示数据f=18.5,每次变化0.1,。FP-18.5C空

用定时器0作为数码管扫描的定时器,也作为定时500ms,1200ms的一个定时器;

//点亮数码管       sprintf     printf
#include <stc15.h>
#include <stdio.h>      //可以用sprintf函数
#include <string.h>   //可以用memset函数,

#define FOSC 11059200L

#define T1MS (65536-FOSC/1000)      //1T模式
char SMGbuf[20];     //数码管缓冲区
char SMGDat[8];         //数码管打印区

typedef    unsigned char   u8;
typedef    unsigned int    u16;
typedef    unsigned long   u32;

#define LED 4
#define ULN 5
#define COM 6
#define ABC 7
 /*************  本地常量声明    **************/
u8 code t_display[]={                       //标准字库
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};//  
 //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1
u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};      //位码


void choose573(unsigned char x)
{
	switch(x)
	{
		case 0:P2=P2&0x1F;break;
		case LED:P2=(P2&0x1F) |0x80;break;
    case ULN:P2=(P2&0x1F) |0xA0;break;
	  case COM:P2=(P2&0x1F) |0xC0;break;
    case ABC:P2=(P2&0x1F) |0xE0;break;
	}
}
void smgconv()
{
	unsigned char i,j;
	unsigned char smgdattemp;
	while(SMGbuf[i]!=0x00)
	{
	   switch(SMGbuf[i])
		 {
			 case '0': smgdattemp= t_display[0];break;
			 case '1': smgdattemp= t_display[1];break;
       case '2': smgdattemp= t_display[2];break;
			 case '3': smgdattemp= t_display[3];break;
			 case '4': smgdattemp= t_display[4];break;
			 case '5': smgdattemp= t_display[5];break;
       case '6': smgdattemp= t_display[6];break;
			 case '7': smgdattemp= t_display[7];break;
			 case '8': smgdattemp= t_display[8];break;
			 case '9': smgdattemp= t_display[9];break;
       case 'A': smgdattemp= t_display[10];break;
			 case 'B': smgdattemp= t_display[11];break;
			 case 'C': smgdattemp= 0x39;break;
			 case 'D': smgdattemp= 0x5E;break;
			 //可以在这里添加自己的字库
			 default: smgdattemp=0x00;break;
		 }
		 if(SMGbuf[i+1]=='.')  
		 {
		    smgdattemp= smgdattemp|0x80;//添加小数点
			  i= i+2;
		 }
		 else i=i+1;
		 
		 SMGDat[j]= smgdattemp;
		 j++; 
	}
	
}

void display()
{
	static unsigned int i=0;
	//选择数码管
	 choose573(COM);
	 P0=0x00; //注意,消隐一下
	choose573(0);
   //选择数码管
	 choose573(ABC);
	 P0=0xFF; //注意,消隐一下
	 choose573(0);
	

	//选择数码管
	 choose573(COM);
	 P0=T_COM[i]; //注意,这里不用取反,因为本来0x01就是点亮一个数码管
	 choose573(0);
	//输出内容
	 choose573(ABC);
	 P0=~SMGDat[i];//注意,需要位取反,因为字库表是共阴表,开发板是共阳数码管,两者相反
	 choose573(0);
	
	i++;
	//如果够8个,就归0
	if(i>=8)i=0;
}


float wendu=12.5;
char miao=25;
int  shi=350;

void main()
{
  int i=0;
  AUXR |= 0x80;                   //定时器0为1T模式
  TMOD = 0x00;                    //设置定时器为模式0(16位自动重装载)
  TL0 = T1MS;                     //初始化计时值
  TH0 = T1MS >> 8;
  ET0 = 1;                        //使能定时器0中断
  EA = 1;
  TR0 = 1;                        //定时器0开始计时
	while(1)
	{
	}
}
/* Timer0 interrupt routine */
void tm0_isr() interrupt 1 using 1
{
	static int cnt1ms=0;
	cnt1ms++;
 if(cnt1ms==1000)
	{
		wendu=wendu+0.1;
		memset (SMGDat, '\0', sizeof (SMGDat));  //注意,把打印数据清0,不然有数据残留
		sprintf(SMGbuf,"AB%4.2f",wendu);
		smgconv();
	}
	if(cnt1ms==2000)
	{
			cnt1ms=0;
			miao=miao+1;
			memset (SMGDat, '\0', sizeof (SMGDat));  //注意,把打印数据清0,不然有数据残留
			sprintf(SMGbuf,"CD%2d",(int)miao);
			smgconv();
		  SMGDat[7]=0x7C;//转换觉得不合理,可以人为,往里面填一些数据 ,这里是举例
	}
    display();
}

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

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

相关文章

golang入门笔记——测试

测试类型&#xff1a; 单元测试&#xff1a; 规则&#xff1a; 1.所有测试文件以_test.go结尾 2.func Testxxx&#xff08;*testing.T&#xff09; 3.初始化逻辑放到TestMain中 运行&#xff1a; go test [flags][packages]Go语言中的测试依赖go test命令。 go test命令是一…

(考研湖科大教书匠计算机网络)第六章应用层-第四节:域名系统DNS

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;DNS概述二&#xff1a;层次域名结构&#xff08;1&#xff09;概述&#xff08;2&#xff09;顶级域名分类&#xff08;3&#xff09;因特网命名空…

「SAP」ABAP模块学习需要了解什么?快收下这份ABAP技术栈指南【附技能树】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计专业大二本科在读&#xff0c;阿里云社区专家博主&#xff0c;华为云社区云享专家&#xff0c;CSDN SAP应用技术领域新兴创作者。   在学习工…

1. MacOs Dart环境安装

前置材料&#xff1a;需要安装dart的Mac设备, 一颗会用搜索引擎的聪明大脑一步步讲一下homebrew的安装流程我个人安装时遇到的情况 大家做个参考 如果你遇到的问题和我的不一样可以来这里 homebrew快速安装指引 可入群咨询首先, 我其实是安装过homebrew的网上常见的dart安装命令…

2003 -Cant connect to MySql server on IP地址 (10060)----在docker安装的MySQL连接阿里云服务器

MySQL配置 这个问题是因为在数据库服务器中的mysql数据库中的user的表中没有权限(也可以说没有用户)&#xff0c;下面将记录我遇到问题的过程及解决的方法。 在搭建完LNMP环境后用Navicate连接出错 遇到这个问题首先到mysql所在的服务器上用连接进行处理 0、docker exec -it m…

界面控件DevExpress WinForm——轻松构建类Visual Studio UI(二)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

嵌入式常用知识

12、并发和并行的区别&#xff1f; 最本质的区别就是&#xff1a;并发是轮流处理多个任务&#xff0c;并行是同时处理多个任务。 你吃饭吃到一半&#xff0c;电话来了&#xff0c;你一直到吃完了以后才去接&#xff0c;这就说明你不支持并发也不支持并行。 你吃饭吃到一半&…

推荐5款实用小工具,第五款更是小白最爱

作为一个黑科技软件爱好者&#xff0c;电脑里肯定是不会缺少这方面的东西&#xff0c;今天的5款实用小工具闪亮登场了。 1.磁盘空间分析——SpcaeSniffer SpcaeSniffer是一款可视化硬盘空间占用布局大小的查询工具&#xff0c;软件体积小巧&#xff0c;使用简单。软件可对所需…

Android Studio翻译插件推介(Translation)

前言 Android Studio翻译插件适合英语水平不太好的程序员&#xff08;比如&#xff1a;我&#xff09;&#xff0c;最常用的翻译插件Translation和AndroidLocalize&#xff0c;本文主要讲解Translation&#xff0c;亲测可用。 先看看效果&#xff1a;这里是Android的API,任意选…

apache、iis设置301教程(适用虚拟主机)

当前提供教程是通过重写规则实现301,目前西部数码主机面板已经开发"301转向"功能可快捷设置&#xff1a; 如果部署了https访问&#xff0c;请忽略此教程&#xff0c;部署https的网站请参考&#xff1a;https://www.west.cn/faq/list.asp?unid1419 进入业务管理-虚…

单通道说话人语音分离——Conv-TasNet(Convolutional Time-domain audio separation Network)

单通道说话人语音分离——Conv-TasNet模型(Convolutional Time-domain audio separation Network) 参考文献&#xff1a;《Conv-TasNet: Surpassing Ideal Time-FrequencyMagnitude Masking for Speech Separation》 1.背景 在真实的声学环境中&#xff0c;鲁棒的语音处理通常…

【蓝桥杯每日一题】差分算法

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;我与杀戮之中绽放&#xff0c;亦如黎明的花…

银河麒麟V10桌面版系统将用户开发Qt界面程序添加为开机自启动

银河麒麟V10桌面版系统将用户开发Qt界面程序添加为开机自启动 银河麒麟V10桌面版系统允许用户开发自己的qt界面程序并将其添加为开机自启动。这样&#xff0c;每次开机后&#xff0c;用户开发的qt界面程序会自动启动&#xff0c;无需手动打开。 要将用户开发的qt界面程序添加…

走进chatGPT新一代机器人

chatGPT这款新一代对话式人工智能便在全球范围狂揽1亿名用户&#xff0c;并成功从科技界破圈&#xff0c;成为街头巷尾的谈资。chatGPT能干什么&#xff1f;打开官网https://openai.com/blog/chatgpt/ &#xff0c;完了&#xff0c;芭比Q了试下其他家的接口讲笑话写代码写解决方…

格雷码应用意义及编解码

文章目录1. 格雷码的应用意义2. 由自然数编码获得格雷码2.1 对称法实现2.2 公式法实现3. 由格雷码解码获得自然数1. 格雷码的应用意义 学过晶体管知识的朋友们都知道&#xff0c;数据位跳变就相当于硬件电路中的晶体管翻转。许多位同时跳变就相当于多个晶体管同时翻转&#xf…

【C++】STL之空间配置器 | STL总结

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;什么是空…

全球首个云渗透测试认证专家课程发布!腾讯安全领衔编制

2月20日&#xff0c;国际云安全联盟CSA发布了“云渗透测试认证专家CCPTP”课程体系&#xff0c;这是全球首个云渗透测试能力培养课程及人才认证项目&#xff0c;有效地弥补了云渗透测试认知的差距和技能人才培养的空白。腾讯安全在该项目中担任核心课程编撰单位。CSA是全球中立…

【双指针问题】LeetCode344、345、 844、283问题详解及代码实现

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

曼恩斯特在创业板注册生效:拟募资约5亿元,彭建林夫妇为实控人

2月21日&#xff0c;深圳证券交易所披露的信息显示&#xff0c;深圳市曼恩斯特科技股份有限公司&#xff08;下称“曼恩斯特”&#xff09;的注册生效。据贝多财经了解&#xff0c;曼恩斯特于2021年6月30日在创业板递交招股书&#xff0c;2022年6月15日获得上市委会议通过&…

老戏骨李立群真敢说,互联网吐槽郝蕾演技太差

说起老戏骨李立群&#xff0c;可能很多人都想不起来&#xff0c;他究竟出演过什么影视作品&#xff0c;不过这依然不能阻挡他的走红。李立群的走红非常偶然&#xff0c;因为在大陆拍戏多年&#xff0c;他已经在上海买房定居&#xff0c;当然偶尔也会去台北省亲。 在上海疫情爆发…