【萌新向】STC8A8K64S4A12开发学习(二)——静态数码管

静态数码管的驱动

终于搞完了期末可以开始搞单片机了!我自己的板子只有四个按键和四个led
某宝买了一块普中的开发板,可惜板子上带的是STC89C52,
好在我原来的板子把所有IO都引了出来,所以我选择转接的方法↓↓↓↓↓(请忽略灵魂走线)
在这里插入图片描述

这篇文章我将介绍一下,STC8A8K64S4A12静态数码管驱动的方法
一、数码管
数码管
8段数码管,每段相当于一个led,前7段用于显示数字,最后一段是小数点,通过这8个led的不同组合实现数字显示的功能。

分为共阴共阳两种,手里这块板子上的是共阴数码管,二者在编写程序时需要注意的是码表不一样,下面给出共阴和共阳的码表:

typedef unsigned char u8;
//共阳数码管 0~f  
// code 可以减少空间使用
u8 code smgtable[] = {0xc0,0xf9,0xa4,0xb0,
				 	  0x99,0x92,0x82,0xf8,
					  0x80,0x90,0x88,0x83,
					  0xc6,0xa1,0x86,0x8e}
//共阴数码管 0~f
u8 code smgtable[] = {0x3f,0x06,0x5b,0x4f,
					  0x66,0x6d,0x7d,0x07,
					  0x7f,0x6f,0x77,0x7c,
					  0x39,0x5e,0x79,0x71};

  • 数码管a,b,c,d,e,f,g,dp分别对应IO口的第0到第7个IO口线
  1. “0x”是啥:因为这个单片机的每个IO口有8个IO口线,十六进制1位对应二进制4位,就用2位十六进制数来代表这8个IO口线,前面的0x代表十六进制,拿共阴数码管显示数字 “ 1 ” 举例,显示数字1需要上图中的B,C这两段亮起,共同使用的阴极是低电平,要想亮起就要使对应的IO口线输出高电平,所以用8位二进制数表示就是 0000 0110转换成十六进制就是 0x06。
  2. 小数点问题:通过前一点中所讲的如何通过二进制表示哪段管子亮起,可以得出,如果想让上图中的小数点位亮起,就要控制小数点对应位为1,所以只需要在要显示的数后面加上0x80就可以了↓↓↓(显示“ 1. ”)

在这里插入图片描述

二、硬件显示
单片机运行速度相对于人眼的识别速度非常快,所以要加入延时函数,延时函数可以直接用stc_isp里面的软件延时计算器直接计算
在这里插入图片描述

  • 注意选择和所用mcu匹配的指令集,正确选择系统频率。

三、代码部分
功能:开机之后数码管以1秒钟为间隔,轮流显示从0~f

#include <STC8.h>       //头文件
#include <intrins.h>		//头文件

typedef unsigned int u16;		//定义无符号整型为u16,方便写代码
typedef unsigned char u8;		//同理

sbit smgA = P2^2;				//这三行是因为开发板上使用了74HC138来选
sbit smgB = P2^3;				//择数码管的第几位,在下一篇动态数码管里会
sbit smgC = P2^4;				//详细解释,如果你的数码管直接连在mcu上						 		  
								//就不要写这三行。

u8 code smgtable[] = {0x3f,0x06,0x5b,0x4f,
					  0x66,0x6d,0x7d,0x07,
					  0x7f,0x6f,0x77,0x7c,
					  0x39,0x5e,0x79,0x71};

void Delay1000ms()		//@11.0592MHz  时长1秒的延时函数
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void main()
{
	u16 i;
	smgA = 0;
	smgB = 0;
	smgC = 0;
	while(1)//死循环,防止程序“跑飞”
	{
		for(i = 0;i<16;i++)
		{
			P0 = smgtable[i];//通过开头定义的码表来给端口赋值
			Delay1000ms();//调用延时函数
		}
	}
}

如有错误欢迎指正,新手才疏学浅,请各位大佬见谅。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值