




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、void main (void) / LED=1;/ LED=0;/ while (1) / / 主循环 主循环中添加其他需要一直工作的程序 51 单片机 50 个例程代 码 程序里有中断,串口等驱动,直接复制即可使用 1- IO 输出 -点亮 1 个 LED灯方法 1 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:点亮 P1 口的一个 LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 sbit LED=P
2、10;/ 用 sbit 关键字 定义 LED 到 P1.0 端口, /LED 是自己任意定义且容易记忆的符号 /* 主函数 */ 此方法使用 bit 位对单个端口赋值 将 P1.0 口赋值 1 ,对外输出高电平 将 P1.0 口赋值 0 ,对外输出低电平 2- IO 输出 -点亮 1 个 LED灯方法 2 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:点亮 P1 口的一个 LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功
3、能寄存器的定义 /* 主函数 */ void main (void) / P1 = 0 xFF; /P1 /ff 此方法使用 1 个字节对单个端口赋值 口全部为高电平,对应的 LED灯全灭掉, 换算成二进制是 1111 1111 P1 = 0 xfe; /P1 /0 xfe /fe 口的最低位点亮,可以更改数值是其他的灯点亮 是 16 进制, 0 x 开头表示 16 进制数, 换算成二进制是 1111 1110 while (1) / / 主循环 主循环中添加其他需要一直工作的程序 3- IO 输出 -点亮多个 LED灯方法 1 /* 名称: IO 口高低电平控制 论坛: 编写: shifan
4、g 日期: 2009.5 修改:无 容:点亮 P1 口的多个 LED灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 sbit LED0=P10;/ 用 sbit 关键字 定义 LED 到 P1.0 端口, sbit LED1=P11;/LED 是自己任意定义且容易记忆的符号 sbit LED2=P12; sbit LED3=P13; sbit LED4=P14; sbit LED5=P15; sbit LED6=P16; sbit LED7=P17; /* 主函数 *
5、/ void main (void) 此方法使用 bit 位对单个端口赋值 将 P1.0 口赋值 0 ,对外输出低电平 主循环 主循环中添加其他需要一直工作的程序 / LED0=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灯 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #incl
6、ude / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 /* 主函数 */ void main (void) / 此方法使用 bit 位对单个端口赋值 P1=0 x55; / 换成二进制是 0101 0101 while (1) / 主循环 / 主循环中添加其他需要一直工作的程序 5- 闪烁 1个 LED /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:点亮 P1口的 1个 LED灯闪烁 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需
7、要改动, / 头文件包含特殊功能寄存器的定义 sbit LED0=P10;/ 用 sbit 关键字 定义 LED 到 P1.0 端口, /LED 是自己任意定义且容易记忆的符号 void Delay(unsigned int t); / 函数声明 /* 主函数 */ void main (void) / 此方法使用 bit 位对单个端口赋值 while (1) / 主循环 LED0=0; / 将 P1.0 口赋值 0 ,对外输出低电平 Delay(10000); / 调用延时程序;更改延时数字可以更改延时长度; / 用于改变闪烁频率 LED0=1; / 将 P1.0 口赋值 1 ,对外输出高电
8、平 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灯闪烁 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况
9、不需要改动, / 头文件包含特殊功能寄存器的定义 sbit LED0=P10;/ 用 sbit 关键字 定义 LED 到 P1.0 端口, /LED 是自己任意定义且容易记忆的符号 void Delay(unsigned int t); / 函数声明 /* 主函数 */ void main (void) / 此方法使用 bit 位对单个端口赋值 unsigned char i; / while (1) / 主循环 for(i=0;i10;i+) / 加入 for 循环,表明 for 循环大括号中的程序循环执行 10次 LED0=0; / Delay(5000); / / LED0=1; / 将
10、 P1.0 口赋值 0 ,对外输出低电平 调用延时程序;更改延时数字可以更改延时长度; 用于改变闪烁频率 将 P1.0 口赋值 1 ,对外输出高电平 Delay(5000); for(i=0;i10;i+) LED0=0; / Delay(60000); / / LED0=1; / Delay(60000); / 将 P1.0 口赋值 0 ,对外输出低电平 调用延时程序;更改延时数字可以更改延时长度; 用于改变闪烁频率 将 P1.0 口赋值 1 ,对外输出高电平 主循环中添加其他需要一直工作的程序 /* 延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int
11、 是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 7- 不同频率闪烁多个 LED灯 定义一个无符号字符型局部变量 i 取值围 0255 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:点亮 P1 口的多个 LED灯闪烁 该程序是单片机学习中最简单最基础的, 通过程序了解如何控制端口的高低电平 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 sbit LED0=P10;/ 用 sbit 关键字 定义 LED 到 P
12、1.0 端口, LED是自己任意定义且容易记 忆的符号 sbit LED1=P11; sbit LED2=P12; sbit LED3=P13; sbit LED4=P14; sbit LED5=P15; sbit LED6=P16; sbit LED7=P17; void Delay(unsigned int t); /函数声明 /* 主函数 */ void main (void) / unsigned char i; / while (1) / for(i=0;i10;i+) / 主循环 / 加入 for 循环, 的程序循环执行 表明 for 循环大括号中 10 次 LED0=0; LED
13、2=1; LED4=0; Delay(5000); / / 将 P1.0 口赋值 0 ,对外输出低电平 LED0=1; LED2=0; / 调用延时程序;更改延时数字可以更改延时长度; / 用于改变闪烁频率 将 P1.0 口赋值 1 ,对外输出高电平 此方法使用 bit 位对单个端口赋值 定义一个无符号字符型局部变量 i 取值围 0255 LED4=1; Delay(5000); for(i=0;i10;i+) LED0=0; / LED2=1; LED4=0; Delay(60000); / LED0=1; / LED2=0; 将 P1.0 口赋值 0 ,对外输出低电平 调用延时程序;更改延
14、时数字可以更改延时长度; / 用于改变闪烁频率 将 P1.0 口赋值 1 ,对外输出高电平 LED4=1; Delay(60000); / 主循环中添加其他需要一直工作的程序 /* 延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 8- 8 位 LED左移 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:左移,直至 LED全部点亮,左移符号 */ #include /
15、包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 void Delay(unsigned int t); / 函数声明 /* 主函数 */ void main (void) unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255 Delay(50000); P1=0 xfe; / for(i=0;i8;i+) / Delay(50000); 赋初始值 加入 for 循环,表明 for 循环大括号中的程序循环执行 8次 P1 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 void Delay(uns
16、igned int t); / 函数声明 /* 主函数 */ void main (void) unsigned char i; / Delay(50000); P1=0 x7f; / for(i=0;i=1; while (1)/ 定义一个无符号字符型局部变量 i 取值围 0255 赋初始值 加入 for 循环,表明 for 循环大括号中的程序循环执行 8 次 主循环 / 主循环中添加其他需要一直工作的程序 /* 延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535 */ void Delay(unsign
17、ed int t) while(-t); 10- LED 循环左移 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:循环左移,始终一个 led 点亮,并循环执行流水动作,左移符号 逻辑或符号 | */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 void Delay(unsigned int t); / 函数声明 /* 主函数 */ void main (void) unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255 Delay(50000); while
18、(1) / for(i=0;i8;i+) / Delay(50000); P1 逻辑或符号 | */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 void Delay(unsigned int t); / 函数声明 /* 主函数 */ void main (void) unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255 Delay(50000); P1=0 x7f;/赋初始值 while (1) ,/主循环 for(i=0;i=1; P1=P1|0 x80; / P1=0 x7f; / 右移后,最左端自动赋值 0
19、,所以需要该语句赋值 1 重新赋初始值 / 主循环中添加其他需要一直工作的程序 /* 延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 12- 查表显示 LED 灯 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过查表获得 1 个字节的值然后赋值给 P1 端口, ROM允许情况可以设置更多表格 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊
20、功能寄存器的定 义 /* 查表表格 */ unsigned char code table=0 x7f,0 xbf,0 xdf,0 xef, 0 xf7,0 xfb,0 xfd,0 xfe, 0 xff,0 xff,0 x00,0 x00, 0 x55,0 x55,0 xaa,0 xaa ; /rom 允许情况可以无限添加 /* 函数声明 */ void Delay(unsigned int t); /函数声明 /* 主函数 */ void main (void) unsigned char i; /定义一个无符号字符型局部变量 i 取值围 0255 for(i=0;i16;i+) / / w
21、hile (1)/ 主循环 加入 for 循环,表明 for 循环大括号中的程序循环 执行 16 次,表明表格中有 16 个元素 P1=tablei; Delay(30000); / 主循环中添加其他需要一直工作的程序 /* 延时函数,含有输入参数 unsigned int t ,无返回值 unsigned int是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 13- 双灯左移右移闪烁 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容: 2 个 led 灯先左
22、移,然后右移,然后同时闪烁 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 void Delay(unsigned int t); / 函数声明 /* 主函数 */ void main (void) unsigned char i; / / unsigned char temp;/ while (1)/ temp=0 xfc; P1=temp; for(i=0;i7;i+) / / 定义一个无符号字符型局部变量 i 取值围 0255 定义临时变量用于转换 主循环 加入 for 循环,表明 for 循环大括号 中的程序循环执行 7 次 Delay
23、(50000); / / temp=1; temp=temp|0 x01; / P1=temp; / / / temp=0 x3f; P1=temp; for(i=0;i=1; temp|=0 x80; / P1=temp; 调用延时程序;更改延时数字可 以更改延时长度;用于改变闪烁频率 也可以直接把 temp 换成 P1 之所以加入 temp 做中间变量,转换 完成后直接赋值到端口,防止直接 操作端口造成的短暂闪烁 加入 for 循环,表明 for 循环大括号 中的程序循环执行 7 次 调用延时程序;更改延时数字可以 更改延时长度;用于改变闪烁频率 等效于 temp=temp|0 x80 加
24、入 for 循环,表明 for 循环大括号 中的程序循环执行 3 次 主循环中添加其他需要一直工作的程序 for(i=0;i3;i+) / / P1=0 xff; Delay(50000); P1=0 x00; Delay(50000); / /* 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 14- 花样灯 /* 名称: IO 口高低电平控制 论坛: 编写: shifang 日期: 2009.5 修改:无 容:花样灯一般有
25、两种方法实现: 1 、程序循环执行 2 、查表法 这里我们两种都使用一下 */ #include / 包含头文件, 一般情况不需要改动, 头文件包含特殊功能寄存器 的定义 /* 花样表格 */ unsigned char code seg=0 x7f,0 xbf,0 xdf,0 xef, 0 xf7,0 xfb,0 xfd,0 xfe, 0 xff,0 xff,0 x00,0 x00, 0 x55,0 x55,0 xaa,0 xaa ;/rom 允许情况可以无限添加 void Delay(unsigned int t); /函数声明 /* 主函数 */ main() unsigned char
26、 i; / while(1) P1=0 xFE; / for(i=0;i8;i+) Delay(20000); P1 =1; P1=0 x7F; / for(i=0;i=1; P1=0 xFE; /第 1 个 LED亮 for(i=0;i8;i+) Delay(20000); P1 =1; P1 |=0 x01; P1=0 x7F; /第 8 个 LED亮 for(i=0;i=1; P1 |=0 x80; / 下面通过查表方法获得花样参数 实用性更强 for(i=0;i16;i+)/ 查表可以简单的显示各种花样 Delay(20000); P1=segi; /* 延时函数,含有输入参数 uns
27、igned int t,无返回值 unsigned int是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 15- PWM调光 /* 名称: PWM调光 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过 PWM(脉宽调制)调节 LED的亮度 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 sbit LED0=P10;/ 用 sbit 关键字 定义 LED 到 P1.0 端口, LED是自己任意定义且容易记 忆的符号 void Delay(unsi
28、gned int t); /函数声明 /* 主函数 */ void main (void) unsigned int CYCLE=600,PWM_LOW=0;/ 定义周期并赋值 while (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 ,无返回值
29、 unsigned int 是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 16- 共阳数码管静态显示 /* 名称:单个共阳数码管静态显示 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过赋值给 P1,让数码管显示特定的字符或者数字 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 void main (void) P1=0 xc0; / 二进制 为 1100 0000 参考数码管排列, / 可以得出 0 对应的段点亮, 1 对应的段熄灭,结
30、果显示数字 0 while(1) 17- 1 个共阳数码管显示变化数字 /* 名称:单个共阳数码管动态显示变化数字 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过循环赋值给 P1,让数码管显示特定的字符或者数字 */ #include 义 / 包含头文件,一般情况不需要改动, 头文件包含特殊功能寄存器的定 unsigned char code dofly_table10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x77,0 x7c,0 x 39,0 x5e,0 x79,0 x71,; /
31、 显示数值表 0-9 void Delay(unsigned int t); /函数声明 /* 主函数 */ void main (void) unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255 while (1) / for(i=0;i16;i+) / P1=dofly_tablei; / 主循环 加入 for 循环,表明 for 循环大括号中的程序循环执行 10 次 循环调用表中的数值 Delay(60000); / 延时,方便观看数字变化 / /* 主循环中添加其他需要一直工作的程序 延时函数,含有输入参数 unsigned int t ,无返回值
32、unsigned int 是定 义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 18- 单个数码管模拟水流 /* 名称:单个共阳数码管模拟水流 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过循环赋值给 P1,让数码管显示特定流动样式 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 void Delay(unsigned int t); /函数声明 /* 主函数 */ void main (void) while (1)/ P1=0 xfe;
33、for(i=0;i6;i+) / Delay(10000); P1=1; P1|=0 x01; unsigned char i; / 定义一个无符号字符型局部变量 i 取值围 0255 6次 主循环 加入 for 循环,表明 for 循环大括号中的程序循环执行 / 主循环中添加其他需要一直工作的程序 /* 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的围是 065535 */ void Delay(unsigned int t) while(-t); 19- 按键控制单个数码管显示 /* 名称:单个共阳数码管动态显示变化数
34、字 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过循环检测 P1 口按键输入值,然后用数码管输出, 没有按键按下时原值不变 */ #include / 包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器的定义 unsigned char code dofly_table10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99, 0 x92,0 x82,0 xf8,0 x80,0 x90,; / 显示数值表 0-9 /* 主函数 */ void main (void) while (1) / 主循环 switch(P3) /P3 口作为独立按键输入端
35、,检测端口电平并做如下判断 case 0 xfe:P1=dofly_table1;break;/0 xfe = 1111 1110, / 说明连接在 P3.0 端口的按键被按下 , 显示对应的数字然后跳出循环 case 0 xfd:P1=dofly_table2;break;/ 调用表中的第三个 / 元素 0 xa4 下标 0 才表示数组中的第一个元素 case 0 xfb:P1=dofly_table3;break; case 0 xf7:P1=dofly_table4;break; case 0 xef:P1=dofly_table5;break; case 0 xdf:P1=dofly_
36、table6;break; case 0 xbf:P1=dofly_table7;break; case 0 x7f:P1=dofly_table8;break; default:break; / 如果都没按下,直接跳出 / 主循环中添加其他需要一直工作的程序 20- 单个数码管指示逻辑电平 /* 名称:单个共阳数码管指示逻辑电平 论坛: 编写: shifang 日期: 2009.5 修改:无 容:通过循环检测 P3.2 口电平输入值,然后用数码管输出 H or L 表示该端口现在连接的是高电平还是低电平 */ #include /包含头文件,一般情况不需要改动, / 头文件包含特殊功能寄存器
37、的定义 sbit IO_IN=P32; / 定义 IO 信号输入端 /* 主函数 */ void main (void) while (1) / 主循环 if(IO_IN=1)/ 如果端口检测到 1 表示高电平 P1=0 x89; /H else P1=0 xc7; /L / 否则表示低电平,这里使用 条件语句 if 。 else / 主循环中添加其他需要一直工作的程序 21- 8 位数码管显示其中之一 /* 名称: 8 位数码管显示其中之一 论坛: 编写: shifang 日期: 2009.5 修改:无 容:显示 8 位数码管中任意一位 */ #include / 包含头文件,一般情况不需要
38、改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 / 定义数据端口 sbit LATCH1=P22;/ 定义锁存使能端口 sbit LATCH2=P23;/ 程序中遇到 DataPort 则用 P0 替换 段锁存 位锁存 /* 主函数 */ main() while(1) DataPort=0 x4F; / LATCH1=1; / LATCH1=0; 取显示数据,段码 “ 3”共阴字符码 段锁存 DataPort=0 xfe; / LATCH2=1; / 取位码 第一位数码管选通,即二进制 1111 1110 位锁存 LATCH2=0; 22- 8 位数码管静态显
39、示其中之二 /* 名称: 8 位数码管显示其中之二 论坛: 编写: shifang 日期: 2009.5 修改:无 容:显示 8 位数码管中任意二位 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 / 定义数据端口 sbit LATCH1=P22;/ 定义锁存使能端口 sbit LATCH2=P23;/ 程序中遇到 DataPort 则用 P0 替换 段锁存 位锁存 while(1) DataPort=0 x7e; / LATCH2=1; / LATCH2=0; DataPort=0 x4F; / LATCH
40、1=1; / LATCH1=0; 取显示数据,段码 “ 3”共阴字符码 段锁存 /* 主函数 */ main() 取位码 第一位数码管选通,即二进制 0111 1110 位锁存 23- 8 位数码管动态扫描显示 /* 名称: 8 位数码管动态扫描显示 论坛: 编写: shifang 日期: 2009.5 修改:无 容: 8 位数码管分别显示不同数字,这种扫描显示方式成为动态扫描 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATC
41、H1=P22;/ 定义锁存使能端口 段锁存 sbit LATCH2=P23;/ 位锁存 code unsigned char dofly_DuanMa=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; / 显示段码值 01234567 unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; / 分别对应相应的数码管点亮 , 即位码 void Delay(unsigned int t); /函数声明 /* 主函数 */ m
42、ain() unsigned char i=0; while(1) DataPort=dofly_WeiMai; /取位码 LATCH2=1; / 位锁存 LATCH2=0; DataPort=dofly_DuanMai; / 取显示数据,段码 LATCH1=1; / 段锁存 LATCH1=0; Delay(200); /扫描间隙延时,时间太长会闪烁,太短会造成重影 i+; 8位 if(8=i) /检测 8 位扫描完全结束?如扫描完成则从第一个开始再次扫描 i=0; /* 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int是定义无符号整形变量,其值的围是
43、065535 */ void Delay(unsigned int t) while(-t); 24- 8 位数码管动态扫描原理演示 /* 名称: 8 位数码管动态扫描显示 论坛: 编写: shifang 日期: 2009.5 修改:无 容: 8 位数码管分别显示不同数字,这种扫描显示方式成为动态扫描 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 /定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATCH1=P22;/ 定义锁存使能端口 段锁存 sbit LATCH2=P23;/
44、位锁存 unsigned char code dofly_DuanMa=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/显 示 段 码 值 01234567 unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/ 分 别对应相应的数码管点亮 , 即位码 void Delay(unsigned int t); / 函数声明 /* 主函数 */ main() unsigned char i=0; while(1) Dat
45、aPort=dofly_WeiMai; /取位码 LATCH2=1; / 位锁存 LATCH2=0; DataPort=dofly_DuanMai; / 取显示数据,段码 LATCH1=1; / 段锁存 LATCH1=0; Delay(60000); / 扫描间隙延时,时间太长会闪烁,太短会造成重影, / 这里故意延长时间,方便直观看出动态扫描原理 i+; if(8=i) / 检测 8 位扫描完全结束?如扫描完成则从第一个 / 开始再次扫描 8 位 i=0; /* 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int是定义无符号整形变量,其值的围是 0655
46、35 */ void Delay(unsigned int t) while(-t); 25- 数码管显示动态数据 /* 名称: 8 位数码管动态扫描显示变化数据 论坛: 编写: shifang 日期: 2009.5 修改:无 容: 8 位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATCH1=P22;/ 定义锁存使能端口 段锁存 sbit LATCH2=P2
47、3;/ 位锁存 code 分 unsigned char dofly_DuanMa=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x3 9,0 x5e,0 x79,0 x71;/ 显示段码值 0F unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/ 别对应相应的数码管点亮 , 即位码 void Delay(unsigned int t); /函数声明 /* 主函数 */ main()
48、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 位扫描完全结束?如扫描完成则从第一个开始再次扫描8 位 i=0; if(j=500) / 检测当前数值显示了一小段时间后,需要显示的数值加1,实现数
49、 据显示的变化 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 / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义
50、 #define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATCH1=P22;/ 定义锁存使能端口 段锁存 sbit LATCH2=P23;/ 位锁存 unsigned char code dofly_DuanMa10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/ 显 示 段 码值 09 unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/分 别对应
51、相应的数码管点亮 , 即位码 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) / 检测当前数值显示了一小段时间后, / 需要显示的数值加 1,实现数据显示的变化 j=0; num+; if(num=10)/ 用于显示 09 num=0; Te
52、mpData0=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 表 示从第三个数码管开始显示 如输入 0 表示从第一个显示。 Num 表示需要显示的位数,如需要显示 99 两位数值
53、则该值输入 2 */ void Display(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;iNum;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; / 位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; / 段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁,
54、/ 太短会造成重影 27- 99 累加 /* 名称: 2 位数码管动态扫描显示变化数据 论坛: 编写: shifang 日期: 2009.5 修改:无 容: 2 位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 /定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATCH1=P22;/ 定义锁存使能端口 段锁存 sbit LATCH2=P23;/ 位锁存 unsigned char code dofly_DuanMa
55、10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/显 示 段 码值 09 unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/分 别对应相应的数码管点亮 , 即位码 unsigned char TempData8; /存储显示值的全局变量 void Delay(unsigned int t); / 函数声明 void Display(unsigned char FirstBit,unsigned char Nu
56、m); /* 主函数 */ 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
57、 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;iNum;i+) DataPort
58、=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; / 取位码 LATCH2=1; / 位锁存 LATCH2=0; DataPort=TempDatai; / 取显示数据,段码 LATCH1=1; / 段锁存 LATCH1=0; Delay(200); / / 扫描间隙延时,时间太长会闪烁, 太短会造成重影 28- 999 累加 /* 名称:多位数码管动态扫描显示变化数据 论坛: 编写: shifang 日期: 2009.5 修改:无 容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,
59、并不停变化赋值 */ #include / 包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定 义 #define DataPort P0 / 定义数据端口 程序中遇到 DataPort 则用 P0 替换 sbit LATCH1=P22;/ 定义锁存使能端口 段锁存 sbit LATCH2=P23;/ 位锁存 unsigned char code dofly_DuanMa10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;/ 显 示 段 码值 09 unsigned char code dofly_WeiMa=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;/分 别对应相应的数码管点亮 , 即位码 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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论