51单片机50个实例代码_第1页
51单片机50个实例代码_第2页
51单片机50个实例代码_第3页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1- 10输出-点亮1个LED灯方法1/*名称:io 口高低电平控制论坛:.doflye .net编写:shifa ng日期:2009.5修改:无容:点亮P1 口的一个LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平*/#i nclude /包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义sbit LED=P1A0;/用sbit 关键字 定义LED到P1.0端口,void main (void) /LED=1;/LED=0;/while /主循环主循环中添加其他需要一直工作的程序

2、/LED是自己任意定义且容易记忆的符号/*主函数*/此方法使用bit位对单个端口赋值 将P1.0 口赋值1,对外输出高电平 将P1.0 口赋值0 ,对外输出低电平2- I0输出-点亮1个LED灯方法2/*名称: IO 口高低电平控制论坛: 编写: shifang日期: 2009.5修改:无容:点亮P1 口的一个LED灯该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include /包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义/*主函数*/void main (void) /P1 = 0xFF; /P1 /ff此方法使用 1 个字节对单个端

3、口赋值口全部为高电平,对应的 LED灯全灭掉,换算成二进制是 1111 1111P1 = 0xfe; /P1 /0xfe /fe口的最低位点亮,可以更改数值是其他的灯点亮是 16 进制, 0x 开头表示 16 进制数, 换算成二进制是 1111 1110while (1) /主循环主循环中添加其他需要一直工作的程序3- 10输出-点亮多个LED灯方法1/*名称:io 口高低电平控制论坛: 编写: shifang日期: 2009.5 修改:无容:点亮P1 口的多个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/ #include / 包含头文件,一般情况不需要改

4、动,/ 头文件包含特殊功能寄存器的定义sbit LEDO=PO;用 sbit 关键字 定义 LED 到 P1.0 端口,sbit LED1=P1A1;/LED是自己任意定义且容易记忆的符号sbit LED2=P2;sbit LED3=P1A3;sbit LED4=P1A4;sbit LED5=P1A5;sbit LED6=P1A6;sbit LED7=P1A7;/*主函数*/ void main (void)此方法使用 bit 位对单个端口赋值将 P1.0 口赋值 0 ,对外输出低电平主循环主循环中添加其他需要一直工作的程序/LED0=0;/LED1=1;LED2=0;LED3=1;LED4=

5、0;LED5=1;LED6=0;LED7=1;while (1)/4- 10输出-点亮多个LED灯方法2/*名称:io 口高低电平控制论坛: 编写: shifang日期: 2009.5 修改:无 容:点亮P1 口的多个LED灯该程序是单片机学习中最简单最基础的,*/#include /包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义/*主函数*/void main (void)1/此方法使用 bit 位对单个端口赋值P1=0x55;/换成二进制是 0101 0101while (1)/主循环/ 主循环中添加其他需要一直工作的程序5- 闪烁 1个 LED/*名称: IO 口高低电

6、平控制 论坛: 编写: shifang 日期: 2009.5修改:无容:点亮P1 口的1个LED灯闪烁该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义sbit LED0=P1A0;/用 sbit 关键字 定义 LED 到 P1.0 端口,/LED 是自己任意定义且容易记忆的符号void Delay(unsigned int t); /函数声明/*主函数*/void main (void) while (1)r/主循环LED0=0;/将P1.0 口赋值0 ,对外输出低电平De

7、lay(10000);/调用延时程序;更改延时数字可以更改延时长度;/用于改变闪烁频率LED0=1;/将 P1.0 口赋值 1 ,对外输出高电平Delay(10000);/主循环中添加其他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是065535*/ void Delay(unsigned int t) while(-t);6- 不同频率闪烁1个LED灯/*名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5修改:无容:点亮P1 口的1个LED灯闪烁该程序是单片机学

8、习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需要改动,/头文件包含特殊功能寄存器的定义sbit LED0=P1A0;/用sbit 关键字 定义LED到P1.0端口,while (1) /主循环for(i=0;i10;i+) / 加入 for 循环,表明 for 循环大括号中的程序循环执行10次LED0=0; /Delay(5000); /LED0=1; /将 P1.0 口赋值 0 ,对外输出低电平 调用延时程序;更改延时数字可以更改延时长度; 用于改变闪烁频率将 P1.0 口赋值 1 ,对外输出高电平Delay(5000); fo

9、r(i=0;i10;i+)LED0=0; /Delay(60000); /LED0=1; / Delay(60000);/将 P1.0 口赋值 0 ,对外输出低电平 调用延时程序;更改延时数字可以更改延时长度; 用于改变闪烁频率将 P1.0 口赋值 1 ,对外输出高电平主循环中添加其他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535*/void Delay(unsigned int t) while(-t);7-不同频率闪烁多个 LED灯void Delay(unsigned int

10、 t); / 函数声明 /*主函数*/ void main (void) / 此方法使用 bit 位对单个端口赋值unsigned char i; /定义一个无符号字符型局部变量 i 取值围 0255void main (void)/unsigned char i; /while (1)/for(i=0;i10;i+) /主循环/加入 for 循环, 的程序循环执行表明 for 循环大括号中10次LED0=0;LED2=1;LED4=0;Delay(5000);/将P1.0 口赋值0 ,对外输出低电平LED0=1;LED2=0;/调用延时程序;更改延时数字可以更改延时长度;/ 用于改变闪烁频率

11、将 P1.0 口赋值 1 ,对外输出高电平/*名称: IO 口高低电平控制论坛: 编写: shifang日期: 2009.5修改:无容:点亮P1 口的多个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平*/ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义sbit LEDO=PO; 用sbit 关键字 定义LED到P1.0端口,LED是自己任意定义且容易记 忆的符号sbit LED1=P1A1;sbit LED2=P2;sbit LED3=P1A3;sbit LED4=P1A4;sbit LED5=P1A5;sbit LE

12、D6=P1A6;sbit LED7=P1A7;void Delay(unsigned int t); /函数声明/*主函数 */此方法使用 bit 位对单个端口赋值 定义一个无符号字符型局部变量 i 取值围 0255LED4=1;Delay(5000); for(i=0;i10;i+)LED0=0; /LED2=1;LED4=0;Delay(60000); /LED0=1; /LED2=0;将 P1.0 口赋值 0 ,对外输出低电平调用延时程序;更改延时数字可以更改延时长度;/ 用于改变闪烁频率将 P1.0 口赋值 1 ,对外输出高电平LED4=1;Delay(60000); /主循环中添加其

13、他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535*/ void Delay(unsigned int t) while(-t);8- 8位LED左移/*名称: IO 口高低电平控制 论坛: 编写: shifang日期: 2009.5 修改:无容:左移,直至 LED全部点亮,左移符号 */#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义/*主函数*/ void main (void)unsigned char i; /定义一个无符号字符型局部变量

14、 i 取值围 0255Delay(50000);P1=0xfe; / for(i=0;i8;i+) /Delay(50000);赋初始值加入 for 循环,表明 for 循环大括号中的程序循环执行8次P1*/#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义void Delay(unsigned int t); / 函数声明/*主函数*/ void main (void)unsigned char i; / Delay(50000);P1=0x7f; / for(i=0;i=1;while (1)/定义一个无符号字符型局部变量 i 取值围 0255赋初始值加

15、入 for 循环,表明 for 循环大括号中的程序循环执行 8 次主循环/主循环中添加其他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535*/ void Delay(unsigned int t) while(-t);10- LED 循环左移/*名称:IO 口高低电平控制论坛:编写: shifang日期: 2009.5修改:无容:循环左移,始终一个 led 点亮,并循环执行流水动作,左移符号 逻辑或符号 |*/#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄

16、存器的定 义void Delay(unsigned int t); / 函数声明/*主函数*/ void main (void)unsigned char i; /定义一个无符号字符型局部变量 i 取值围 0255Delay(50000);P1=0xfe; / 赋初始值while (1) / for(i=0;i8;i+) / Delay(50000);P1 逻辑或符号 |*/ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义void Delay(unsigned int t); / 函数声明/*主函数*/ void main (void)unsigned

17、char i; /定义一个无符号字符型局部变量 i 取值围 0255Delay(50000);P1=0x7f;/赋初始值while (1) ,/主循环for(i=0;i=1;P1=P1|0x80; / P1=0x7f; /右移后,最左端自动赋值 0,所以需要该语句赋值 1 重新赋初始值/ 主循环中添加其他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int是定义无符号整形变量,其值的围是065535*/ void Delay(unsigned int t) while(-t);12- 查表显示 LED 灯/*名称: IO 口高低电平控

18、制 论坛: 编写: shifang 日期: 2009.5修改:无容:通过查表获得1个字节的值然后赋值给P1端口,ROM允许情况可以设置更多表格*/#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义/*查表表格*/unsigned char code table=0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00, 0x55,0x55,0xaa,0xaa ;/rom 允许情况可以无限添加/*函数声明*/void Delay(unsigned int t); / 函数声明/*主函数*/void

19、 main (void)unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255for(i=0;i16;i+) /while (1)/ 主循环加入 for 循环,表明 for 循环大括号中的程序循环 执行 16 次,表明表格中有 16个元素P1=tablei;Delay(30000);/主循环中添加其他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int是定义无符号整形变量,其值的围是065535*/ void Delay(unsigned int t) while(-t);13- 双灯左移右移闪烁/*

20、名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5修改:无容: 2 个 led 灯先左移,然后右移,然后同时闪烁 */#include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义void Delay(unsigned int t); / 函数声明 /*主函数*/ void main (void) unsigned char i; /unsigned char temp;/while (1)/temp=0xfc;P1=temp;for(i=0;i7;i+) /定义一个无符号字符型局部变量 i 取值围 0255定义临时变量用于转换主循环

21、加入 for 循环,表明 for 循环大括号 中的程序循环执行 7 次Delay(50000); / / temp=1; temp=temp|0x01; / P1=temp; / / /temp=0x3f;P1=temp; for(i=0;i=1; temp|=0x80; / P1=temp;调用延时程序;更改延时数字可 以更改延时长度;用于改变闪烁频率也可以直接把 temp 换成 P1 之所以加入 temp 做中间变量,转换 完成后直接赋值到端口,防止直接 操作端口造成的短暂闪烁加入 for 循环,表明 for 循环大括号 中的程序循环执行 7 次调用延时程序;更改延时数字可以更改延时长度;

22、用于改变闪烁频率等效于 temp=temp|0x80加入 for 循环,表明 for 循环大括号 中的程序循环执行 3 次主循环中添加其他需要一直工作的程序for(i=0;i3;i+) /P1=0xff;Delay(50000);P1=0x00;Delay(50000); /*延时函数,含有输入参数 unsigned int t,无返回值unsigned int是定义无符号整形变量,其值的围是065535*/ void Delay(unsigned int t) while(-t);14- 花样灯/*名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无

23、容:花样灯一般有两种方法实现:1 、程序循环执行2 、查表法 这里我们两种都使用一下*/#include / 包含头文件, 一般情况不需要改动, 头文件包含特殊功能寄存器 的定义/*花样表格*/unsigned char code seg=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa;/rom 允许情况可以无限添加void Delay(unsigned int t); /函数声明/*主函数 */main()unsigned char i; /while(1)P1=0xFE; /fo

24、r(i=0;i8;i+)Delay(20000);P1 =1;P1=0x7F; /for(i=0;i=1;P仁OxFE;/第1个LED亮for(i=0;i8;i+)Delay(20000);P1 =1;P1 |=0x01;P仁0x7F;/第8个LED亮for(i=0;i=1;P1 |=0x80;实用性更强/ 下面通过查表方法获得花样参数for(i=0;i16;i+)/ 查表可以简单的显示各种花样 Delay(20000);P1=segi;/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535*/void D

25、elay(unsigned int t)while(-t);15- PWM调光/*名称:PW碉光论坛: 编写: shifang日期: 2009.5修改:无容:通过PW(脉宽调制)调节 LED的亮度*/#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义sbit LEDO=PO; 用sbit 关键字 定义LED到P1.0端口,LED是自己任意定义且容易记 忆的符号void Delay(unsigned int t); /函数声明/*主函数*/void main (void)unsigned int CYCLE=600,PWM_LOW=0;/ 定义周期并赋值whi

26、le (1)/主循环LED0=1;Delay(60000);/特意加延时,可以看到熄灭的过程for(PWM_LOW=1;PWM_LOW0;PWM_LOW-)与/逐渐变亮相反的过程LED0=0;Delay(PWM_LOW);LED0=1;Delay(CYCLE-PWM_LOW);/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535*/ void Delay(unsigned int t)while(-t);16- 共阳数码管静态显示/*名称:单个共阳数码管静态显示 论坛: 编写: shifang 日期: 2

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

28、动,头文件包含特殊功能寄存器的定unsignedcharcodedofly_table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7c,0x39,0x5e,0x79,0x71,;/ 显示数值表 0-9void Delay(unsigned int t); /函数声明/*主函数*/void main (void) unsigned char i; /定义一个无符号字符型局部变量i 取值围 0255while (1) /for(i=0;i16;i+) / P1=dofly_tablei; /主循环加入 for 循环,表明

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

30、含特殊功能寄存器的定义void Delay(unsigned int t); /函数声明/*主函数*/void main (void)unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255while (1) /P1=0xfe;for(i=0;i6;i+) / Delay(10000);P1=1;P1|=0x01;主循环6次加入 for 循环,表明 for 循环大括号中的程序循环执行/主循环中添加其他需要一直工作的程序/*延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535*/

31、void Delay(unsigned int t) while(-t);19- 按键控制单个数码管显示/*名称:单个共阳数码管动态显示变化数字 论坛: 编写: shifang 日期: 2009.5修改:无容:通过循环检测 P1 口按键输入值,然后用数码管输出, 没有按键按下时原值不变*/#include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义unsigned char code dofly_table10=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,;/ 显示数值表 0-9/*主函数*/ void m

32、ain (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=dofly_table4;break;case 0xef:P1=

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

34、,一般情况不需要改动,/ 头文件包含特殊功能寄存器的定义sbit IO_IN=P3A2; /定义 IO 信号输入端/*主函数*/ void main (void)while (1)/主循环if(IO_IN=1)/如果端口检测到 1 表示高电平P1=0x89; /HelseP1=0xc7; /L/ 否则表示低电平,这里使用 条件语句 if 。 else / 主循环中添加其他需要一直工作的程序21- 8 位数码管显示其中之一/*名称: 8 位数码管显示其中之一论坛: 编写: shifang日期: 2009.5修改:无容:显示 8 位数码管中任意一位 */ #include / 包含头文件,一般情况

35、不需要改动,头文件包含特殊功能寄存器的定 义#define DataPort P0 / 定义数据端口sbit LATC H仁P2A2;/ 定义锁存使能端口 sbit LATCH2=P2A3;程序中遇到 DataPort 则用 P0 替换段锁存位锁存/*主函数*/ main()取显示数据,段码 “ 3”共阴字符码段锁存while(1)DataPort=0xfe; /LATCH2=1; /取位码 第一位数码管选通,即二进制 1111 1110位锁存LATCH2=0;DataPort=0x4F; /LATCH1=1; /LATCH1=0;22- 8 位数码管静态显示其中之二/*名称: 8 位数码管显

36、示其中之二 论坛: 编写: shifang日期: 2009.5 修改:无 容:显示 8 位数码管中任意二位 */#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义#define DataPort P0 / 定义数据端口sbit LATC H仁P2A2;/ 定义锁存使能端口 sbit LATCH2=P2A3;程序中遇到 DataPort 则用 P0 替换段锁存位锁存/*主函数*/main()while(1)DataPort=0x7e; /LATCH2=1; /LATCH2=0;取位码 第一位数码管选通,即二进制 0111 1110位锁存DataPort=0x4

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

38、hardofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;code/ 显示段码值 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

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

40、 2009.5修改:无容: 8 位数码管分别显示不同数字,这种扫描显示方式成为动态扫描 */#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义#define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换sbit LATCH仁P2A2; 定义锁存使能端口段锁存sbit LATCH2=P2A3;/位锁存unsignedcharcodedofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/显 示 段 码值 01234567unsigned char

41、 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=0;Delay(60000); / 扫描间隙延时,时间太长会闪烁,太短会造成重影, / 这里故

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

43、一般情况不需要改动,头文件包含特殊功能寄存器的定 义#define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换sbit LATCH仁P2A2; 定义锁存使能端口段锁存sbit LATCH2=P2A3;/位锁存code分unsignedchardofly_DuanMa=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x3 9,0x5e,0x79,0x71;/ 显示段码值 0Funsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0

44、xef,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(200); / 扫描间隙延时,时间太长会闪烁,太短会造成重影i+;j+;if(8=i) / 检测 8 位扫

45、描完全结束?如扫描完成则从第一个开始再次扫描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);26- 9 累加/*名称: 1 位数码管动态扫描显示变化数据论坛: 编写: shifang日期: 2009.5修改:无容: 1 位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 */#include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义#define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换sbit LATCH仁P2A2; 定义锁存使能端口段锁存sbit LATCH2=P2A3;/位锁存unsignedcharcodedofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/显 示 段码值

温馨提示

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

评论

0/150

提交评论