单片机C语言编写程序实验指导书文档格式.doc
《单片机C语言编写程序实验指导书文档格式.doc》由会员分享,可在线阅读,更多相关《单片机C语言编写程序实验指导书文档格式.doc(208页珍藏版)》请在冰豆网上搜索。
![单片机C语言编写程序实验指导书文档格式.doc](https://file1.bdocx.com/fileroot1/2022-10/30/31b1fd32-e00b-4399-9ed1-10ce23ed2950/31b1fd32-e00b-4399-9ed1-10ce23ed29501.gif)
14.4×
4矩阵式键盘识别技术
15.定时计数器T0作定时应用技术
(一)
16.定时计数器T0作定时应用技术
(二)
17.99秒马表设计
18.“嘀、嘀、……”报警声
19.“叮咚”门铃
20.数字钟﹝★﹞
21.拉幕式数码显示技术
22.电子琴
23.模拟计算器数字输入及显示
24.8X8LED点阵显示技术
25.点阵式LED“0-9”数字显示技术
26.点阵式LED简单图形显示技术
27.ADC0809A/D转换器基本应用技术
28.数字电压表
29.两点间温度控制
30.四位数数字温度计
31.6位数显频率计数器
32.电子密码锁设计
33.4×
4键盘及8位数码管显示构成的电子密码锁
34.带有存储器功能的数字温度计-DS1624技术应用
35.DS18B20数字温度计使用
1. 实验任务如图1.1.1所示:
在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2. 电路原理图
图1.1.1
3. 系统板上硬件连线
把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4. 程序设计内容
(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?
下面具体介绍其原理:
如图1.1.1所示的石英晶体为12MHz,因此1个机器周期为1微秒
机器周期微秒
MOVR6,#202个机器周期 2
D1:
MOVR7,#2482个机器周期 2 2+2×
248=498 20×
DJNZR7,$2个机器周期 2×
248 498
DJNZR6,D12个机器周期 2×
20=40 10002
因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×
R5=200ms,则R5=20,延时子程序如下:
DELAY:
MOVR5,#20
MOVR6,#20
D2:
MOVR7,#248
DJNZR7,$
DJNZR6,D2
DJNZR5,D1
RET
(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;
当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;
我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图1.1.2所示
图1.1.2
6.C语言源程序
#include
sbitL1=P1^0;
voiddelay02s(void)//延时0.2秒子程序
{unsignedchari,j,k;
for(i=20;
i>
0;
i--)
for(j=20;
j>
j--)
for(k=248;
k>
k--);
}
voidmain(void)
{while
(1)
{L1=0;
delay02s();
L1=1;
}
2.模拟开关灯
1.实验任务如图1.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
2.电路原理图
图1.2.1
3.系统板上硬件连线
(1).把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上;
(2).把“单片机系统”区域中的P3.0端口用导线连接到“四路拨动开关”区域中的K1端口上;
4.程序设计内容
(1).开关状态的检测过程单片机对开关状态的检测相对于单片机来说,是从单片机的P3.0端口输入信号,而输入的信号只有高电平和低电平两种,当拨开开关K1拨上去,即输入高电平,相当开关断开,当拨动开关K1拨下去,即输入低电平,相当开关闭合。
单片机可以采用JB BIT,REL或者是JNB BIT,REL指令来完成对开关状态的检测即可。
(2).输出控制如图3所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;
5.程序框图
7.C语言源程序
208
sbitK1=P3^0;
{
while
(1)
if(K1==0)
L1=0;
//灯亮
else
//灯灭
1.实验任务如图1.3.1所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。
(开关闭合,对应的灯亮,开关断开,对应的灯灭)。
图1.3.1
(1.把“单片机系统”区域中的P1.0-P1.3用导线连接到“八路发光二极管指示模块”区域中的L1-L4端口上;
(2.把“单片机系统”区域中的P1.4-P1.7用导线连接到“四路拨动开关”区域中的K1-K4端口上;
(1.开关状态检测对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用JB P1.X,REL或JNB P1.X,REL指令来完成;
也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1指令一次把P1端口的状态全部读入,然后取高4位的状态来指示。
(2.输出控制根据开关的状态,由发光二极管L1-L4来指示,我们可以用SETB P1.X和CLR P1.X指令来完成,也可以采用MOV P1,#1111XXXXB方法一次指示。
读P1口数据到ACC中
ACC内容右移4次
ACC内容与F0H相或
ACC内容送入P1口
图1.3.2
7.方法一(C语言源程序)
unsignedchartemp;
temp=P1>
>
4;
temp=temp|0xf0;
P1=temp;
8.方法二(C语言源程序)
if(P1_4==0)
P1_0=0;
P1_0=1;
if(P1_5==0)
P1_1=0;
P1_1=1;
if(P1_6==0)
P1_2=0;
P1_2=1;
if(P1_7==0)
P1_3=0;
P1_3=1;
4.广告灯的左移右移
1.实验任务做单一灯的左移右移,硬件电路如图1.4.1所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。
图1.4.1
3.系统板上硬件连线把“单片机系统”区域中的P1.0-P1.7用8芯排线连接到“八路发光二极管指示模块”区域中的L1-L8端口上,要求:
P1.0对应着L1,P1.1对应着L2,……,P1.7对应着L8。
4.程序设计内容我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。
每次送出的数据是不同,具体的数据如下表1所示:
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
P1.1
P1.0
说明
L8
L7
L6
L5
L4
L3
L2
L1
1
0
L1亮
L2亮
L3亮
L4亮
L5亮
L6亮
L7亮
L8亮
表1
5.程序框图
#include<
AT89X51.H>
unsignedchari;
unsignedchara,b;
voiddelay(void)
unsignedcharm,n,s;
for(m=20;
m>
m--)
for(n=20;
n>
n--)
for(s=248;
s>
s--);
temp=0xfe;
delay();
for(i=1;
i<
8;
i++)
a=temp<
<
i;
b=temp>
(8-i);
P1=a|b;
a=temp>
b=temp<
5.广告灯(利用取表方式)
1.实验任务利用取表的方法,使端口P1做单一灯的变化:
左移2次,右移2次,闪烁2次(延时的时间0.2秒)。
2