1、2019-4-29- 1 -51 单片机 C 语言教程例 2.2.1 编写程序,点亮第一个发光二极管(part2_1.c P27)#include /52 系列单片机头文件sbit led1=P10; /声明单片机 P1 口的第一位void main() /主函数led1=0; /*点亮第一个发光二极管*/例 2.2.2 编写程序,点亮 P1 口的若干二极管(part2_2.c P39)#include /52 系列单片机头文件void main() /主函数P1=0xaa;/while(1);例 2.5.1 利用 for 语句延时特性,编写第一个发光二极管以间隔 1S亮灭闪动的程序(part
2、2_3.c P42 )#include /52 系列单片机头文件#define uint unsigned int /宏定义sbit led1=P10; /声明单片机 P1 口的第一位2019-4-29- 2 -uint i,j;void main() /主函数while(1) /大循环led1=0; /*点亮第一个发光二极管*/for(i=1;i0;i-) /延时for(j=110;j0;j-);led1=1; /*关闭第一个发光二极管*/for(i=1000;i0;i-) /延时for(j=110;j0;j-);例 2.6.1 编写程序使第一个发光二极管以间隔 500ms 亮灭闪动。(pa
3、rt2_4.c P48)#include /52 系列单片机头文件#define uint unsigned int /宏定义sbit led1=P10; /声明单片机 P1 口的第一位void delay1s(); /声明子函数2019-4-29- 3 -void main() /主函数while(1) /大循环led1=0; /*点亮第一个发光二极管*/delay1s(); /调用延时子函数led1=1; /*关闭第一个发光二极管*/delay1s(); /调用延时子函数void delay1s() /子函数体uint i,j;for(i=500;i0;i-)for(j=110;j0;j-
4、);例 2.7.1 编写程序使第一个二极管以亮 200ms、灭 800ms 的方式闪动。(part2_5.c P49)#include /52 系列单片机头文件#define uint unsigned int /宏定义sbit led1=P10; /声明单片机 P1 口的第一位2019-4-29- 4 -void delayms(uint); /声明子函数void main() /主函数while(1) /大循环led1=0; /*点亮第一个发光二极管*/delayms(200); /延时 200 毫秒led1=1; /*关闭第一个发光二极管*/delayms(800); /延时 800 毫
5、秒void delayms(uint xms)uint i,j;for(i=xms;i0;i-) /i=xms 即延时约 xms 毫秒for(j=110;j0;j-);例 2.8.3 利用 C51 自带库_crol_(),以间隔 500ms,实现流水灯程序(part2_6.c P53)#include /52 系列单片机头文件#include #define uint unsigned int /宏定义2019-4-29- 5 -#define uchar unsigned charvoid delayms(uint); /声明子函数uchar aa;void main() /主函数aa=0x
6、fe; /赋初值 11111110 while(1) /大循环P1=aa;delayms(500); /延时 500 毫秒aa=_crol_(aa,1); /将 aa 循环左移 1 位后再赋给 aavoid delayms(uint xms)uint i,j;for(i=xms;i0;i-) /i=xms 即延时约 xms 毫秒for(j=110;j0;j-);2019-4-29- 6 -例 3.2.1 编写程序使第一个数码管显示 8(part2.1_.1c P59)#include /52 系列单片机头文件sbit dula=P26; /申明 U1 锁存器的锁存端sbit wela=P27;
7、 /申明 U2 锁存器的锁存端void main()wela=1; /打开 U2 锁存器P0=0xFE; /送入位选信号wela=0; /关闭 U2 锁存器dula=1; /打开 U1 锁存器P0=0x7F; /送入段选信号dula=0; /关闭 U2 锁存器while(1); /程序停止到这里例 3.2.2 让实验板上 6 个数码管同时点亮,依次显示 0 到 F,时间间隔为 0.5ms,循环下去。 (part2.1_2.c P61)#include /52 系列单片机头文件#define uchar unsigned char#define uint unsigned int2019-4-2
8、9- 7 -sbit dula=P26; /申明 U1 锁存器的锁存端sbit wela=P27; /申明 U2 锁存器的锁存端uchar num;unchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void main()wela=1; /打开 U2 锁存端P0=0xco;/送入位选信号wela=0; /关闭 U2 锁存端while(1)for(num=0;num0;i-) /i=xms 即延时约 xms 毫秒fo
9、r(j=110;j0;j-);例 3.3.1 第一个数码管显示 1,时间为 0.5s,然后关闭它,立即让第二个数码管显示 2,时间为 0.5s,在关闭它一直到最后一个数码管显示 6,时间同样为 0.5s,关闭它之后再回来显示第一个数码管,一直循环下去。 (part2.1_3.c P62)例 3.5.2 用定时器 0 的方式 1 实现第一个发光二极管以 200ms 间隔闪烁,用定时器 1 的方式 1 实现数码管前两位 59s 循环计时。(part2.1_5.c P75)2019-4-29- 9 -例 4.1.1 用数码管前两位显示一个十进制数,变化范围为 0059,开始时显示 00,每按下 S2
10、 键一次,数值加 1;每按下 S3 键一次,数值减 1;每按下 S4 键一次,数值归零;按下 S5 键一次,利用定时器功能使数值开始自动每秒加 1,再次按下 S5 键,数值停止加 1,保持显示原数。 (part2.2_1.c P82)#include /52 系列单片机头文件#define uchar unsigned char#define uint unsigned int sbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit dula=P26; /申明 U1 锁存器的锁存端sbit wela=P27; /申明 U2 锁存
11、器的锁存端uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);2019-4-29- 10 -uchar numt0,num;void display(uchar numdis) /显示子函数uchar shi,ge; /分离两个分别要显示的数shi=numdis/10;ge=numdis%10;dula=1;P0=tableshi; /送十位段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱P0=0xfe; /送位选数据wela=0;delayms(5); /延时dula=1;P0=tablege; /送个位段选数据dula=0;P0=0xff;wela=1;