文章目录 一.数码管显示6个9 二.头尾显示7 三.轮播0-9 四.中间轮播数字 五.顺序显示1-6 六.闪烁显示0-5 七 显示12.13.14 一.数码管显示6个9 1.1代码 # include <reg52.h> // 头文件 // 定义锁存器控制引脚(与你的截图完全一致) sbit dula= P3^ 4 ; // 锁存器U2(段选) sbit wela= P1^ 6 ; // 锁存器U2(位选) // 主函数 void main ( ) { // 1. 位选控制:保持不变,选中全部6个数码管 wela= 1 ; // 打开位选锁存 P0= 0xC0 ; // 6个位全选 wela= 0 ; // 关闭位选锁存 // 2. 段选控制:显示数字 9 dula= 1 ; // 打开段选锁存 P0= 0x6F ; // 【只改这里】数字9的段码 dula= 0 ; // 关闭段选锁存 // 3. 保持显示 while ( 1 ) ; } 1.2 效果图
二.头尾显示7 2.1代码 # include <reg52.h> // 头文件 // 定义锁存器控制引脚(与你的截图完全一致) sbit dula= P3^ 4 ; // 锁存器U2(段选) sbit wela= P1^ 6 ; // 锁存器U2(位选) // 主函数 void main ( ) { // 1. 位选控制:保持不变,选中全部6个数码管 wela= 1 ; // 打开位选锁存 P0= 0xDE ; // 6个位全选 wela= 0 ; // 关闭位选锁存 // 2. 段选控制:显示数字 9 dula= 1 ; // 打开段选锁存 P0= 0x07 ; // 【只改这里】数字9的段码 dula= 0 ; // 关闭段选锁存 // 3. 保持显示 while ( 1 ) ; } 2.2效果图
三.轮播0-9 3.1代码 # include <reg52.h> // 头文件 # define uchar unsigned char # define uint unsigned int // 定义锁存器控制引脚 sbit dula= P3^ 4 ; // 锁存器U2(段选) sbit wela= P1^ 6 ; // 锁存器U3(位选) // 共阴极数码管段码表 uchar code seg_code[ ] = { 0x3F , // 0 0x06 , // 1 0x5B , // 2 0x4F , // 3 0x66 , // 4 0x6D , // 5 0x7D , // 6 0x07 , // 7 0x7F , // 8 0x6F // 9 } ; // 延时函数 void delay ( uint ms) { uint i, j; for ( i= ms; i> 0 ; i-- ) for ( j= 110 ; j> 0 ; j-- ) ; } // 数码管展示函数 void display_digit ( uchar digit) { P0= seg_code[ digit] ; // 发送数字对应的段码 dula= 1 ; // 打开段选 delay ( 500 ) ; // 稳定信号 dula= 0 ; // 关闭段选 } // 主函数 void main ( ) { uchar digit; while ( 1 ) { // 1.位选控制 wela= 1 ; // 打开位选 P0= 0xC0 ; // 位选6个数码管 1100 0000 wela= 0 ; // 关闭位选 // 2.段选控制 for ( digit= 0 ; digit< 10 ; digit++ ) // 轮流显示0到9 { display_digit ( digit) ; } } } 3.2效果图
四.中间轮播数字 4.1代码 # include <reg52.h> // 头文件 # define uchar unsigned char # define uint unsigned int // 定义锁存器控制引脚 sbit dula= P3^ 4 ; // 锁存器U2(段选) sbit wela= P1^ 6 ; // 锁存器U3(位选) // 共阴极数码管段码表 uchar code seg_code[ ] = { 0x3F , // 0 0x06 , // 1 0x5B , // 2 0x4F , // 3 0x66 , // 4 0x6D , // 5 0x7D , // 6 0x07 , // 7 0x7F , // 8 0x6F // 9 } ; // 延时函数 void delay ( uint ms) { uint i, j; for ( i= ms; i> 0 ; i-- ) for ( j= 110 ; j> 0 ; j-- ) ; } // 数码管展示函数 void display_digit ( uchar digit) { P0= seg_code[ digit] ; // 发送数字对应的段码 dula= 1 ; // 打开段选 delay ( 500 ) ; // 稳定信号 dula= 0 ; // 关闭段选 } // 主函数 void main ( ) { uchar digit; while ( 1 ) { // 1.位选控制 wela= 1 ; // 打开位选 P0= 0xF3 ; // wela= 0 ; // 关闭位选 // 2.段选控制 for ( digit= 0 ; digit< 10 ; digit++ ) // 轮流显示0到9 { display_digit ( digit) ; } } } 4.2效果图
五.顺序显示1-6 5.1代码 # include <reg52.h> // 头文件 # define uchar unsigned char # define uint unsigned int // 定义锁存器控制引脚 sbit dula= P3^ 4 ; // 段选锁存器U2 sbit wela= P1^ 6 ; // 位选锁存器U3 // 数码管的段码表(定义0-9的段码) uchar code TableDula[ ] = { 0x3F , // 0 0x06 , // 1 0x5B , // 2 0x4F , // 3 0x66 , // 4 0x6D , // 5 0x7D , // 6 0x07 , // 7 0x7F , // 8 0x6F // 9 } ; // 数码管显示位码,对应第1到第6个数码管 uchar code TableWela[ ] = { 0xFE , // 第1位 0xFD , // 第2位 0xFB , // 第3位 0xF7 , // 第4位 0xEF , // 第5位 0xDF // 第6位 } ; // 延时函数 void delay ( uchar x) { uchar j; while ( x-- ) { for ( j= 0 ; j< 125 ; j++ ) ; } } // 主函数 void main ( ) { uchar i; while ( 1 ) { for ( i= 0 ; i< 6 ; i++ ) { // 送位码,选中第i位数码管 P0= TableWela[ i] ; wela= 1 ; wela= 0 ; // 送段码:显示 1 2 3 4 5 6 P0= TableDula[ i+ 1 ] ; // 这里 +1 就从1开始显示 dula= 1 ; dula= 0 ; delay ( 2 ) ; } } } 5.2效果图
六.闪烁显示0-5 6.1代码 # include <reg52.h> // 头文件 # define uchar unsigned char # define uint unsigned int // 定义锁存器控制引脚 sbit dula= P3^ 4 ; // 段选锁存器U2 sbit wela= P1^ 6 ; // 位选锁存器U3 // 数码管的段码表(定义0-9的段码) uchar code TableDula[ ] = { 0x3F , // 0 0x06 , // 1 0x5B , // 2 0x4F , // 3 0x66 , // 4 0x6D , // 5 0x7D , // 6 0x07 , // 7 0x7F , // 8 0x6F // 9 } ; // 数码管显示位码,对应第1到第6个数码管 uchar code TableWela[ ] = { 0xFE , // 第1位 0xFD , // 第2位 0xFB , // 第3位 0xF7 , // 第4位 0xEF , // 第5位 0xDF // 第6位 } ; // 延时函数 void delay ( uchar x) { uchar j; while ( x-- ) { for ( j= 0 ; j< 125 ; j++ ) ; } } // 主函数 void main ( ) { uchar i; while ( 1 ) { for ( i= 0 ; i< 6 ; i++ ) { P0= 0x00 ; dula= 0 ; wela= 0 ; P0= TableWela[ i] ; wela= 1 ; wela= 0 ; P0= TableDula[ i] ; dula= 1 ; dula= 0 ; delay ( 500 ) ; // 👈 只改这里:2 → 500 } } } 6.2效果图
七 显示12.13.14 7.1代码 # include <reg52.h> # define uchar unsigned char # define uint unsigned int sbit dula= P3^ 4 ; // 段选锁存器 sbit wela= P1^ 6 ; // 位选锁存器 // 数码管的段码表(0~9) uchar code TableDula[ ] = { 0x3F , // 0 0x06 , // 1 0x5B , // 2 0x4F , // 3 0x66 , // 4 0x6D , // 5 0x7D , // 6 0x07 , // 7 0x7F , // 8 0x6F // 9 } ; // 数码管段码表(0~9,带小数点) uchar code TableDulaPoint[ ] = { 0xBF , // 0. 0x86 , // 1. 0xDB , // 2. 0xCF , // 3. 0xE6 , // 4. 0xED , // 5. 0xFD , // 6. 0x87 , // 7. 0xFF , // 8. 0xEF // 9. } ; // 数码管显示位码,对应第1到第6个数码管 uchar code TableWela[ ] = { 0xfe , // 第1位 0xfd , // 第2位 0xfb , // 第3位 0xf7 , // 第4位 0xef , // 第5位 0xdf // 第6位 } ; // 延时函数 void delay ( uchar x) { uchar j; while ( x-- ) { for ( j= 0 ; j< 125 ; j++ ) ; } } void main ( ) { uchar i; // ====================== 这里改成 13.14.15 ====================== uchar displayData[ 6 ] = { 1 , 3 , 1 , 4 , 1 , 5 } ; uchar pointFlag[ 6 ] = { 0 , 1 , 0 , 1 , 0 , 0 } ; // ============================================================== while ( 1 ) { for ( i= 0 ; i< 6 ; i++ ) { P0= 0x00 ; dula= 0 ; wela= 0 ; P0= TableWela[ i] ; wela= 1 ; wela= 0 ; if ( pointFlag[ i] == 1 ) { P0= TableDulaPoint[ displayData[ i] ] ; } else { P0= TableDula[ displayData[ i] ] ; } dula= 1 ; dula= 0 ; delay ( 2 ) ; } } } 7.2效果图