前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口与通信-静态数码管

接口与通信-静态数码管

原创
作者头像
会洗碗的CV工程师
发布2024-02-14 22:57:54
2890
发布2024-02-14 22:57:54
举报
文章被收录于专栏:LongJava学习资料

一、实验目的与要求

能在数码管上显示数字(数码管静态显示)

二、实验环境

硬件环境:实验盒;软件环境:keil

三、实验原理

当多位数码管应用于某一系统时,它们的“位选”是可独立控制的,而“段选”是连接在一起的,我们可以通过位选信号控制哪几个数码管亮,而在同一时刻,位选选通的所有数码管上显示的数字始终都是一样的,因为它们的段选是连接在一起的,所以送入所有数码管的段选信号都是相同的,那么它们显示的数字必定一样,数码管的这种显示方法叫做静态显示。

静态数码管是一种电子显示器件,其显示原理是,每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可以一直保持,直到送入新的字形码为止。

静态显示方式的优点在于占用CPU时间少,显示便于监测和控制。然而,其缺点在于硬件电路相对复杂,成本较高。

在实际应用中,静态数码管常用于需要长时间显示固定信息的场合,如电子表、计时器等。同时,它也可以与其他电子元件配合使用,实现更为复杂的功能。

请注意,使用静态数码管时需要了解其具体的驱动方式和电气参数,以确保正常工作并避免损坏。同时,在安装和使用过程中,应遵循相关的安全规范,确保人身和设备的安全。

四、实验内容

实验步骤:先用数据线接上电脑和实验盒子,然后在软件中添加对应的源程序编译后的pro.hex文件,断电添加,然后运行一瞬间打开电源。

连线图:

实验程序:

代码语言:c
复制
#include<reg51.h>
//--定义你要使用的IO口--//
#define GPIO_DIG P0
//--声明全局函数--//
void Delay10ms(unsigned int c);   //误差 0us
//--定义全局变量--//
//RAM,ROM
unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};
//0~F段码
//0:0011_1111 
/*******************************************************************************
* 函 数 名         : main
* 函数功能   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
 unsigned char i = 0;
 while(1)
 {
  GPIO_DIG = ~DIG_CODE[i];
  i++;
  if(i == 16)
  {
   i = 0;
  }
  Delay10ms(50);
 }    
}
/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能   : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Delay10ms(unsigned int c)   //误差 0us
{
 unsigned char a, b;
 //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--//
 for (;c>0;c--)
 {
  for (b=38;b>0;b--)
  {
   for (a=130;a>0;a--);
  }          
 }       
}

输入数据:按键输入

输出数据:数码管显示对应的数字

实验结果:

五、实验分析

本次实验通过两条八孔线链接前来,使得数码管可以显示按键对应按的数字。

六、思考题

1.利用定时器中断实现实时时钟,显示“时:分:秒”。

实验程序:

代码语言:c
复制
#include <reg51.h>
#include <stdio.h>
unsigned char n=20;
unsigned int num=0;
unsigned int hour=0;
unsigned int minute=0;
void main()
{
//-----------------------------------------
  //定义虚拟标准输入/输出设备(利用串口)
  SCON=0x50; //mode 1, 8-bit 
  TMOD=0x20; //timer 1, mode 2, 8-bit reload     
  TH1=221;  
  TR1=1;     //timer 1 run
  TI=1; 
//----------------------------------------- 
TMOD=1;
 TH0=0x3c;
 TL0=0xb0;
ET0=1;
 EA=1;
 TR0=1; 
 while(1);
}
void intt0() interrupt 1
{n--;
 if(n==0) {n=20;
 if(num<=59&&minute<=59){
printf("Timer is %u:%u:%u \n",hour,minute,num++);}
else if(num>59&&minute<=59){
num=0;
minute++;
printf("Timer is %u:%u:%u \n",hour,minute,num++);}
else if(num>59&&minute>59){
hour++;
minute=0;
num=0;
printf("Timer is %u:%u:%u \n",hour,minute++,num++);}
}
 TH0=0x3c;
 TL0=0xb0;
 TR0=1;
}

运行结果:

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档