文章目录 1. 显示6个9 2. 点亮第一和第6位 3. 6位数码管轮播 4. 3,4位数码管轮播 5.显示123456 6.显示带小数点 1. 显示6个9 1.1效果图
1.2 代码 # include <reg52.h> // 头文件 // 定义锁存器控制引脚 sbit dula= P3^ 4 ; // 锁存器U2(段选) sbit wela= P1^ 6 ; // 锁存器U2(位选) // 主函数 void main ( ) { // 1.位选控制 wela= 1 ; // 打开位选 P0= 0xC0 ; // 位选6个数码管 //P0=0xf8; // 位选3个数码管 1111 1000 wela= 0 ; // 关闭位选 // 2.段选控制 dula= 1 ; // 打开段选 P0= 0x6F ; // 数码管显示“9” //P0=0x3f; // 数码管显示“0” 0011 1111 dula= 0 ; // 关闭段选 // 3.保持 while ( 1 ) ; } 2. 点亮第一和第6位 2.1 效果图
2.2 代码:仅修改位选数码管 P0= 0xDE ; 3. 6位数码管轮播 3.1效果图
3.2 代码 # 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 ( 5 ) ; // 稳定信号 dula= 0 ; // 关闭段选 } // 主函数 void main ( ) { uchar digit; while ( 1 ) { // 1.位选控制:6个数码管全部点亮(共阴) wela= 1 ; P0= 0xC0 ; // 修正:共阴6位选中 0011 1111 wela= 0 ; // 2.段选控制:循环显示0~9 for ( digit= 0 ; digit< 10 ; digit++ ) { display_digit ( digit) ; // 显示当前数字 delay ( 500 ) ; // 停500ms,看得清变化 } } } 4. 3,4位数码管轮播 4.1 效果图
4.2 代码 仅修改位选数码管 P0= 0xF3 ; 5.显示123456 5.1效果图
5.2 代码 # 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 , 0xFD , 0xFB , 0xF7 , 0xEF , 0xDF } ; // 延时函数 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+ 1 ] ; //只改这一行 dula= 1 ; dula= 0 ; delay ( 2 ) ; } } } 6.显示带小数点 6.1效果图
6.2代码 # 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. => 10111111 0x86 , // 1. => 10000110 0xDB , // 2. => 11011011 0xCF , // 3. => 11001111 0xE6 , // 4. => 11100110 0xED , // 5. => 11101101 0xFD , // 6. => 11111101 0x87 , // 7. => 10000111 0xFF , // 8. => 11111111 0xEF // 9. => 11101111 } ; // 数码管显示位码,对应第1到第6个数码管 uchar code TableWela[ ] = { 0xfe , // 1111 1110 -> 第1位(P0.0 置低,其它为高)=> 选中第1位数码管 0xfd , // 1111 1101 -> 第2位(P0.1 置低)=> 选中第2位数码管 0xfb , // 1111 1011 -> 第3位(P0.2 置低)=> 选中第3位数码管 0xf7 , // 1111 0111 -> 第4位(P0.3 置低)=> 选中第4位数码管 0xef , // 1110 1111 -> 第5位(P0.4 置低)=> 选中第5位数码管 0xdf // 1101 1111 -> 第6位(P0.5 置低)=> 选中第6位数码管 } ; // 延时函数 void delay ( uchar x) { uchar j; while ( x-- ) { for ( j= 0 ; j< 125 ; j++ ) ; } } void main ( ) { uchar i; // 显示数据:对应的数字内容 1,3,1,4,1,5 uchar displayData[ 6 ] = { 1 , 3 , 1 , 4 , 1 , 5 } ; // 小数点标志位:1表示该位需要小数点 uchar pointFlag[ 6 ] = { 0 , 1 , 0 , 1 , 0 , 0 } ; // 第2位和第4位显示带小数点 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 ) ; // 稍作延时 } } }