【单片机记录第一天】

使用51单片机实现十进制转二进制

进制转换

这是我第一天进行单片机学习打卡,希望可以坚持下去。

如何使用单片机进行十进制转二进制

下面是我拙劣的学习情况,希望可以对大家起到抛砖引玉的作用。

  1. 在进行十进制转二进制时,因为我使用的单片机是八位数码管,因此我将用十六进制表示二进制。
  2. 实验中我用到了四位数码管,显示格式为“12-C”;
  3. 因为我第一次学按键部分,所以我把能用的按键全都用了进去,因此用到了矩阵键盘和独立按键

代码部分

// 头文件部分
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char

sbit DU=P2^6;//段选
sbit WE=P2^7;//位选
uchar code LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
						 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x37,0x3e,0x40,0x00};

在进行进制转化时,我用到了数组。数组中加入code,代表在下文中不可更改。因为我用到了矩阵按键,所以我要进行段选和位选的定义。位选代表选定某一个数码管。段选代表数码管显示。
动态显示要求所有位选数码管的段选线并联在一起,由位控制线控制哪一位数码管有效。

//延时函数
void delay(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
  for(y=114;y>0;y--)  ;
}

在使用矩阵按键时,要先进行列扫描,在进行行扫描,两次扫描确定按键位置。
在使用矩阵按键时,要先进行列扫描,在进行行扫描,两次扫描确定按键位置。

//按键扫描函数
void keyscan()
{
P3=0xf0;//列扫描时,行置0,列置1
if(P3!=0XF0)
{
delay(20);//按键消抖
if(P3!=0XF0)
{
switch(P3)
{
case 0xe0:keyvalue=0;break;
case 0xd0:keyvalue=1;break;
case 0xb0:keyvalue=2;break;
case 0x70:keyvalue=3;break;
}
P3=0X0F;//行扫描,行置1,列置0
if(P3!=0X0F)
{
switch(P3)
{
case 0x0e:keyvalue=keyvalue  ;break;
case 0x0d:keyvalue=keyvalue+4;break;
case 0x0b:keyvalue=keyvalue+8;break;
case 0x07:keyvalue=keyvalue+12;break;
}
while(P3!=0X0f);//松手检测
}
}
}
P3=0XFF;//使用独立按键
if(P0!=0xff)
{
switch (P3)
{
case 0xfe:keyvalue=16;break;
case 0xfd:keyvalue=17;break;
case 0xfb:keyvalue=18;break;
case 0xf7:keyvalue=19;break;
}
}

}
//主函数
void main()
{
uint ge,shi;
while(1)
{
keyscan();
ge=keyvalue%10;
shi=keyvalue/10;
WE=1;//打开位选
P0=0xfe;//选定第一个数码管
WE=0;

DU=1;
P0=LED[shi];
delay(5);
//
WE=1;
P0=0XFD;
WE=0;

DU=1;
P0=LED[ge];

delay(5);
WE=1;
P0=0XFB;
WE=0;

DU=1;
P0=LED[20];
DU=0;//需要锁存数据,不被更改,因为这个数码管上显示的符号是固定不变的
delay(5);

WE=1;
P0=0XF7;
WE=0;

DU=1;
P0=LED[keyvalue];

delay(5);
}}

在进行数显时,我用的是软件延时,一开始我设置了10ms,我发现数码管一直在跳闪,我对代码进行了多方位修改仍然找不到错误。于是我询问了在单片机学习上领先我很多的同学,才知道还有一个东西叫余晖效应,解决它的办法是减少延时时间。想要了解余晖效应的可以自行百度。

总结

其实我已经学了很多天的单片机了,但是这是我第一次想要提笔记下来我的学习过程。对于单片机,我知之甚少,但在我不断地探索过程中,我发现仅仅只是点亮一个跑马灯就让我充满了成就感,在一次又一次实验成功后,我越来越想记录下此刻我的小努力。因此就有了现在这个小小的记录点。
单片机的学习必须要动手,我现在还在最最最最最初级的阶段,但我对自己充满信心,我希望可以用这一篇篇的学习记录铺垫出我每次的进步。
书山有路勤为径,学海无涯苦作舟。一分耕耘,一份收获。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值