实验题目:使用51单片机实现动态数码管显示自己8位学号,例如20220018
在此原理图又分两种连接方式:
第一种是8位数码管接38译码器来减少端口使用。
第二种是,没有端口要求接好就可以那就是,把位选端接P3口,段选端接P0口,这样占用端口多,一般实验都是使用第一种接个38译码器。
所以我这里就拿第一种情况原理图写:
实验程序:
#include <REGX52.H>
//共阴数码管段码表0-9
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms) //延时子函数
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
//数码管显示子函数
void Nixie(unsigned char Location,Number)
//定义两个无符号字符型变量,location代表数码管的位置,number代表数码管显示的数字,Nixie是子函数名字;
{
switch(Location) //位码输出
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=NixieTable[Number]; //段码输出
Delay(1); //显示一段时间,延时1ms,消影,太长会闪烁太短会重影
P0=0x00; //段码清0,消影
}
void main()
{
while(1)
{
Nixie(1,8); //在数码管的第1位置显示2
Nixie(2,1); //在数码管的第2位置显示0
Nixie(3,0); //在数码管的第3位置显示2
Nixie(4,0); //在数码管的第4位置显示2
Nixie(5,2); //在数码管的第5位置显示0
Nixie(6,2); //在数码管的第6位置显示0
Nixie(7,0); //在数码管的第7位置显示1
Nixie(8,2); //在数码管的第8位置显示8
//他这个数码管位置是从右往左数,所以第一位是最右边的第一个。显示20220018
}
}
原理图:
文章来源:https://www.toymoban.com/news/detail-543011.html
文章来源地址https://www.toymoban.com/news/detail-543011.html
到了这里,关于51单片机动态数码管显示自己学号的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!