新概念51单片机C语言教程--入门提高开发拓展全攻略.pdf
《新概念51单片机C语言教程--入门提高开发拓展全攻略.pdf》由会员分享,可在线阅读,更多相关《新概念51单片机C语言教程--入门提高开发拓展全攻略.pdf(142页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、新 概 念 5 1单 片 机 C语 言 教 程-入 门、提 高、开 发、拓 展 全 攻 略 郭 天 祥 编 著 电 子 工 业 出 版 社 例 2.2.1编 写 程 序,点 亮 第 一 个 发 光 二 极 管(part2_l.c P27)#include/5 2系 列 单 片 机 头 文 件 sbitledl=PO;声 明 单 片 机 Pl 口 的 第 一 位 void main()主 函 数(led 1=0;/*点 亮 第 一 个 发 光 二 极 管*/例 2.2.2编 写 程 序,点 亮 P1 口 的 若 干 二 极 管(part2_2.c P39)#include/5 2系 列 单 片
2、机 头 文 件 void main()主 函 数(Pl=0 xaa;/while(l);例 2.5.1利 用 for语 句 延 时 特 性,编 写 第 一 个 发 光 二 极 管 以 间 隔 1S亮 火 闪 动 的 程 序(part2_3.cP42)include/5 2系 列 单 片 机 头 文 件#define uint unsigned int 宏 定 义 sbitledl=PO;声 明 单 片 机 Pl 口 的 第 一 位 uint i,j;void main()主 函 数(while(l)/大 循 环(led 1=0;/*点 亮 第 一 个 发 光 二 极 管*/for(i=1;i0
3、;i)延 时 for(j=HO;j0;j-);ledl=l;/*关 闭 第 一 个 发 光 二 极 管*/for(i=1000;i0;i-)/延 时 for(j=110;j0;j-);例 2.6.1编 写 程 序 使 第 一 个 发 光 二 极 管 以 间 隔 500ms亮 灭 闪 动。(part2_4.c P48)#include#define uint unsigned intsbit led 1=P1AO;void delay ls();/5 2系 列 单 片 机 头 文 件 宏 定 义 声 明 单 片 机 Pl 口 的 第 一 位 声 明 子 函 数 void main()主 函 数
4、twhile(l)led 1=0;delay ls();ledl=l;delay ls();大 循 环/*点 亮 第 一 个 发 光 二 极 管*/调 用 延 时 子 函 数/*关 闭 第 一 个 发 光 二 极 管*/调 用 延 时 子 函 数 void delay ls()子 函 数 体 uint i,j;for(i=500;i0;i-)for(j=U0;j0;j-);)例 2.7.1编 写 程 序 使 第 一 个 二 极 管 以 亮 200ms、灭 800m s的 方 式 闪 动。(part2_5.c P49)include/5 2系 列 单 片 机 头 文 件#define uint
5、unsigned int 宏 定 义 sbit ledl=Pl A0;void delayms(uint);void main()(while(l)(led 1=0;delayms(200);ledl=l;delayms(800);)void delayms(uint xms)(uint i,j;for(i=xms;i0;i-)for(j=H0;j0;j-);声 明 单 片 机 Pl 口 的 第 一 位 声 明 子 函 数 主 函 数/大 循 环/*点 亮 第 一 个 发 光 二 极 管*/延 时 200毫 秒/*关 闭 第 一 个 发 光 二 极 管*/延 时 800毫 秒/i=xm s即
6、延 时 约 xm s毫 秒例 2.8.3利 用 C 5 1自 带 库 _crol_(),以 间 隔 5 0 0 m s,实 现 流 水 灯 程 序(part2_6.c P53)#include#include#define uint unsigned int#define uchar unsigned charvoid delayms(uint);uchar aa;/5 2系 列 单 片 机 头 文 件 宏 定 义 声 明 子 函 数 void main()(aa=0 xfe;while(l)主 函 数 赋 初 值 11111110/大 循 环 Pl=aa;delayms(500);aa=_c
7、rol_(aa,1);/延 时 500毫 秒 将 a a循 环 左 移 1位 后 再 赋 给 aavoid delayms(uint xms)uint i,j;for(i=xms;i0;i)for(j=110;j0;j-);/i=xm s即 延 时 约 xm s毫 秒例 3.2.1编 写 程 序 使 第 一 个 数 码 管 显 示 8(part2.1_.lc P59)#include/5 2系 列 单 片 机 头 文 件 sbit dula=P2A6;申 明 U 1锁 存 器 的 锁 存 端 sbit vela=P2A7;void main()申 明 U 2锁 存 器 的 锁 存 端 Iwel
8、a=1;打 开 U 2锁 存 器 P0=0 xFE;送 入 位 选 信 号 wela=0;关 闭 U 2锁 存 器 dula=l;/打 开 U 1锁 存 器 P0=0 x7F;/送 入 段 选 信 号 dula=0;/关 闭 U 2锁 存 器 while(l);程 序 停 止 到 这 里 例 3 2 2 让 实 验 板 上 6 个 数 码 管 同 时 点 亮,依 次 显 示 0 到 F,时 间 间 隔 为 0.5 m s,循 环 下 去。(part2.1_2.c P61)include/5 2系 列 单 片 机 头 文 件#define uchar unsigned char#define u
9、int unsigned intsbit dula=P2A6;申 明 U I锁 存 器 的 锁 存 端 sbit vela=P2A7;申 明 U 2锁 存 器 的 锁 存 端 uchar num;unchar code table=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 x39,0 x5e,0 x79,0 x71;void delayms(uint);void main()(wela=l;/打 开 U 2锁 存 端 P0=0 xco;送 入 位 选 信 号 wela=0;/关 闭 U 2
10、锁 存 端 while(l)(for(num=0;num 16;num+)/16 个 数 循 环 显 示(dula=l;/打 开 U I锁 存 端 P0=tablenumJ;送 入 段 选 信 号 dula=0;关 闭 U 1锁 存 端 delay(500);延 时 0.5 秒void delayms(uint xms)uint i,j;for(i=xms;i0;i)/i=xms 即 延 时 约 xms 毫 秒 for(j=H0;j0;j-);)例 3.3.1第 一 个 数 码 管 显 示 1,时 间 为 0.5 s,然 后 关 闭 它,立 即 让 第 二 个 数 码 管 显 示 2,时 间
11、为 0.5s,在 关 闭 它 一 直 到 最 后 一 个 数 码 管 显 示 6,时 间 同 样 为 0.5 s,关 闭 它 之 后 再 回 来 显 示 第 一 个 数 码 管,一 直 循 环 下 去。(part2.1_3.c P62)#include/5 2系 列 单 片 机 头 文 件#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;/申 明 U 1锁 存 器 的 锁 存 端 sbit vela=P2A7;申 明 U 2锁 存 器 的 锁 存 端 uchar num;unchar code table=0
12、x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;void delayms(uint);void main()(while(l)(dula=1;P0=tablel;送 段 选 数 据 dula=0;P0=0 xff;送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时 wela=l;原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱 P0=0 xfe;/送 位 选 数 据 wela=0;delayms(500);
13、/延 时 dula=l;P0=table2;送 段 选 数 据 dula=0;PO=Oxff;送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时 wela=l;/原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱 P0=0 xfd;/送 位 选 数 据wela=O;delayms(500);延 时 dula=l;P0=table3;送 段 选 数 据 dula=O;PO=Oxff;送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时 wela=l;原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱 P
14、O=Oxfb;送 位 选 数 据 wela=O;delayms(500);延 时 dula=l;P0=table4;送 段 选 数 据 dula=O;PO=Oxff;送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时 wela=1;原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱 P0=0 xf7;送 位 选 数 据 wela=O;delayms(500);延 时 dula=l;P0=table5J;送 段 选 数 据 dula=O;PO=Oxff;送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时 wela=l
15、;原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱 PO=Oxef;送 位 选 数 据 wela=O;delayms(500);/延 时 dula=l;P0=table6;送 段 选 数 据 dula=O;PO=Oxff;送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时 wela=1;原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱 PO=Oxdf;送 位 选 数 据 wela=O;delayms(500);延 时)void delayms(uint xms)uintij;for(i=xms;i0;i)/i=xms 即 延
16、时 约 xms 毫 秒for(j=110;j0;j-);例 3 5 1 利 用 定 时 器。工 作 方 式 1,在 实 验 板 上 实 现 第 一 个 发 光 管 以 1s亮 灭 闪 烁。(part2.L4.cP74)#include/5 2系 列 单 片 机 头 文 件#define uchar unsigned char#define uint unsigned intsbit ledl=PlAO;uchar num;void mainQTMOD=0 x01;设 置 定 时 器 0 为 工 作 方 式 1(M IM O为 01)TH0=(65536-45872)/256;/装 初 值 11
17、.0592M 晶 振 定 时 50ms 数 为 45872TL0=(65536-45872)%256;EA=1;开 总 中 断 ETO=1;开 定 时 器 0 中 断 TRO=1;/启 动 定 时 器 0whiled);程 序 停 止 在 这 里 等 待 中 断 中 断 发 生 void T0_time()interrupt 1(TH0=(65536-45872)/256;重 装 初 值 TL0=(65536-45872)%256;num+;/num每 加 1次 判 断 一 次 是 否 到 2 0次 if(num=20)如 果 到 了 2 0次,说 明 1秒 时 间 到(num=0;然 后 把
18、 num清 0 重 新 再 计 2 0次 ledl二 ledl;让 发 光 管 状 态 取 反 例 3.5.2用 定 时 器 0 的 方 式 1实 现 第 一 个 发 光 二 极 管 以 200m s间 隔 闪 烁,用 定 时 器 1的 方 式 1实 现 数 码 管 前 两 位 59s循 环 计 时。(part2.1_5.c P75)#include/5 2系 列 单 片 机 头 文 件#define uchar unsigned char#define uint unsigned intsbit dula=P2A6;申 明 U I锁 存 器 的 锁 存 端 sbit vela=P2A7;申
19、明 U 2锁 存 器 的 锁 存 端 sbit ledl=PlAO;unchar code table=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 x39,Ox5e,0 x79,0 x71);void delayms(uint);void display(uchar,uchar);uchar num,num 1,num2,shi,ge;void main()TMOD=Oxll;设 置 定 时 器 0 为 工 作 方 式 1(M IM O为 11)TH0=(65536-45872)/256;装
20、 初 值 11.0592M 晶 振 定 时 50ms 数 为 45872TL0=(65536-45872)%256;TH 1=(65536-45872)/256;/装 初 值 11.0592M 晶 振 定 时 50ms 数 为 45872TLl=(65536-45872)%256;EA=1;开 总 中 断 ET0=l;开 定 时 器 0 中 断 ET1=1;开 定 时 器 1中 断 TR0=l;启 动 定 时 器 0TR1=1;/启 动 定 时 器 1while(l);程 序 停 止 在 这 里 等 待 中 断 中 断 发 生(display(shi,ge);)void display(uch
21、ar shi,uchar ge)显 示 子 函 数 dula=l;PO=tableshi;dula=0;PO=Oxff;wela=1;P0=0 xfe;wela=0;送 段 选 数 据 送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打 开 位 选 锁 存 时/原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱/送 位 选 数 据 delayms(5);延 时 dula=l;PO=tablege;送 段 选 数 据 dula=0;PO=Oxff;wela=1;PO=Oxfd;wela=0;delayms(5);送 位 选 数 据 前 关 闭 所 有 显 示,防 止 打
22、开 位 选 锁 存 时/原 来 段 选 数 据 通 过 位 选 锁 存 器 造 成 混 乱/送 位 选 数 据 延 时void delayms(uint xms)uint ij;for(i=xms;i0;i)/i=xms 即 延 时 约 xms 毫 秒 for(j=110;j0;j-);)void T0_time()interrupt 1(TH0=(65536-45872)/256;重 装 初 值 TL0=(65536-45872)%256;num+;if(numl=4)f 如 果 到 了 4 次,说 明 200m s时 间 到 Inum 1=0;ledl=-ledl;/然 后 把 n u m
23、 l清 0 重 新 再 计 4 次 让 发 光 管 状 态 取 反 void Tl_time()interrupt 3(TH 1=(65536-45872)/256;重 装 初 值 TLl=(65536-45872)%256;num2+;if(num2=20)(num2=0;num+;如 果 到 了 2 0次,说 明 1秒 刷 新 时 间 到/然 后 把 num 2清 0 重 新 再 计 4 次 if(num=60)/这 个 数 用 来 送 数 码 管 显 示,到 6 0后 归 0num=0;shi=num/10;ge=num%10;/把 一 个 2 位 数 分 离 后 分 别 送 数 码 管
24、 显 示/十 位 和 个 位例 4.1.1用 数 码 管 前 两 位 显 示 一 个 十 进 制 数,变 化 范 围 为 0 0 5 9,开 始 时 显 示 0 0,每 按 下 S2键 一 次,数 值 加 1;每 按 下 S 3键 一 次,数 值 减 1:每 按 下 S 4键 次,数 值 归 零;按 下 S5键 一 次,利 用 定 时 器 功 能 使 数 值 开 始 自 动 每 秒 加 1,再 次 按 下 S 5键,数 值 停 止 加 1,保 持 显 示 原 数。(part2.2_l.c P82)include 5 2系 列 单 片 机 头 文 件#define uchar unsigned
25、char#define uint unsigned intsbit keyl=P3A4;sbit key2=P3A5;sbit key3=P3A6;sbit key4=P3A7;sbit dula=P2A6;申 明 U I锁 存 器 的 锁 存 端 sbit wela=P2A7;申 明 U 2锁 存 器 的 锁 存 端 uchar code tableJ=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 x39,0 x5e,0 x79,0 x71);void delayms(uint);uchar
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新概念 51 单片机 语言 教程 入门 提高 开发 拓展 攻略
限制150内