蓝桥杯学习记录3数码管显示

蓝桥杯学习记录3数码管显示

操作数码管无非就是操作了很多流水灯,代码比较简单。
但是从原理上讲,数码管的连接对于初学者不好解释明白,这是头痛的一点。
蓝桥杯用的数码管是两个4位共阳数码管

  ___a
f|_g_|b
e|___|c.dp
   d

数码管的段选是这样的:


dpgfedcba
8(最高位)4218421

码值为0时对应的数码管点亮,也就是说如果你想显示数字“1”时,你的段码为0xf9

板子上的位码是这样排列的


12481248

标记文本是低四位,就是说当你想点亮最右边的数码管你的位码为0x80

必要的介绍完了,上代码

/*****************************
author: 风行天
time:2020.01.16
*****************************/
#include <stc15f2k60s2.h>
#define uint unsigned int 
#define uchar unsigned char 
uint gid[]=
{
 0xc0,//0
 0xf9,//1
 0xa4,//2
 0xb0,//3
 0x99,//4
 0x92,//5
 0x82,//6
 0xf8,//7
 0x80,//8
 0x90,//9
 0xff//灭
};
void delay_ms(uint sec)
{
 uint x,y;
 for (;sec>0;sec--)
 {
  for (x=0;x<5;x++)
  {
   for (y=0;y<157;y++)
   {}
  }
 }
}

void init ()
{
 P2=0xa0;//1010 0000
 P0=0x00;
 P2=0x80;//1000 0000
 P0=0xff;
 P2=0xc0;
 P0=0x00;//打开段选 选中
 P2=0xff;
 P0=0xff;//打开为选选通数字
}
void display(uint num)//最大65535
{
 uint a,b,c,d,e;
 a=num/10000;
 b=(num%10000)/1000;
 c=(num%1000)/100;
 d=(num%100)/10;
 e=num%10;
 if (a)
 {
  P2=0xc0;
  P0=0x08;//打开段选 选中第五位
  P2=0xff;
  P0=gid[a];//打开为选选通数字a
  delay_ms(1);
 }
 if (b||(a!=0))
 {
  P2=0xc0;
  P0=0x10;//打开段选 选中第四位
  P2=0xff;
  P0=gid[b];//打开为选选通数字b
  delay_ms(1);
 }
 if (c||(b!=0)||(a!=0))
 {
  P2=0xc0;
  P0=0x20;//打开段选 选中第三位
  P2=0xff;
  P0=gid[c];//打开为选选通数字c
  delay_ms(1);
 }
 if (d||(b!=0)||(a!=0)||(c!=0))
 {
  P2=0xc0;
  P0=0x40;//打开段选 选中第二位
  P2=0xff;
  P0=gid[d];//打开为选选通数字d
  delay_ms(1);
 }
 
 P2=0xc0;//最后一位必须显示
 P0=0x80;//打开段选 选中最后一位
 P2=0xff;
 P0=gid[e];//打开为选选通数字e
 delay_ms(1);

}

void main ()
{
 init ();
 while (1)
 {
  display(9999);//靠右显示9999
 }
}

代码虽然简单,但是还是要多练习

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值