内容:通过赋值给P1,让数码管显示特定的字符或者数字
#include P1=0xc0; //二进制 为 1100 0000 参考数码管排列, //可以得出0对应的段点亮,1对应的段熄灭,结果显示数字\"0\" while(1) { } } 单个共阳数码管动态显示变化数字 内容:通过循环赋值给P1,让数码管显示特定的字符或者数字 #include unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 while (1) //主循环 { for(i=0;i<10;i++) //加入 for循环,表明for循环大括号中的程序循环执行10次 { P1=dofly_table[i]; //循环调用表中的数值 Delay(60000); //延时,方便观看数字变化 } //主循环中添加其他需要一直工作的程序 } } void Delay(unsigned int t) { while(--t); } 单个共阳数码管模拟水流 内容:通过循环赋值给P1,让数码管显示特定流动样式 #include unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 while (1) //主循环 { P1=0xfe; for(i=0;i<6;i++) //加入 for循环,表明for循环大括号中的程序循环执行6次 { Delay(10000); P1<<=1; P1|=0x01; } //主循环中添加其他需要一直工作的程序 } } void Delay(unsigned int t) { while(--t); } 单个共阳数码管动态显示变化数字 内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变 #include unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; // 显示数值表0-9 void main (void) { while (1) //主循环 { switch(P3) //P3口作为独立按键输入端,检测端口电平并做如下判断 { case 0xfe:P1=dofly_table[1];break;//0xfe = 1111 1110, //说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环 case 0xfd:P1=dofly_table[2];break;//调用表中的第三个 //元素 0xa4 下标 0 才表示数组中的第一个元素 case 0xfb:P1=dofly_table[3];break; case 0xf7:P1=dofly_table[4];break; case 0xef:P1=dofly_table[5];break; case 0xdf:P1=dofly_table[6];break; case 0xbf:P1=dofly_table[7];break; case 0x7f:P1=dofly_table[8];break; default:break; //如果都没按下,直接跳出 } //主循环中添加其他需要一直工作的程序 } } 单个共阳数码管指示逻辑电平 内容:通过循环检测P3.2口电平输入值,然后用数码管输出\"H\" or \"L\",表示该端口现在连 接的是高电平还是低电平 #include sbit IO_IN=P3^2; //定义IO 信号输入端 void main (void) { while (1) //主循环 { if(IO_IN==1) //如果端口检测到1表示高电平 P1=0x89; //\"H\" else P1=0xc7; //\"L\" 否则表示低电平,这里使用 条件语句 if 。。。else 。。。 //主循环中添加其他需要一直工作的程序 } } 8位数码管显示其中之一 #include while(1) { DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110 LATCH2=1; //位锁存 LATCH2=0; DataPort=0x4F; //取显示数据,段码 “3”共阴字符码 LATCH1=1; //段锁存 LATCH1=0; } } 8位数码管显示其中之二 #include while(1) { DataPort=0x7e; //取位码 第一位数码管选通,即二进制0111 1110 LATCH2=1; //位锁存 LATCH2=0; DataPort=0x4F; //取显示数据,段码 “3”共阴字符码 LATCH1=1; //段锁存 LATCH1=0; } } 8位数码管动态扫描显示 内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //显示段码值01234567 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 void Delay(unsigned int t); main() { unsigned char i=0; while(1) { DataPort=dofly_WeiMa[i]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=dofly_DuanMa[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); //扫描间隙延时,时间太长会闪烁,太短会造成重影 } } void Delay(unsigned int t) { while(--t); } i++; if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; 8位数码管动态扫描显示 内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值01234567 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 void Delay(unsigned int t); main() { unsigned char i=0; while(1) { DataPort=dofly_WeiMa[i]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=dofly_DuanMa[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(60000); //扫描间隙延时,时间太长会闪烁,太短会造成重影, //这里故意延长时间,方便直观看出动态扫描原理 i++; if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; } } void Delay(unsigned int t) { while(--t); } 8位数码管动态扫描显示变化数据 内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsignedcharcodedofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77, 0x7c,0x39,0x5e,0x79,0x71}; // 显示段码值0~F unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 void Delay(unsigned int t); main() { unsigned char i=0,num; unsigned int j; while(1) { DataPort=dofly_WeiMa[i]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=dofly_DuanMa[num+i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 i++;j++; if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; if(j==500)//检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化{ j=0; num++; if(num==9) num=0; } } } void Delay(unsigned int t) { while(--t); } 1位数码管动态扫描显示变化数据 内容:1位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsignedchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void Delay(unsigned int t); void Display(unsigned char FirstBit,unsigned char Num); main() { unsigned char num; unsigned int j; while(1) { j++; if(j==500)//检测当前数值显示了一小段时间后需要显示的数值加1,实现数据显示的变化 { j=0; num++; if(num==10) //用于显示0~9 num=0; } TempData[0]=dofly_DuanMa[num%10]; //分解显示信息,如要显示68,则68/10=6 68%10=8 Display(2,1); } } void Delay(unsigned int t) { while(--t); } /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表 示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i; for(i=0;i DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } } 2位数码管动态扫描显示变化数据 内容:2位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; // 位锁存 unsignedchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void Delay(unsigned int t); //函数声明 void Display(unsigned char FirstBit,unsigned char Num); main() { unsigned char num; unsigned int j; while(1) { j++; if(j==500) //检测当前数值显示了一小段时间后需要显示的数值加1,实现数据显示的变化 { j=0; num++; if(num==100) //用于显示0~99 num=0; } TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[1]=dofly_DuanMa[num%10]; Display(2,2); } } void Delay(unsigned int t) { while(--t); } /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示 从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i; for(i=0;i DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } } 多位数码管动态扫描显示变化数据 内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsignedchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void Delay(unsigned int t); void Display(unsigned char FirstBit,unsigned char Num); main() { unsigned int num; unsigned int j; while(1) { j++; if(j==200) //检测当前数值显示了一小段时间后需要显示的数值加1,实现数据显示的变化 { j=0; num++; if(num==1000) //用于显示0~999 num=0; } TempData[0]=dofly_DuanMa[num/100];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[1]=dofly_DuanMa[(num%100)/10]; TempData[2]=dofly_DuanMa[(num%100)%10]; Display(2,3); } } void Delay(unsigned int t) { while(--t); } /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i; for(i=0;i DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } } 多位数码管动态扫描显示变化数据 内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 #include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsignedchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void Delay(unsigned int t); void Display(unsigned char FirstBit,unsigned char Num); main() { unsigned int num; unsigned int j; while(1) { j++; if(j==10) //检测当前数值显示了一小段时间后需要显示的数值加1,实现数据显示的变化 { j=0; num++; if(num==10000) //用于显示0~9999 num=0; } TempData[0]=dofly_DuanMa[num/1000];//分解显示信息,如要显示68,则68/10=6 68%10=8 TempData[1]=dofly_DuanMa[(num%1000)/100]; TempData[2]=dofly_DuanMa[((num%1000)%100)/10]; TempData[3]=dofly_DuanMa[((num%1000)%100)%10]; Display(2,4); } } void Delay(unsigned int t) { while(--t); } /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i; for(i=0;i DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } } 1位数码管动态扫描显示变化数据 内容:1位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值#include #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 unsignedchar code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 显示段码值0~9 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //分别对应相应的数码管点亮,即位码 unsigned char TempData[8]; //存储显示值的全局变量 void Delay(unsigned int t); void Display(unsigned char FirstBit,unsigned char Num); main() { unsigned char num=9; unsigned int j; while(1) { j++; if(j==500) //检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化 { j=0; if(num>0) //用于显示0~9 num--; else num=9; } TempData[0]=dofly_DuanMa[num%10];//分解显示信息,如要显示68,则68/10=6 68%10=8 Display(2,1); } } void Delay(unsigned int t) { while(--t); } /*------------------------------------------------ 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2 ------------------------------------------------*/ void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i; for(i=0;i DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } } 因篇幅问题不能全部显示,请点此查看更多更全内容