51单片机c语言程序设计源代码

上传人:小** 文档编号:56644559 上传时间:2018-10-14 格式:DOCX 页数:138 大小:214.25KB
返回 下载 相关 举报
51单片机c语言程序设计源代码_第1页
第1页 / 共138页
51单片机c语言程序设计源代码_第2页
第2页 / 共138页
51单片机c语言程序设计源代码_第3页
第3页 / 共138页
51单片机c语言程序设计源代码_第4页
第4页 / 共138页
51单片机c语言程序设计源代码_第5页
第5页 / 共138页
点击查看更多>>
资源描述

《51单片机c语言程序设计源代码》由会员分享,可在线阅读,更多相关《51单片机c语言程序设计源代码(138页珍藏版)》请在金锄头文库上搜索。

1、一亩三分地收藏2018-10-14- 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

2、() /主函数 P1=0xaa;/while(1); 例例 2.5.1 利用 for 语句延时特性,编写第一个发光二极管以间隔 1S 亮灭闪动的程序 (part2_3.c P42) #include /52 系列单片机头文件 #define uint unsigned int /宏定义 sbit led1=P10; /声明单片机 P1 口的第一位 uint i,j; void main() /主函数 while(1) /大循环 led1=0;/*点亮第一个发光二极管*/ for(i=1;i0;i-)/延时 for(j=110;j0;j-); led1=1;/*关闭第一个发光二极管*/ for(

3、i=1000;i0;i-)/延时 for(j=110;j0;j-); 一亩三分地收藏2018-10-14- 2 -例例 2.6.1 编写程序使第一个发光二极管以间隔 500ms 亮灭闪动。 (part2_4.c P48)#include /52 系列单片机头文件 #define uint unsigned int /宏定义 sbit led1=P10; /声明单片机 P1 口的第一位 void delay1s();/声明子函数 void main() /主函数 while(1) /大循环 led1=0;/*点亮第一个发光二极管*/ delay1s();/调用延时子函数 led1=1;/*关闭第

4、一个发光二极管*/ delay1s();/调用延时子函数 void delay1s()/子函数体 uint i,j; for(i=500;i0;i-) for(j=110;j0;j-); 例例 2.7.1 编写程序使第一个二极管以亮 200ms、灭 800ms 的方式闪动。(part2_5.c P49) #include /52 系列单片机头文件 #define uint unsigned int /宏定义 sbit led1=P10; /声明单片机 P1 口的第一位 void delayms(uint);/声明子函数 void main() /主函数 while(1) /大循环 led1=0

5、;/*点亮第一个发光二极管*/ delayms(200);/延时 200 毫秒 led1=1;/*关闭第一个发光二极管*/ delayms(800);/延时 800 毫秒 void delayms(uint xms) uint i,j; for(i=xms;i0;i-) /i=xms 即延时约 xms 毫秒 for(j=110;j0;j-); 一亩三分地收藏2018-10-14- 3 -例例 2.8.3 利用 C51 自带库_crol_(),以间隔 500ms,实现流水灯程序(part2_6.c P53) #include /52 系列单片机头文件 #include #define uint

6、unsigned int /宏定义 #define uchar unsigned char void delayms(uint);/声明子函数 uchar aa; void main() /主函数 aa=0xfe;/赋初值 11111110 while(1) /大循环 P1=aa; delayms(500); /延时 500 毫秒 aa=_crol_(aa,1); /将 aa 循环左移 1 位后再赋给 aa void delayms(uint xms) uint i,j; for(i=xms;i0;i-) /i=xms 即延时约 xms 毫秒 for(j=110;j0;j-); 一亩三分地收藏

7、2018-10-14- 4 -例例 3.2.1 编写程序使第一个数码管显示 8(part2.1_.1c P59) #include /52 系列单片机头文件 sbit dula=P26; /申明 U1 锁存器的锁存端 sbit wela=P27; /申明 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 个数码管

8、同时点亮,依次显示 0 到 F,时间间隔为 0.5ms,循环下去。 (part2.1_2.c P61) #include /52 系列单片机头文件 #define uchar unsigned char #define uint unsigned int 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

9、; void delayms(uint); void main() wela=1; /打开 U2 锁存端 P0=0xco; /送入位选信号 wela=0; /关闭 U2 锁存端 while(1) for(num=0;num0;i-) /i=xms 即延时约 xms 毫秒 for(j=110;j0;j-); 例例 3.3.1 第一个数码管显示 1,时间为 0.5s,然后关闭它,立即让第二个数码管显示 2,时 间为 0.5s,在关闭它一直到最后一个数码管显示 6,时间同样为 0.5s,关闭它之后再回 来显示第一个数码管,一直循环下去。 (part2.1_3.c P62) 例例 3.5.2 用定时器

10、 0 的方式 1 实现第一个发光二极管以 200ms 间隔闪烁,用定时器 1 的方 式 1 实现数码管前两位 59s 循环计时。 (part2.1_5.c P75)一亩三分地收藏2018-10-14- 6 -例例 4.1.1 用数码管前两位显示一个十进制数,变化范围为 0059,开始时显示 00,每按下 S2 键一次,数值加 1;每按下 S3 键一次,数值减 1;每按下 S4 键一次,数值归零;按下 S5 键一次,利用定时器功能使数值开始自动每秒加 1,再次按下 S5 键,数值停止加 1,保 持显示原数。 (part2.2_1.c P82) #include /52 系列单片机头文件 #def

11、ine 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 锁存器的锁存端 uchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71; void delayms(uint); uchar numt

12、0,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; P0=0xfd; wela=0;

13、delayms(5); 一亩三分地收藏2018-10-14- 7 -void delayms(uint xms) uint i,j; for(i=xms;i0;i-) /i=xms 即延时约 xms 毫秒 for(j=110;j0;j-); void init() /初始化函数 TMOD=0x01;/设置定时器 0 为工作方式 1(0000 0001) TH0=(65536-45872)/256;/装初值 50ms 一次中断 TL0=(65536-45872)%256; EA=1; /开总中断 ET0=1; /开定时器 0 中断 void keyscan() if(key1=0) delaym

14、s(10); if(key1=0) num+; if(num=60)/当到 60 时重新归 0 num=0; while(!key1);/等待按键释放 if(key2=0) delayms(10); if(key2=0) if(num=0)/当到 0 时重新归 60 num=60; num-; while(!key2); if(key3=0) delayms(10); if(key3=0) num=0; /清 0一亩三分地收藏2018-10-14- 8 -while(!key3); if(key4=0) delayms(10); if(key4=0) while(!key4); TR0=TR0;/启动或停止定时器 0 void main() init();/初始化函数 while(1) keyscan(); display(num); void T0_time() interrupt 1 TH0=(65536-45872)/256;/重装初值 TL0=(65536-45872)%256; numt0+; if(numt0=20)/如果到了 20 次,说明 1 秒时间到 numt0=0;/然后把 num 清 0 重新再计 20 次 num+; if(num=60) num=0; 例例 4

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号