单片机数码管C程序_第1页
单片机数码管C程序_第2页
单片机数码管C程序_第3页
单片机数码管C程序_第4页
单片机数码管C程序_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/*-名称:单个共阳数码管静态显示论坛:编写:shifang日期:2009.5修改:无内容:通过赋值给P1,让数码管显示特定的字符或者数字-*/#include<reg52.h> /包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义void main (void) P1=0xc0; /二进制为 1100 0000 参考数码管排列,/可以得出0对应的段点亮,1对应的段熄灭,结果显示数字"0" while(1) /*-名称:单个共阳数码管动态显示变化数字论坛:编写:shifang日期:2009.5修改:无内容:通过循环赋值给P1,让数码管显示特定的字符

2、或者数字-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义unsigned char code dofly_table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,; / 显示数值表0-9void Delay(unsigned int t); /函数声明/*-主函数-*/void main (void)unsigned char i; /定义一个无符号字符型局部变量 i 取值范围 0255while (1) /主循环 for(i=0;i<10;i+) /加入 f

3、or循环,表明for循环大括号中的程序循环执行10次 P1=dofly_tablei; /循环调用表中的数值 Delay(60000); /延时,方便观看数字变化 /主循环中添加其他需要一直工作的程序 /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*-名称:单个共阳数码管模拟水流论坛:编写:shifang日期:2009.5修改:无内容:通过循环赋值给P1,让数码管显示特定流动样式-*/#include<reg5

4、2.h> /包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义void Delay(unsigned int t); /函数声明/*-主函数-*/void main (void)unsigned char i; /定义一个无符号字符型局部变量 i 取值范围 0255while (1) /主循环 P1=0xfe; for(i=0;i<6;i+) /加入 for循环,表明for循环大括号中的程序循环执行6次 Delay(10000); P1<<=1; P1|=0x01; /主循环中添加其他需要一直工作的程序 /*-延时函数,含有输入参数 unsigned in

5、t t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*-名称:单个共阳数码管动态显示变化数字论坛:编写:shifang日期:2009.5修改:无内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变-*/#include<reg52.h> /包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义unsigned char code dofly_table10=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,

6、0xf8,0x80,0x90,; / 显示数值表0-9/*-主函数-*/void main (void)while (1) /主循环 switch(P3) /P3口作为独立按键输入端,检测端口电平并做如下判断 case 0xfe:P1=dofly_table1;break;/0xfe = 1111 1110,/说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P1=dofly_table2;break;/调用表中的第三个/元素 0xa4 下标 0 才表示数组中的第一个元素case 0xfb:P1=dofly_table3;break;case 0xf7:P1=d

7、ofly_table4;break;case 0xef:P1=dofly_table5;break;case 0xdf:P1=dofly_table6;break;case 0xbf:P1=dofly_table7;break;case 0x7f:P1=dofly_table8;break;default:break; /如果都没按下,直接跳出 /主循环中添加其他需要一直工作的程序 /*-名称:单个共阳数码管指示逻辑电平论坛:编写:shifang日期:2009.5修改:无内容:通过循环检测P3.2口电平输入值,然后用数码管输出"H" or "L",表示该

8、端口现在连接的是高电平还是低电平-*/#include<reg52.h> /包含头文件,一般情况不需要改动, /头文件包含特殊功能寄存器的定义sbit IO_IN=P32; /定义IO 信号输入端/*-主函数-*/void main (void)while (1) /主循环 if(IO_IN=1)/如果端口检测到1表示高电平 P1=0x89; /"H" else P1=0xc7; /"L" /否则表示低电平,这里使用条件语句 if 。else 。 /主循环中添加其他需要一直工作的程序 /*-名称:8位数码管显示其中之一论坛:编写:shifan

9、g日期:2009.5修改:无内容:显示8位数码管中任意一位-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存/*-主函数-*/main() while(1) DataPort=0xfe; /取位码第一位数码管选通,即二进制1111 1110 LATCH2=1; /位锁存 LATCH2=0; DataPort=0x4F; /取显示数据,段

10、码“3”共阴字符码 LATCH1=1; /段锁存 LATCH1=0; /*-名称:8位数码管显示其中之二论坛:编写:shifang日期:2009.5修改:无内容:显示8位数码管中任意二位-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存/*-主函数-*/main() while(1) DataPort=0x7e; /取位码第一位数码管选

11、通,即二进制0111 1110 LATCH2=1; /位锁存 LATCH2=0; DataPort=0x4F; /取显示数据,段码“3”共阴字符码 LATCH1=1; /段锁存 LATCH1=0; /*-名称:8位数码管动态扫描显示论坛:编写:shifang日期:2009.5修改:无内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁

12、存使能端口段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值01234567unsigned 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=

13、dofly_WeiMai; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=dofly_DuanMai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); /扫描间隙延时,时间太长会闪烁,太短会造成重影 i+; if(8=i) /检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/

14、*-名称:8位数码管动态扫描显示论坛:编写:shifang日期:2009.5修改:无内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07

15、,0x7f,0x6f;/ 显示段码值01234567unsigned 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_WeiMai; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=dofly_DuanMai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=

16、0; Delay(60000); / 扫描间隙延时,时间太长会闪烁,太短会造成重影, /这里故意延长时间,方便直观看出动态扫描原理 i+; if(8=i) /检测8位扫描完全结束?如扫描完成则从第一个 /开始再次扫描8位 i=0; /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*-名称:8位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:8位数码管分别显示不同数字,这种扫描显示方式

17、成为动态扫描,并不停变化赋值-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/ 显示段码值0Funsigned

18、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_WeiMai; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=dofly_DuanManum+i; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(20

19、0); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 i+;j+; if(8=i) /检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位 i=0; if(j=500) /检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化 j=0; num+; if(num=9) num=0; /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*-名称:1位数码管动态扫描显示变化数据论坛:编写:shifan

20、g日期:2009.5修改:无内容:1位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值

21、09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量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) /检测当前数值显示了一小

22、段时间后, /需要显示的数值加1,实现数据显示的变化 j=0; num+; if(num=10)/用于显示09 num=0; TempData0=dofly_DuanManum%10;/分解显示信息,/如要显示68,则68/10=6 68%10=8 Display(2,1); /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*-显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从

23、第三个数码管开始显示如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;i<Num;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=

24、1; /段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁, /太短会造成重影 /*-名称:2位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:2位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存u

25、nsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量void Delay(unsigned int t); /函数声明void Display(unsigned char FirstBit,unsigned char N

26、um);/*-主函数-*/main() unsigned char num; unsigned int j; while(1) j+; if(j=500) /检测当前数值显示了一小段时间后, /需要显示的数值加1,实现数据显示的变化 j=0; num+; if(num=100)/用于显示099 num=0; TempData0=dofly_DuanManum/10;/分解显示信息, /如要显示68,则68/10=6 68%10=8 TempData1=dofly_DuanManum%10; Display(2,2); /*-延时函数,含有输入参数 unsigned int t,无返回值 uns

27、igned int 是定义无符号整形变量,其值的范围是 065535-*/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<Num;i+) DataPort=0; /清空数据,防止有交替重影 L

28、ATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁, /太短会造成重影 /*-名称:多位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值-*/#include<reg52.h> /包含头文件,

29、一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,

30、即位码unsigned char TempData8; /存储显示值的全局变量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)/用于显示0999 num=0; TempData0=dofly_DuanMan

31、um/100;/分解显示信息,如要显示68,则68/10=6 68%10=8 TempData1=dofly_DuanMa(num%100)/10; TempData2=dofly_DuanMa(num%100)%10; Display(2,3); /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*-显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0

32、表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;i<Num;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1

33、=0; Delay(200); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 /*-名称:多位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值-*/#include<reg52.h> /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口段锁存sbit LATCH2=P23;/ 位锁存unsigned char cod

34、e dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量void Delay(unsigned int t); /函数声明void Display(unsigned char FirstBit,unsigned char Num);/*-主函数-*/mai

35、n() unsigned int num; unsigned int j; while(1) j+; if(j=10) /检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化 j=0; num+; if(num=10000)/用于显示09999 num=0; TempData0=dofly_DuanManum/1000;/分解显示信息,如要显示68,则68/10=6 68%10=8 TempData1=dofly_DuanMa(num%1000)/100; TempData2=dofly_DuanMa(num%1000)%100)/10; TempData3=dofly_Du

36、anMa(num%1000)%100)%10; Display(2,4); /*-延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/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<Num;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 /*-名称:1位数码管动态扫描显

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论