/******************************************************************** * 文件名 : 数码管显示.c * 描述 : 该程序为单位数码管静态显示程序。 程序实现了单个数码管的显示。每隔0.5秒依次显示:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f. ***********************************************************************/ #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}; /******************************************************************** * 名称 : 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 = table[i % 16]; //在这里取 i 的个位数,不带点显示 i++; Delay(50); //延时0.5秒后显示下一个数 } }
/******************************************************************** * 文件名 : 数码管显示.c * 描述 : 该程序为数码管静态显示程序。 两位数码管进行自加显示 ***********************************************************************/ #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}; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { uint i = 0,j; while(1) { for(j=0;j<100;j++) { P0 = 0; //消隐 P2 = 6; //第6位数码管显示 P0 = table[(i / 10)%10]; //在这里取 i 的个位数 Delay_1ms(3); //延时3毫秒后显示下一个数 P0 = 0; //消隐 P2 = 7; //第7位数码管显示 P0 = table[i % 10]; //在这里取 i 的个位数 Delay_1ms(3); //延时3毫秒后显示下一个数 } i++; } }
/******************************************************************** * 文件名 : 数码管显示.c * 描述 : 该程序为数码管静态显示程序。 三位数码管进行自加显示。0--999 * 杜邦线接法:用8针排线把P0口和J12的1-8连接(P0.0接J12的1端)。 用单排针P2.0接J13的8端,P2.1接J13的7端。P2.2接J13的6端。 ***********************************************************************/ #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}; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay_1ms(uint i)//1ms延时 { uchar x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { uint i = 0,j; while(1) { for(j=0;j<10;j++) { P0 = 0; //消隐 P2 = 5; //第6位数码管显示 P0 = table[(i / 100)%10]; //在这里取 i 的百位数 Delay_1ms(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 6; //第7位数码管显示 P0 = table[(i / 10)%10]; //在这里取 i 的十位数 Delay_1ms(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 7; //第8位数码管显示 P0 = table[i % 10]; //在这里取 i 的个位数 Delay_1ms(3); //延时0.5秒后显示下一个数 } i++; } }
/******************************************************************** * 文件名 : 数码管字符显示.c * 描述 : 这个代码可以实现数码管的字符显示。 这个是数码管的一个扩展实验,可以让数码管显示一些简单的字符。 这里实验中,我们在数码管的右边5位,现实了“HELLO ***********************************************************************/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int //uchar code table[8] = {0x00,0x00,0x00,0x00,0x73,0x77,0x6d,0x6d}; //显示PASS编码 uchar code table[8] = {0x00,0x00,0x00,0x76,0x79,0x38,0x38,0x3f}; //显示HELL0编码 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) { uchar i; while(1) { for(i=0;i<8;i++) { P0 = 0; //消隐 P2 = i; //点亮某一位数码管 P0 = table[i]; //数码管段值 Delay(2); } } }
/******************************************************************** * 文件名 : 动态显示.c * 描述 : 在数码管上的每位每个0.3秒,显示7,6,5,4,3,2,1,0. 如果按下S19不放(独立按键左边的那个),这时,数码管段选被锁存, 这个时候,虽然代码在改变段选的值,但是,我们看到数码管上的值是不变的。 ***********************************************************************/ #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}; sbit KEY1 = P3^2; sbit LOCKDuan = P3^7; /******************************************************************** * 名称 : 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++) { //每位数码管依次闪烁 P2 = i; //选择哪一位数码管点亮 P0 = table[i]; //赋值段码给P0口 Delay(300); //延时0.3秒 if(KEY1 == 0) //按下S19,这时数码管段选锁存 { LOCKDuan = 0; //给74HC573段选芯片锁存端口赋值低电平 } else { LOCKDuan = 1; } } } }
/******************************************************************** * 文件名 : 数码管显示.c * 描述 : 在最右端的三位数码管显示倒计时。 到计时到0时,三个数码管一起闪烁。 ***********************************************************************/ #include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar i=200; //数码管的段码编码 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_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 输出 : 无 ***********************************************************************/ void Delay(uint i) { uint x,j; for(j=0;j<i;j++) for(x=0;x<=148;x++); } /******************************************************************** * 名称 : DisLED(void) * 功能 : 三位数码管显示,一共消耗了9毫秒 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void DisLED(void) { P0 = 0; //消隐 P2 = 5; //第6位数码管显示 P0 = table[(i / 100)%10]; //在这里取 i 的百位数 Delay(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 6; //第7位数码管显示 P0 = table_d[(i / 10)%10]; //在这里取 i 的十位数 Delay(3); //延时0.5秒后显示下一个数 P0 = 0; //消隐 P2 = 7; //第8位数码管显示 P0 = table[i % 10]; //在这里取 i 的个位数 Delay(4); //延时0.5秒后显示下一个数 } /******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void main() { uchar j; while(1) { if(i != 0) //i不等于0,那么 进行数码管的显示,10* 10=100毫秒 { for(j=0;j<10;j++) { DisLED(); //调用数码管显示代码 } i--; } else { for(j=0;j<8;j++) { DisLED(); //数码管显示 } P0 = 0x00; //数码管不显示 Delay(200); } } }