学习C51单片机——动态数码管显示(学习笔记Keil5)
1、延时函数
延时100ms
void Delay100ms(void) //@12.000MHz
{
unsigned char data i, j;
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
2、数码管动态显示
按顺序在8个数码管上显示0到7
#include <REGX52.H>
#include "INTRINS.H" //此文件中定义了_nop_语句
void Delay100ms(void) //@12.000MHz
{
unsigned char data i, j;
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
unsigned char shuzi[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//数码管段码表,显示数字0~9
void weizhi(unsigned char i,number)
{
switch(i)//位选
{
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=shuzi[number]; //段选
}
void main()
{
while(1)
{
weizhi(1,0); //在数码管的第1位置显示0
Delay100ms();
P0=0x00;
weizhi(2,1); //在数码管的第2位置显示1
Delay100ms();
P0=0x00;
weizhi(3,2); //在数码管的第3位置显示2
Delay100ms();
P0=0x00;
weizhi(4,3); //在数码管的第4位置显示3
Delay100ms();
P0=0x00;
weizhi(5,4); //在数码管的第5位置显示4
Delay100ms();
P0=0x00;
weizhi(6,5); //在数码管的第6位置显示5
Delay100ms();
P0=0x00;
weizhi(7,6); //在数码管的第7位置显示6
Delay100ms();
P0=0x00;
weizhi(8,7); //在数码管的第8位置显示7
Delay100ms();
P0=0x00;
}
}