/*************************一位共阴数码管静态显示************************************
* 文件名 : 数码管显示.c
* 描述 : 该程序为数码管静态显示程序。
程序实现了最右边数码管的显示一个5,大家可以在程序中修改相应的值而在数码管上显示相应的数字。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchar table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar i = 0;
P2 = 7; //通过74HC138来控制数码管的位选,P2=0或1,2,3,4,5,6,7点亮相应的数码管
P0 = table[5]; //显示5,大家可以修改里面的数据。
while(1)
{
}
}
/**************************一位数码管静态显示(带小数点)*************************************
* 文件名 : 数码管显示.c
* 描述 : 该程序为数码管静态显示程序。
程序实现了最右边数码管的显示一个5,大家可以在程序中修改相应的值而在数码管上显示相应的数字。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchar table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar i = 0;
P2 = 7; //数码管的最后一位显示
P0 = table_d[5]; //显示5,大家可以修改里面的数据。
while(1)
{
}
}
/********************************************************************
* 描述 : 用单个数码管来模拟流水灯。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//数码管的段码编码
uchar table[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//下一行的数组可以显示数值外,还可以显示数码管的点
uchar table_d[16] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1};
/********************************************************************
* 名称 : Delay()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay(uint del)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++)
;
}
/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
uchar i = 0;
P2 = 7;
while(1)
{
P0 = 0xfe;
for(i=0;i<8;i++)
{
Delay(20);
P0 = P0 << 1;
P0 = P0 | 0x01;
}
}
}
/********************************************************************
* 文件名 : 动态显示.c
* 描述 : 8位数码管低两位交替显示 “1,2”
这里是做一个动态的演示实验。
最开始,两个数码管闪烁间隔时间为150豪秒,每闪烁一次,
间隔时间减少2毫秒,当间隔时间小到一定程度的时候,
因为人的视觉暂留现象,就不会发现数码管在闪烁了。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i=100; //最大闪烁值为0.15秒
while(1)
{
P0 = 0; //这里让数码管每段不显示 ,这样可以取掉余晖。
P2 = 6; //点亮第二位数码管(从右往左数)
P0 = table[1]; // i 值的 个位数
Delay(i);
P0 = 0;
P2 = 7; //点亮第一位数码管
P0 = table[2]; // i 值的 个位数
Delay(i);
if(i!=2) //假如i没有减小到2,执行括号里的语句
{
i=i-2; //数码管每闪烁一次,i的值减2
}
}
}
/********************************************************************
* 文件名 : 动态显示.c
* 描述 : 8位数码管低两位分别显示 1,2
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
while(1)
{
P0 = 0; //消隐
P2 = 6; //点亮第二位数码管(从右往左数)
P0 = table[1]; // i 值的 个位数
Delay(3);
P0 = 0; //消隐
P2 = 7; //点亮第一位数码管
P0 = table[2]; // i 值的 个位数
Delay(3);
}
}
/********************************************************************
* 文件名 : 动态显示.c
* 描述 : 八位数码管依次显示0,1,2,3,4,5,6,7
这里是做一个动态的演示实验。
最开始,两个数码管闪烁间隔时间为50豪秒,每闪烁一次,
间隔时间减少1毫秒,当间隔时间小到一定程度的时候,
因为人的视觉暂留现象,就不会发现数码管在闪烁了。
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i,j=50;
while(1)
{
for(i=0;i<8;i++)
{
//每位数码管依次闪烁
P0 = 0; //消隐
P2 = i; //选择哪一位数码管点亮
P0 = table[i]; //赋值段码给P0口
Delay(j); //延时
}
if(j>=3) //当大于3毫秒的时,执行括号中的语句
{
j-=1; //延时时间自减1毫秒
}
}
}
/********************************************************************
* 文件名 : 动态显示.c
* 描述 : 八位数码管依次显示0,1,2,3,4,5,6,7
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P0 = 0;
P2 = i; //选择哪一位数码管点亮
P0 = table[i]; //赋值段码给P0口
Delay(2); //延时0.02秒
}
}
}
/********************************************************************
* 文件名 : 数码管滚动显示.c
* 描述 : 八个数码管显示0--7,每个0.5秒钟,数据从左往右移动一位
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i;
while(1)
{
for(i=0;i<8;i++)
{
P0 = table[5]; //数码管段值
P2 = i; //点亮某一位数码管
Delay(200);
}
}
}
/********************************************************************
* 文件名 : 数码管滚动显示.c
* 描述 : 八个数码管显示0--7,每个0.64秒钟,数据从左往右移动一位
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code LED_W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uint LED_temp = 0;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i,j;
while(1)
{ //j自加一次,在内层循环已经走了16毫秒
for(j=0;j<40;j++)
{
for(i=0;i<8;i++)
{
P0 = 0; //消隐
P2 = i; //点亮某一位数码管
P0 = table[(i - LED_temp) % 8]; //数码管段值
Delay(2); //延时0.02秒
}
}
LED_temp -=1; //LED_temp这个变量自减1
}
}
/********************************************************************
* 文件名 : 数码管滚动显示.c
* 描述 : 八个数码管显示0--7,每个0.64秒钟,数据从左往右移动一位
***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint LED_temp = 0;
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay(uint i)
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
/********************************************************************
* 名称 : Main()
* 功能 : 数码管的显示
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main(void)
{
uchar i,j;
while(1)
{
for(j=0;j<40;j++) //j自加一次,在内层循环已经走了16毫秒
{
for(i=0;i<8;i++)
{
P0 = 0; //消隐
P2 = i; //点亮某一位数码管
P0 = table[(i + LED_temp) % 8]; //数码管段值
Delay(2); //延时0.02秒
}
}
LED_temp +=1; //LED_temp 自加1
}
}