版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*/*/*/*卷器”呎51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:点亮P1口的一个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义sbitLED=P1A0;//用sbit关键字定义LED到P1.0端口,{//LED是自己任意定义且容易记忆的符号{/*主函数voidmain(void){*/〃此方法使用bit位对单个端口赋值LED=1;〃将P1.0口赋值1,对外输出高电平LED=0;〃将P1.0口赋值0,对外输出低电平while(1)〃主循环〃主循环中添加其他需要一直工作的程序}}2-IO输出-点亮1个LED灯方法2卷器”呎卷器”呎卷器”呎卷器”呎裁裁&W叶a名称:IO口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:点亮P1口的一个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义/*主函数*/voidmain(void){〃此方法使用1个字节对单个端口赋值P1=0xFF;//P1口全部为高电平,对应的LED灯全灭掉,〃ff换算成二进制是11111111P1=0xfe;//P1口的最低位点亮,可以更改数值是其他的灯点亮〃0xfe是16进制,0x开头表示16进制数,〃fe换算成二进制是11111110while(1)〃主循环{〃主循环中添加其他需要一直工作的程序}}3-IO输出-点亮多个LED灯方法1名称:论坛:编写:日期:IO口高低电平控制shifang2009.5修改:无内容:点亮P1口的多个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义sbitLEDO=PMO;〃用sbit关键字定义LED到P1.0端口,sbitLED1=P1A1;//LED是自己任意定义且容易记忆的符号sbitLED2=P1A2;sbitLED3=P1A3;sbitLED4=P1A4;sbitLED5=P1A5;sbitLED6=P1A6;sbitLED7=P1A7;/*主函数*/voidmain(void){〃此方法使用bit位对单个端口赋值LED0=0;//将P1.0口赋值0,对外输出低电平LED1=1;LED2=0;LED3=1;LED4=0;LED5=1;LED6=0;LED7=1;while(1)〃主循环{〃主循环中添加其他需要一直工作的程序}}4-IO输出-点亮多个LED灯方法2/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:点亮P1口的多个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义/*主函数*/voidmain(void){〃此方法使用bit位对单个端口赋值Pl=0x55;〃换成二进制是01010101while(1)〃主循环{〃主循环中添加其他需要一直工作的程序}}5-闪烁1个LED/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:点亮P1口的1个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义sbitLED0=P1A0;//用sbit关键字定义LED到P1.0端口,//LED是自己任意定义且容易记忆的符号voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){〃此方法使用bit位对单个端口赋值while(1)〃主循环LED0=0;Delay(10000);〃将P1.0口赋值0,对外输出低电平〃调用延时程序;更改延时数字可以更改延时长度;〃用于改变闪烁频率LED0=1;〃将P1.0口赋值1,对外输出高电平Delay(10000);〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}6-不同频率闪烁1个LED灯/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:点亮P1口的1个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义sbitLED0=PM0;〃用sbit关键字定义LED到P1.0端口,//LED是自己任意定义且容易记忆的符号裁裁&W叶a裁裁&W叶avoidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){〃此方法使用bit位对单个端口赋值unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255for(i=0;ivl0;i++){LED0=0;Delay(60000);LED0=1;for(i=0;ivl0;i++){LED0=0;Delay(60000);LED0=1;Delay(60000);}〃将P1.0口赋值0,对外输出低电平〃调用延时程序;更改延时数字可以更改延时长度;〃用于改变闪烁频率〃将P1.0口赋值1,对外输出高电平while(1)〃主循环{for(i=0;i<10;i++){LED0=0;Delay(5000);〃加入for循环,表明for循环大括号中的程序循环执行10次〃将P1.0口赋值0,对外输出低电平〃调用延时程序;更改延时数字可以更改延时长度;〃用于改变闪烁频率LED0=1;Delay(5000);〃将P1.0口赋值1,对外输出高电平}〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}7-不同频率闪烁多个LED灯/*名称:IO口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:点亮P1口的多个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbitLED0=P1A0;//用sbit关键字定义LED到P1.0端口,LED是自己任意定义且容易记忆的符号sbitLED1=P1A1;sbitLED2=P1A2;sbitLED3=PM3;sbitLED4=P1A4;sbitLED5=P1A5;sbitLED6=P1A6;sbitLED7=P1A7;voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){〃此方法使用bit位对单个端口赋值unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255while(1)〃主循环{for(i=0;iv10;i++)〃加入for循环,表明for循环大括号中{LED0=0;LED2=1;LED4=0;Delay(5000);〃的程序循环执行10次//将P1.0口赋值0,对外输出低电平〃调用延时程序;更改延时数字可以更改延时长度;〃用于改变闪烁频率LED0=1;LED2=0;LED4=1;//将P1.0口赋值1,对外输出高电平Delay(5000);for(i=0;ivl0;i++){LEDO=O;〃将P1.0口赋值0,对外输出低电平LED2=1;LED4=0;Delay(60000);〃调用延时程序;更改延时数字可以更改延时长度;〃用于改变闪烁频率LED0=1;〃将P1.0口赋值1,对外输出高电平LED2=0;LED4=1;Delay(60000);}〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}8-8位LED左移/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:左移,直至LED全部点亮,左移符号<<*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255Delay(50000);Pl=0xfe;〃赋初始值for(i=0;iv8;i++)〃加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;}while(1)〃主循环{〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}9-8位LED右移/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:右移,直至LED全部点亮,右移符号>>*/卷器”呎卷器”呎卷器”呎卷器”呎#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255Delay(50000);Pl=0x7f;〃赋初始值for(i=0;iv8;i++)〃加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1>>=1;}while(1)〃主循环{〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}10-LED循环左移/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:循环左移,始终一个led点亮,并循环执行流水动作,左移符号<<逻辑或符号I*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255Delay(50000);Pl=0xfe;〃赋初始值while(1)〃主循环{for(i=0;iv8;i++)〃加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;P1=P1I0x01;〃左移后,最右端自动赋值0,所以需要该语句赋值1}P1=0xfe;〃重新赋初始值〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}11-LED循环右移名称:io口高低电平控制论坛:
编写:shifang日期:2009.5修改:无内容:循环右移,始终一个led点亮,并循环执行流水动作,右移符号>>逻辑或符号I*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;Delay(50000);Pl=0x7f;while(1),{for(i=0;iv8;i++){Delay(50000);P1>>=1;P1=P1I0x80;unsignedchari;Delay(50000);Pl=0x7f;while(1),{for(i=0;iv8;i++){Delay(50000);P1>>=1;P1=P1I0x80;}P1=0x7f;〃定义一个无符号字符型局部变量i取值范围0〜255〃赋初始值〃主循环〃加入for循环,表明for循环大括号中的程序循环执行8次〃右移后,最左端自动赋值0,所以需要该语句赋值1〃重新赋初始值〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}12-查表显示LED灯裁裁&W叶a裁裁&W叶a}}}}/*名称:IO口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:通过查表获得1个字节的值然后赋值给P1端口,ROM允许情况可以设置更多表格*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/*查表表格*/unsignedcharcodetable[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加/*函数声明*/voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255while(1)〃主循环{for(i=0;iv16;i++)〃加入for循环,表明for循环大括号中的程序循环〃执行16次,表明表格中有16个元素{P1=table[i];Delay(30000);}〃主循环中添加其他需要一直工作的程序裁裁&W叶a裁裁&W叶a卷器”呎卷器”呎延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}13-双灯左移右移闪烁/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5修改:无内容:2个led灯先左移,然后右移,然后同时闪烁*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i〃取值范围0〜255unsignedchartemp;//定义临时变量用于转换while(1)〃主循环{temp=0xfc;P1=temp;for(i=0;iv7;i++)〃加入for循环,表明for循环大括号{Delay(50000);〃中的程序循环执行7次〃调用延时程序;更改延时数字可〃以更改延时长度;用于改变闪烁频率tempvv=l;temp=templ0x01;〃也可以直接把temp换成P1
P1=temp;〃之所以加入temp做中间变量,转换〃完成后直接赋值到端口,防止直接}〃操作端口造成的短暂闪烁temp=0x3f;P1=temp;for(i=0;i<7;i++)〃加入for循环,表明for循环大括号{Delay(50000);〃中的程序循环执行7次〃调用延时程序;更改延时数字可以〃更改延时长度;用于改变闪烁频率temp>>=1;templ=0x80;P1=temp;〃等效于temp=templ0x80for(i=0;iv3;i++)〃加入forfor(i=0;iv3;i++)〃加入for循环,表明for循环大括号〃中的程序循环执行3次{Pl=0xff;Delay(50000);P1=0x00;〃主循环中添加其他需要一直工作的程序Delay(50000);〃主循环中添加其他需要一直工作的程序}}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}14-花样灯/*名称:io口高低电平控制论坛:编写:shifang日期:2009.5
修改:无内容:花样灯一般有两种方法实现:1、程序循环执行2、查表法这里我们两种都使用一下*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/*花样表格*/unsignedcharcodeseg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加voidDelay(unsignedintt);〃函数声明/*主函数*/main(){unsignedchari;〃定义一个无符号字符型〃局部变量i取值范围0〜255while(1){P1=0xFE;〃第1个LED亮for(i=0;iv8;i++){Delay(20000);P1<<=1;}P1=0x7F;〃第8个LED亮P1=0x7F;for(i=0;i<8;i++){Delay(20000);P1>>=1;}P1=0xFE;for(i=0;i<8;i++)〃第P1=0xFE;for(i=0;i<8;i++)〃第1个LED亮{Delay(20000);Pl<<=1;Pl1=0x01;}P1=0x7F;〃第8个LED亮for(i=0;iv8;i++){Delay(20000);Pl>>=1;Pl1=0x80;}〃下面通过查表方法获得花样参数for(i=0;iv16;i++)〃查表可以简单的显示各种花样实用性更强{Delay(20000);P1=seg[i];}}}/*延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}15-PWM调光/*名称:PWM调光论坛:编写:shifang日期:2009.5修改:无内容:通过PWM(脉宽调制)调节LED的亮度卷器”呎*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbitLEDO=PMO;〃用sbit关键字定义LED到P1.0端口,LED是自己任意定义且容易记忆的符号voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedintCYCLE=600,PWM_LOW=0;〃定义周期并赋值while(1)〃主循环{LED0=1;Delay(60000);〃特意加延时,可以看到熄灭的过程for(PWM_LOW=1;PWM_LOWvCYCLE;PWM_LOW++){//PWM_LOW表示低〃电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次LED0=0;〃点亮LEDDelay(PWM_LOW);〃延时长度,600次循环中从1加至599LED0=1;〃熄灭LEDDelay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1}LED0=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){/与逐渐变亮相反的过程LED0=0;Delay(PWM_LOW);LED0=1;Delay(CYCLE-PWM_LOW);}〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535裁裁&W叶a卷器”呎卷器”呎*/voidDelay(unsignedintt){while(--t);}16-共阳数码管静态显示/*名称:单个共阳数码管静态显示论坛:编写:shifang日期:2009.5修改:无内容:通过赋值给P1,让数码管显示特定的字符或者数字*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义voidmain(void){P1=0xc0;〃二进制为11000000参考数码管排列,〃可以得出0对应的段点亮,1对应的段熄灭,结果显示数字"0while(1){}}17-1个共阳数码管显示变化数字/*名称:单个共阳数码管动态显示变化数字论坛:编写:shifang日期:2009.5修改:无内容:通过循环赋值给P1,让数码管显示特定的字符或者数字*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义unsignedcharcodedofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7c,0x39,0x5e,0x79,0x71,};//显示数值表0-9voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255while(1)〃主循环{for(i=0;iv16;i++)〃加入for循环,表明for循环大括号中的程序循环执行10次{P1=dofly_table[i];//循环调用表中的数值Delay(60000);〃延时,方便观看数字变化}〃主循环中添加其他需要一直工作的程序}}/*延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}18■单个数码管模拟水流/*名称:单个共阳数码管模拟水流论坛:编写:shifang日期:2009.5修改:无内容:通过循环赋值给P1,让数码管显示特定流动样式*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义voidDelay(unsignedintt);〃函数声明/*主函数*/voidmain(void){unsignedchari;〃定义一个无符号字符型局部变量i取值范围0〜255while(1)〃主循环{P1=0xfe;for(i=0;iv6;i++)〃加入for循环,表明for循环大括号中的程序循环执行6次{Delay(10000);P1<<=1;P1l=0x01;〃主循环中添加其他需要一直工作的程序延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}按键控制单个数码管显示卷器”呎卷器”呎卷器”呎卷器”呎/*名称:单个共阳数码管动态显示变化数字论坛:编写:shifang日期:2009.5修改:无内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义unsignedcharcodedofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};//显示数值表0-9/*主函数*/voidmain(void){while(1)〃主循环{switch(P3)//P3口作为独立按键输入端,检测端口电平并做如下判断{case0xfe:P1=dofly_table[1];break;//0xfe=11111110,〃说明连接在P3.0端口的按键被按下,显示对应的数字然后跳出循环case0xfd:P1=dofly_table[2];break;//调用表中的第三个〃元素0xa4下标0才表示数组中的第一个元素case0xfb:P1=dofly_table[3];break;case0xf7:P1=dofly_table[4];break;case0xef:P1=dofly_table[5];break;case0xdf:P1=dofly_table[6];break;case0xbf:P1=dofly_table[7];break;case0x7f:P1=dofly_table[8];break;default:break;〃如果都没按下,直接跳出}〃主循环中添加其他需要一直工作的程序单个数码管指示逻辑电平/*名称:单个共阳数码管指示逻辑电平论坛:编写:shifang日期:2009.5修改:无内容:通过循环检测P3.2口电平输入值,然后用数码管输出"H"or"L",表示该端口现在连接的是高电平还是低电平*/#includevreg52.h>〃包含头文件,一般情况不需要改动,〃头文件包含特殊功能寄存器的定义sbitIO_IN=P3人2;〃定义IO信号输入端/*主函数*/voidmain(void){while(1)〃主循环{if(IO_IN==1)〃如果端口检测到1表示高电平P1=0x89;〃"H"elseP1=0xc7;〃"L"〃否则表示低电平,这里使用条件语句ifoooelse。。。〃主循环中添加其他需要一直工作的程序}}8位数码管显示其中之一/*名称:8位数码管显示其中之一论坛:编写:shifang日期:2009.5修改:无内容:显示8位数码管中任意一位*/#include<reg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortPO//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2A2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存/*主函数*/main(){while(l){DataPort=0xfe;〃取位码第一位数码管选通,即二进制11111110LATCH2=1;〃位锁存LATCH2=0;DataPort=0x4F;〃取显示数据,段码“3”共阴字符码LATCH1=1;〃段锁存LATCH1=0;}}8位数码管静态显示其中之二/*名称:8位数码管显示其中之二论坛:编写:shifang日期:2009.5修改:无内容:显示8位数码管中任意二位*/#include<reg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortPO//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2A2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存/*主函数*/main(){while(l){DataPort=0x7e;〃取位码第一位数码管选通,即二进制01111110LATCH2=1;〃位锁存LATCH2=0;DataPort=0x4F;〃取显示数据,段码“3”共阴字符码LATCH1=1;〃段锁存LATCH1=0;}}8位数码管动态扫描显示/*名称:8位数码管动态扫描显示论坛:编写:shifang日期:2009.5修改:无内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2A2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示段码值01234567unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};〃分别对应相应的数码管点亮,即位码voidDelay(unsignedintt);〃函数声明/*主函数*/main()卷器”呎卷器”呎卷器”呎卷器”呎裁裁&W叶a{unsignedchari=0;while(l){DataPort=dofly_WeiMa[i];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=dofly_DuanMa[i];〃取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);〃扫描间隙延时,时间太长会闪烁,太短会造成重影i++;if(8==i)〃检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位i=0;延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}8位数码管动态扫描原理演示/*名称:8位数码管动态扫描显示论坛:编写:shifang日期:2009.5修改:无内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值01234567unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码voidDelay(unsignedintt);〃函数声明/*主函数*/main(){unsignedchari=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;}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){裁裁&W叶a裁裁&W叶a硯器”呎硯器”呎while(__t);}数码管显示动态数据/*名称:8位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示段码值0~Funsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/分别对应相应的数码管点亮,即位码voidDelay(unsignedintt);〃函数声明/*主函数*/main(){unsignedchari=0,num;unsignedintj;while(1){DataPort=dofly_WeiMa[i];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=dofly_DuanMa[num+i];〃取显示数据,段码
LATCH1=1;LATCH1=O;LATCH1=1;LATCH1=O;〃段锁存Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影i++;j++;if(8==i)〃检测8位扫描完全结束?如扫描完成则从第一个开始再次扫描8位i=0;if(j==500)〃检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化{j=0;num++;if(num==9)num=0;延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}26-9累加/*名称:1位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:1位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2A2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedcharnum;unsignedintj;while(1){j++;if(j==500)〃检测当前数值显示了一小段时间后,〃需要显示的数值加1,实现数据显示的变化{j=0;num++;if(num==10)〃用于显示0~9num=0;}TempData[0]=dofly_DuanMa[num%10];//分解显示信息,〃如要显示68,则68/10=668%10=8Display(2,1);}}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,〃太短会造成重影}}27-99累加/*名称:2位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:2位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2A2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedcharnum;unsignedintj;while(1){j++;if(j==500)〃检测当前数值显示了一小段时间后,〃需要显示的数值加1,实现数据显示的变化{j=0;num++;if(num==100)〃用于显示0〜99num=0;}TempData[0]=dofly_DuanMa[num/10];//分解显示信息,〃如要显示68,则68/10=668%10=8TempData[1]=dofly_DuanMa[num%10];Display(2,2);}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){while(--t);}显示函数,用于动态扫描数码管卷器”呎卷器”呎卷器”呎卷器”呎输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,〃太短会造成重影}}28-999累加/*名称:多位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;〃定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedintnum;unsignedintj;while(1){j++;if(j==200)〃检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化{j=0;num++;if(num==1000)〃用于显示0〜999num=0;TempData[0]=dofly_DuanMa[num/100];//分解显示信息,如要显示68,贝V68/10=668%10=8TempData[1]=dofly_DuanMa[(num%100)/10];TempData[2]=dofly_DuanMa[(num%100)%10];Display(2,3);}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535*/voidDelay(unsignedintt){裁裁&W叶a裁裁&W叶a显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影}29-9999累加/*名称:多位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedintnum;unsignedintj;while(1){j++;if(j==10)〃检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化{j=0;num++;if(num==10000)〃用于显示0〜9999num=0;TempData[0]=dofly_DuanMa[num/1000];//分解显示信息,如要显示68,贝V68/10=668%10=8TempData[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);}}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0~65535裁裁&W叶a卷器”呎卷器”呎*/voidDelay(unsignedintt){while(__t);}显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影30-9累减/*名称:1位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:1位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedcharnum=9;unsignedintj;while(1){j++;if(j==500)〃检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化{j=0;if(num>0)〃用于显示0~9num--;elsenum=9;}TempData[0]=dofly_DuanMa[num%10];//分解显示信息,如要显示68,贝V68/10=668%10=8Display(2,1);}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(__t);}显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影31-99累减/*裁裁&W叶a裁裁&W叶a卷器”呎卷器”呎名称:2位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:2位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedcharnum=99;unsignedintj;while(1){j++;if(j==500)〃检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化{j=0;if(num>0)〃用于显示0〜99num--;elsenum=99;}TempData[0]=dofly_DuanMa[num/10];//分解显示信息,如要显示68,贝V68/10=668%10=8TempData[1]=dofly_DuanMa[num%10];Display(2,2);延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(__t);}显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影32-999累减/*名称:多位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedintnum=999;unsignedintj;while(1){j++;if(j==200)〃检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化{j=0;if(num>0)〃用于显示0~999num--;elsenum=999;}TempData[0]=dofly_DuanMa[num/100];//分解显示信息,如要显示68,贝V68/10=668%10=8TempData[l]=dofly_DuanMa[(num%100)/10];TempData[2]=dofly_DuanMa[(num%100)%10];Display(2,3);}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影33-9999累减/*名称:多位数码管动态扫描显示变化数据论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedintnum=9999;unsignedintj;while(1){j++;if(j==10)〃检测当前数值显示了一小段时间后,需要显示的数值-1,实现数据显示的变化{j=0;if(num>00)〃用于显示0~9999num--;elsenum=9999;TempData[0]=dofly_DuanMa[num/1000];//分解显示信息,如要显示68,贝V68/10=668%10=8TempData[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);}}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;ivNum;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码LATCH1=1;〃段锁存LATCH1=0;卷器”呎卷器”呎卷器”呎卷器”呎Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影}}34-显示小数点/*名称:多位数码管动态扫描显示变化数据显示小数点方法论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值共阴数码管只要在对应的数字后面丨0x80即可显示小数点共阳数码管则&0x7F*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2人2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};/分别对应相应的数码管点亮,即位码unsignedcharTempData[8];//存储显示值的全局变量voidDelay(unsignedintt);〃函数声明voidDisplay(unsignedcharFirstBit,unsignedcharNum);/*主函数*/main(){unsignedintnum;unsignedintj;while(1){j++;if(j==200)〃检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化{j=0;num++;if(num==1000)〃用于显示0〜999num=0;TempData[0]=dofly_DuanMa[num/100];/份解显示信息,如要显示68,贝V68/10=668%10=8TempData[1]=dofly_DuanMa[(num%100)/10]l0x80;//共阴数码管只要在对应的数字后面|0x80即可显示小数点TempData[2]=dofly_DuanMa[(num%100)%10];Display(2,3);}延时函数,含有输入参数unsignedintt,无返回值unsignedint是定义无符号整形变量,其值的范围是0〜65535*/voidDelay(unsignedintt){while(--t);}显示函数,用于动态扫描数码管输入参数FirstBit表示需要显示的第一位,如赋值2表示从第三个数码管开始显示如输入0表示从第一个显示。Num表示需要显示的位数,如需要显示99两位数值则该值输入2*/voidDisplay(unsignedcharFirstBit,unsignedcharNum){unsignedchari;for(i=0;i<Num;i++){DataPort=0;〃清空数据,防止有交替重影LATCH1=1;〃段锁存LATCH1=0;DataPort=dofly_WeiMa[i+FirstBit];/取位码LATCH2=1;〃位锁存LATCH2=0;DataPort=TempData[i];/取显示数据,段码裁裁&W叶a裁裁&W叶aLATCH1=1;〃段锁存LATCH1=O;Delay(200);//扫描间隙延时,时间太长会闪烁,太短会造成重影}}35-数码管消隐/*名称:多位数码管动态扫描显示变化数据数码管消隐论坛:编写:shifang日期:2009.5修改:无内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值当高位值为0是不显示该位,即消隐,如数字0010,实际显示为10,前2位0不显示*/#includevreg52.h>〃包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#defineDataPortP0//定义数据端口程序中遇到DataPort则用P0替换sbitLATCH1=P2A2;//定义锁存使能端口段锁存sbitLATCH2=P2A3;//位锁存unsignedcharcodedofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};〃显示段码值0~9unsignedcharcodedofly_WeiMa[]={0xfe,0xfd,0x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学校装修设计合同范本
- 市场营销公司合同范本
- 工伤九级劳动合同范本
- 微电影的制作合同范本
- 方案模板集合五教案
- 儿童成长相册教案(2025-2026学年)
- 公开课教案教学设计第六单元鉴赏评论乡戏教案北师大版(2025-2026学年)
- 一年级语文下册教案想飞的乌龟教学设计(2025-2026学年)
- 福建地区中考英语复习专题十六短文填空试卷部分教案(2025-2026学年)
- 大学物理讲座静电省公共课全国赛课教案
- 2026年党支部主题党日活动方案
- 2025年福鼎时代面试题及答案
- 钢管室内操作架施工方案
- 形容词变副词综合练习题及知识讲解
- 电动汽车充电桩投资回报分析报告
- 质量体系教育培训制度
- (正式版)DB13∕T 6148-2025 《冀北地区退化草地生态修复技术规程》
- 咖喱知识培训课件
- 中继间施工方案
- 护理查对制度试卷(含答案)
- 铁路安规培训课件
评论
0/150
提交评论