郭天祥新概念51单片机C语言教学教程例题.doc

上传人:小** 文档编号:2073967 上传时间:2019-04-15 格式:DOC 页数:148 大小:366.50KB
下载 相关 举报
郭天祥新概念51单片机C语言教学教程例题.doc_第1页
第1页 / 共148页
郭天祥新概念51单片机C语言教学教程例题.doc_第2页
第2页 / 共148页
郭天祥新概念51单片机C语言教学教程例题.doc_第3页
第3页 / 共148页
郭天祥新概念51单片机C语言教学教程例题.doc_第4页
第4页 / 共148页
郭天祥新概念51单片机C语言教学教程例题.doc_第5页
第5页 / 共148页
点击查看更多>>
资源描述

1、.目录例 2.2.1 编写程序,点亮第一个发光二极管(part2_1.c P27 ) .- 4 -例 2.5.1 利用 for 语句延时特性,编写第一个发光二极管以间隔 1S 亮灭闪动的程序(part2_3.c P42) .- 5 -例 2.6.1 编写程序使第一个发光二极管以间隔 500ms 亮灭闪动。 (part2_4.c P48) .- 5 -例 2.7.1 编写程序使第一个二极管以亮 200ms、灭 800ms 的方式闪动。(part2_5.c P49) .- 6 -例 2.8.3 利用 C51 自带库_crol_(),以间隔 500ms,实现流水灯程序(part2_6.c P53)

2、.- 6 -例 3.2.1 编写程序使第一个数码管显示 8(part2.1_.1c P59) .- 7 -例 3.2.2 让实验板上 6 个数码管同时点亮,依次显示 0 到 F,时间间隔为0.5ms,循环下去。 (part2.1_2.c P61) .- 8 -例 3.3.1 第一个数码管显示 1,时间为 0.5s,然后关闭它,立即让第二个数码管显示 2,时间为 0.5s,在关闭它一直到最后一个数码管显示 6,时间同样为 0.5s,关闭它之后再回来显示第一个数码管,一直循环下去。 (part2.1_3.c P62) .- 9 -例 3.5.1 利用定时器 0 工作方式 1,在实验板上实现第一个发

3、光管以 1s 亮灭闪烁。 (part2.1.4.c P74) .- 11 -例 3.5.2 用定时器 0 的方式 1 实现个第一发光二极管以 200ms 间隔闪烁,用定时器 1 的方式 1 实现数码管前两位 59s 循环计时。 (part2.1_5.c P75) .- 12 -例 4.1.1 用数码管前两位显示一个十进制数,变化范围为 0059,开始时显示 00,每按下 S2 键一次,数值加 1;每按下 S3 键一次,数值减 1;每按下S4 键一次,数值归零;按下 S5 键一次,利用定时器功能使数值开始自动每秒加 1,再次按下 S5 键,数值停止加 1,保持显示原数。 (part2.2_1.c

4、 P82)- 14 -例 4.2.1 实验班上电时,数码管不显示,顺序按下矩阵键盘后,数码管上依次显示 0F,六个数码管同时静态显示即可。 ( part2.2_2.c P87) .- 17 -例 5.3.1 用单片机控制 ADC0804 进行数模转换,当拧动实验板上 A/D 旁.边的电位时,在数码管的前三位以十进制方式显示出 A/D 转换后的数字量(8位 A/D 转换后数值在 0255 变化) 。 (part2.3_1.c P107) .- 21 -例 5.5.1 用单片机控制 DAC0832 芯片输出电流,让发光二级管 D12 由灭均匀变到最亮,再由最亮均匀熄灭。在最亮和最暗时使用蜂鸣器分别

5、警报一声,完成整个周期时间控制在 5S 左右,循环变化。 (part2.3_2.c P121) .- 23 -例 6.5.1 在上位机上用串口调试助手发送一个字符 X,单片机收到字符后返回给上位机“I get X”,串口波特率设为 9600bps。 (part2.4_1.c P137) .- 25 -例 6.6.1 单片机上电后等待从上位机串口发来的命令,同时在数码管的前三位以十进制方式显示 A/D 采集的数值,在未收到上位机发送来的启动 A/D 转换命令之前数码管始终显示 000。当收到上位机以十六进制发送来的 01 后,向上位机发送字符串“Turn on ad!”同时间隔 1s 读取一次

6、A/D 的值,然后把 A/D采集回来的 8 位二进制转换成十进制表示的实际电压浮点数,并且从串口发送给上位机,形式如“The voltage is 3.398438V”,发送周期也是一秒一次,同时在数码管上也要每秒刷新现实的数值。当收到上位机以十六进制发送过来的 02后,向上位机发送字符串“Turn off ad!”,然后停止发送电压值,数码管上显示上次结束时保持的值。当收到上位机发来的其他任何数时,向上位机发送字符串“Error!” 。 .- 27 -例 7.2.1 实现 1602 液晶的第一行显示“I LOVE MCU!” ,在第二行显示WWW.TXMCU.COM。 .- 31 -例 7.

7、2.2 实现 1602 第一行从左侧移入“Hello everyone!”同时第二行从右侧移入“Welcome to here!”,移入速度自定,然后停留在屏幕上。 (part2.5_2.c P154) .- 33 -例 7.3.1 实现 12232 液晶的第一行显示“I LOVE MCU!”,第二行显示“我爱单片机” 。 (part2.5_3.c P160) .- 34 -例 7.3.2 实现 12232 液晶第一行从右侧移入“Hello everyone!”,同时第二行从右侧移入“欢迎大家来学习!”移入速度自定,最后停留在屏幕上。(part2.5_4.c P163) .- 37 -例 7.

8、4.1 实现在 12864 液晶上第一行显示“0123456789” ,并且让每一位数字随机变化,第二行显示“ ”,第三行显示 “天祥电子” ,第四行对应第三行显示出下划线。 (part2.5_5.c P173) .- 40 -知识点:生成随机数(part2.5_512232suiji.c P176) .- 44 -例 8.3.1 利用定时器产生一个 099 秒变化的秒表,并且显示在数码管上,每过一秒将这个变化的数写入板上 AT24C02 内部。当关闭实验板电源,并再次打开实验板电源时,单片机先从 AT24C02 中将原来写入的数读取出来,接着此数继续变化并显示在数码管上。 (part2.6_

9、1.c P188) .- 48 -例 10.1.1 利用定时器 0 工作方式 0,在实验板上实现第一个发光管以 1s 亮.灭闪烁。 (part3.1.1.c P203) .- 53 -例 10.2.1 利用定时器 0 工作方式 2,在实验板上实现第一个发光管以 1s 亮灭闪烁。 (part3.1.2.c P204) .- 54 -例 10.3.1 利用定时器工作方式 3,在实验板上实现:用 TL0 计数器对应的 8 位定时器实现第一个发光管以 1s 亮灭闪烁,用 TH0 计数器对应的 8 位定时器实现第二个发光管以 0.5s 亮灭闪烁。 (part3.1.3.c P206) .- 54 -例

10、10.5.1 利用计数器 0 工作方式 1,在实验板上实现:用一根导线一端连接 GND 引脚,另一端去接触 T0(P3.4)引脚,每接触一下,计数器计一次数,将所计的数值实时显示在数码管的前两位,计满 100 时清 0,再从头计起。(part3.1.4.c P214) .- 55 -例 11.1.1 设置单片机串行口的工作模式 0,间隔循环发送十六进制数0xAA,然后用双路示波器观察 P3.0 和 P3.1 口波形。 ( .- 58 -例 11.3.1 用交叉串口线连接两块实验板,或直接用短线交叉线连接连个单片机的 P3.0 和 P3.1 口(共地) 。在一块板上编写矩阵键盘扫描程序,当扫描到

11、有键按下时,将键值通过串口发送出去,另一块板上单片机收到串口发送来的键值后,将对应键值以 0F 方式显示在数码管上。 .- 60 -例 11.4.1 程序分为主机程序和从机程序,约定一次传送的数据为 16B,以02H 地址的从机为例。(图 11.4.2 为多机通信主机程序流程图) .- 65 -图 11.4.3 为多机通信从机程序流程图。 .- 68 -从机程序代码:(part3.2.6.c P234) .- 68 -例 12.8.1 指针使用例程:(point.c P264) .- 71 -例 13.1.1 编写程序实现:开启两个外部中断,设置低电平触发中断,用定时器计数并且显示在数码管的前

12、两位,当计数到 5 时,使单片机进入空闲(休眠)模式,同时关闭定时器,当单片机响应外部中断后,从空闲(休眠)模式返回,同时开启定时器。 ( .- 72 -例 13.2.1 实验板上实现如下描述:程序启动后设定看门狗溢出时间为 2s,然后点亮第一个发光二极管,稍延时一会,然后熄灭发光二极管,使程序进入等待死循环状态,并且在死循环中大约每隔 1s 喂狗一次,看程序运行是否正常。.- 74 -例 13.6.1.在实验板上实现:操作 STC 单片机自带的 E2PROM,存储一组按秒递增的两位数据,并且将数据实时显示在数码管上,数据每变化一次就往E2PROM 中写入一次,当关闭实验板电源并再次开启电源时

13、,从 E2PROM 中读取先前存储的数据,接着递增显示。 .- 77 -.例 13.7.1STC89LE516AD/X2 系列单片机的 A/D 转换功能。时钟11.0592MHz,转换结果以 16 进制形式输出到串行口,可以用串行口调试程序,观察输出结果(本代码摘自宏晶科技芯片手册,经作者调试可正常运行) 。- 80 -例 13.8.1 给出一个 STC12C5412AD 应用的参考程序。 (part3.4.6.c P287)- 82 -程序 14.3.1 利用 51 单片机的定时器设计一个时钟。 .- 89 -程序 15.5.1 使用 DS12C887 时钟芯片设计高精度时钟。 .- 97

14、-程序 16.3.1 使用 TX-1C 实验板上的 DS18B20 温度传感器设计温控系统 C语言源代码(part4.3 P349) .- 108 -程序 17.3.1 太阳能充/放电控制器 C 语言源代码 .- 114 -ISD400x 系列语音芯片 C 语言参考程序: .- 134 -例 21.1.1 使用 TX-1C 实验板上两个独立按键调节直流电机的转速,同时在实验板的数码管上象征性的显示相应的转速值。通过控制单片机输出不同占空比的 PWM 信号来控制直流电机的转速(感性认识) 。 (part5.3 P434) .- 138 -例 21.2.1 步进电机应用 C 语言程序设计(part

15、3.2 P444) .- 142 -例 21.3.1 舵机应用 C 语言程序设计实例:开机时舵机角度自动转为 0 度,通过实验板上的独立按键调节舵机的角度转动,并且在实验板数码管上显示相应的角度。本例仅演示 5 个角度的控制,若想实现任意角度控制请大家自行编程实验。程序代码如下:(part5.3 P453) .- 145 -/调节舵机使之转动 5 个角度 0 45 90 135 180 PWM 信号周期为 20ms, .- 145 -/控制高电平的持续时间即可控制舵机停止制动的角度,0.5ms-0 度 1-45 1.5-90 2-135 2.5-180 .- 145 -/程序流程是:开机时舵机

16、角度自动转为 0 度,按下 P3.7 则转到 45 度,以后就根据两个按键的按下而转动 .- 145 -例 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 语句延时特

17、性,编写第一个发光二极管以间隔 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(i=1000;i0;i-) /延时for(j=110;j0;j-);例 2.6.1 编写程序使第一个发光二极管

18、以间隔 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; /*关闭第一个发光二极管 */delay1s(); /调用延时子函数void delay1s() /子函数体uint i,j;for(i=500;i0;i-)for(j=1

19、10;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; /*点亮第一个发光二极管 */delayms(200); /延时 200 毫秒led1=1; /*关闭第一个发光二极管 */delayms(800); /延时 800 毫秒void

20、 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 /宏定义#define uchar unsigned charvoid delayms(uint); /声明子函数uchar aa;void main() /主函数aa=0xfe; /赋初值 11111110

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

22、=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 intsbit dula=P26; /申明 U1 锁存器的锁存端sbit wela=

23、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 毫秒for(j=110;j0;j-);例 3.3.1 第一个数码管显示 1,时间为 0.5s,

24、然后关闭它,立即让第二个数码管显示 2,时间为 0.5s,在关闭它一直到最后一个数码管显示 6,时间同样为 0.5s,关闭它之后再回来显示第一个数码管,一直循环下去。 (part2.1_3.c P62)#include /52 系列单片机头文件#define uchar unsigned char#define uint unsigned intsbit dula=P26; /申明 U1 锁存器的锁存端sbit wela=P27; /申明 U2 锁存器的锁存端uchar num;unchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

25、0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;void delayms(uint);void main().while(1)dula=1;P0=table1; /送段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱P0=0xfe; /送位选数据wela=0;delayms(500); /延时dula=1;P0=table2; /送段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱P0=0

26、xfd; /送位选数据wela=0;delayms(500); /延时dula=1;P0=table3; /送段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱P0=0xfb; /送位选数据wela=0;delayms(500); /延时dula=1;P0=table4; /送段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱P0=0xf7; /送位选数据wela=0;delayms(500); /延时dula=1;P0=table5; /送段选数据dula=0;P0=0xff; /送位选数据前关闭所有显示,防止打开位选锁存时wela=1; /原来段选数据通过位选锁存器造成混乱

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

当前位置:首页 > 生活休闲资料库

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。