51单片机实验2017年11月17日

17年11月17日

数码管显示


#include<reg52.h>
单片机型号程序前辍
#include<intrins.h>
函数库调用
#define uchar unsigned char
#define uint unsigned int
define函数名称替换

sbit we = P2^7;
sbit du = P2^6;
开发板上的位选和段选声明,也就是说告诉单片机我们要用位选和段选了
我们用的开发板上有八组/八位数码管一组/一位由八段数码管组成位选就是说我们要用这八组/八位数码管中的哪一位/组;段选是说我们要用一组/位的哪几段数码管组成我们想让它表示的内容
uchar code leddata[]={
 
                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义
                                      };
以上这组16进制数表示的是送什么样的段选信号,这个在51的数码管显示的小工具里可以找到,这里我们用的是共阴极数码管
void delay(uint z)
{
 uint x,y;
 for(x = z;x > 0;x --)
  for(y = 112;y > 0;y --);
}
这个是前面我们讲过的延时函数即:1/11.0592*12*112*1000≈1.0080秒
void main()
主函数开始
{
 P1 = 0x7f;
这句可以没有,写这句主要是为了看看LED的位选位置和数码管的位选位置有什么不同
 du = 1;
打开段选
 P0 = leddata[10];
给段选送入数据‘A’
 du = 0;
关闭段选
 delay(5);
一个小延时
 P0 = 0xff;
P0口全置1,因为是共阴极数码管所以给它高电平它是不会亮的,这句和上面那句延时是为了消去数码管的余晖
 we = 1;
位选打开
 P0 = 0x7f;
向P0口送入位选数据,告诉单片机P0口让它亮哪个数码管
 we = 0;
关闭位选
 while(1);
一直循环
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人在西北刚上线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值