搜索
您的当前位置:首页数码管1

数码管1

来源:爱问旅游网
单个共阳数码管静态显示

内容:通过赋值给P1,让数码管显示特定的字符或者数字

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 void main (void) {

P1=0xc0; //二进制 为 1100 0000 参考数码管排列,

//可以得出0对应的段点亮,1对应的段熄灭,结果显示数字\"0\"

while(1) { } }

单个共阳数码管动态显示变化数字

内容:通过循环赋值给P1,让数码管显示特定的字符或者数字

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; // 显示数值表0-9 void Delay(unsigned int t); void main (void) {

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 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 void Delay(unsigned int t); void main (void) {

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 //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; //位锁存 main() {

while(1) {

DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110 LATCH2=1; //位锁存 LATCH2=0;

DataPort=0x4F; //取显示数据,段码 “3”共阴字符码 LATCH1=1; //段锁存 LATCH1=0; } }

8位数码管显示其中之二

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2; //定义锁存使能端口 段锁存 sbit LATCH2=P2^3; // 位锁存 main() {

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;iDataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;

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;iDataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;

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;iDataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;

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;iDataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;

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;iDataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0;

Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影 } }

因篇幅问题不能全部显示,请点此查看更多更全内容

Top