单片机c语言程序设计类型.docx
- 文档编号:156939
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:16
- 大小:247.56KB
单片机c语言程序设计类型.docx
《单片机c语言程序设计类型.docx》由会员分享,可在线阅读,更多相关《单片机c语言程序设计类型.docx(16页珍藏版)》请在冰点文库上搜索。
单片机c语言程序设计类型
上机时间:
第8、12周
实验室S131
单片机实验报告1,单片机I/O口控制实验(必做)
实验时间:
2013年4月XX日
1.两人一组,实验报告每人一本,必须手写,不能打印。
2.实验项目名称,“单片机I/O口控制实验”。
3.实验类型:
演示性实验
4.内容如下,请自行修改
实验目的:
掌握DP-51PRO.NET实验箱的接线及其使用方法。
掌握Keil与实验箱联合操作的方法。
掌握Keil编程、编译的基本方法。
掌握利用单片机的P1口作为输入和输出口的操作方法。
实验设备及器件:
计算机,一台(具有串口)。
DP-51PRO.NET单片机仿真器、编程器、试验仪三合一综合开发平台,一台。
实验内容:
安装Keil,配置实验箱驱动。
实验箱接线。
编写程序,用P1口作为控制端口,使D1区的LED轮流点亮。
实验要求:
能够正确使用实验箱、配置Keil、编程实现LED轮流点亮。
。
实验原理:
Keil和实验箱的联合操作,根据厂家的使用说明书进行操作。
用P1口控制LED的原理如下图,P1口的某根线为低电平的时候,LED点亮,反之熄灭。
实验步骤
1.安装keil8.0或以上。
2.将厂家提供的TKStudy_DEB.dll复制到C:
\Keil\C51\BIN下。
并在C:
\Keil下的TOOLS.ini里面添加如下一行内容
TDRV8=BIN\TKStudy_DEB.dll("TKStudy")
其中的TDRV+某数字,必须根据电脑安装的Keil版本,老版本可能最高是TDRV5,而新版本很可能为TDRV9。
一定要灵活。
同时,该实验箱的DLL文件有好几个,你编译程序的时候会有报告的,观察编译结果就懂了。
如果实在弄不了,直接用优盘去教师演示的机器的Keil相关路径去拷贝与TKS有关DLL文件。
进入Keil,点击Flash/configureflashtools,debug,点击右边的“use”,选中TKStudy,实现Keil与实验箱通信。
3.实验箱接电源线,仿真器接数据线分别接计算机、实验箱,仿真器的电源线接实验箱。
4.用导线把A2区的J61的P1口与D1区的J52的LED相接。
5.用Keil编写流水灯程序,buildtarget编译程序,点击菜单debug,start,run,发现实验箱的LED灯依次点亮并熄灭,实验成功了。
6.调整延时程序,调整接线,观察效果。
参考程序如下:
#include"reg51.h"
inttab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
inti,j;//i用于delay的变量循环次数,j用于显示数组的序号
voiddelay(){for(i=0;i<30000;i++);}
main()
{
while
(1)
{
for(j=7;j>-1;j--){P1=tab[j];delay();}
}
}
写点心得体会
提醒各位老大,那些A51的文件没啥用,删除了。
单片机实验报告2,蜂鸣器的控制(可做可不做)
实验时间:
2013年4月XX日
实验目的:
掌握蜂鸣器的工作原理,掌握控制单片机输出的信号频率、节拍的方法。
实验设备及器件:
同前面的实验。
实验内容:
完成实验箱接线,完成单片机输出连接蜂鸣器。
编写程序,用P1.3控制蜂鸣器,使之发出声音。
实验要求:
能够正确使用实验箱、编译程序,实现蜂鸣器发出声音。
实验原理:
单片机输出高电平,三极管导通,蜂鸣器响,反之不响。
单片机输出的方波,调整频率周期,就能发出音乐。
需要注意两点:
单片机的输出信号较弱,无法直接驱动蜂鸣器,需要通过三极管放大再接到蜂鸣器;Proteus的仿真有所简化,单片机输出可以直接驱动蜂鸣器工作,但在实际当中是不行的!
实验步骤:
1.P1.3连接到蜂鸣器(A2区的J61接口的P13,接到D4区的J8接口的任一引脚)。
编译、加载程序。
完成实验箱的操作。
2.新建Keil工程,编译程序,加载Hex,观察是否能发出声音。
大家也可以自行建立一个Proteus,注意单片机输出端口为P13,把Hex加载到里面,观察是够能够工作。
完整程序如下:
#include"reg51.h"
sbitP1_3=P1^3;
//音调(频率),数值越小声音越低沉,反之越尖。
单片机端口来回取反即可发出该频率的声音。
unsignedcharcodeTABLE[]={0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,
0x82,0x01,0x81,0x94,0x84,0xB4,0xA4,0x04,0x82,0x01,0x81,0x94,0x84,0xC4,0xB4,0x04,
0x82,0x01,0x81,0xF4,0xD4,0xB4,0xA4,0x94,0xE2,0x01,0xE1,0xD4,0xB4,0xC4,0xB4,0x04,0};
//节拍,表示一个音符唱多长的时间
unsignedintcodeTABLE1[]={64260,64400,64524,64580,64684,64777,64820,
64898,64968,65030,65058,65110,65157,65178,65217};
unsignedcharth0_temp,tl0_temp;
voidSING(unsignedcharhi);
voidDELAY(unsignedcharlo);
main()
{unsignedchari,hi,lo,coute;
//单片机定时中断
TMOD=0X01;
//00000001。
低4位,是T0。
0定时,0在TR0/1是启动开始计数,00为13位定时计数。
ET0=1;//允许T0中断
EA=1;//允许所有中断
TR0=1;//restart,1自动计数
while
(1)
{
P1_3=1;//每播放一次都先初始化
coute=0;
while(TABLE[coute]!
=0)//0是TABLE数组中的最后一个
{
i=TABLE[coute];
coute++;
lo=i&0x0f;
hi=(i&0xf0)>>4;
if(hi>0)SING(hi);
elseTR0=0;
DELAY(lo);
}
}
}
voidSING(unsignedcharhi)
{
th0_temp=(TABLE1[hi-1]/256);
TH0=th0_temp;
tl0_temp=(TABLE1[hi-1]%256);
TL0=tl0_temp;
TR0=1;
}
voidDELAY(unsignedcharlo)
{
unsignedchart1,t2;
do
{
for(t1=0;t1<150;t1++)for(t2=0;t2<200;t2++);
}while(lo--);
}
voidINTT0()interrupt1
{
TH0=th0_temp;TL0=tl0_temp;//中断时间到,重新赋值。
P1_3=~P1_3;//端口取反,让喇叭出现通电、断电的效果。
}
各位同学可以根据蜂鸣器的接线位置,自行设计从其他端口进行控制,自行编写让蜂鸣器发出声音的方法。
写点心得体会
单片机实验报告3,步进电机控制实验报告(必做)
1.两人一组做实验,每人写一份实验报告。
必须手写,不能打印。
2.实验项目名称,“步进电机控制实验”。
3.实验类型:
演示性实验
4.内容如下,请自行修改
实验目的:
掌握步进电机的工作原理。
掌握步进电机的工作原理的使用方法。
实验设备及器件:
计算机,一台(有串口)。
DP-51PRO.NET单片机仿真器、编程器、试验仪三合一综合开发平台,一台。
实验内容:
1.根据电路原理,接线。
2.根据步进电机的工作原理编写程序。
3.加载程序到实验箱,控制步进电机实现正转、反转。
实验要求:
能够控制步进电机实现正转、反转。
实验原理:
Keil和实验箱的联合操作,根据厂家的使用说明书进行操作。
用P1口控制步进电机的原理如下图。
步进电机除了2根电源线外,其他4根线被P1口的低4位控制,本实验箱中P10、P11、P12、P13分别控制步进电机的A、B、C、D。
图中的ULN2003A是达林顿管,专用于驱动功率较大的设备。
实验步骤
1.实验室的计算机问题较多,不少已经百毒缠身、软件问题重重。
如有问题,重装keil8.0或以上。
2.将厂家提供的TKStudy_DEB.dll复制到C:
\Keil\C51\BIN下。
并在C:
\Keil下的TOOLS.ini里面添加如下一行内容
TDRV8=BIN\TKStudy_DEB.dll("TKStudy")
其中的TDRV+某数字,必须根据电脑安装的Keil版本,老版本可能最高是TDRV5,而新版本很可能为TDRV9。
一定要灵活。
该实验箱的DLL文件有好几个,你编译程序的时候会有报告的,观察编译结果就懂了。
如果实在弄不了,直接用优盘去教师演示的机器的Keil相关路径去拷贝与TKS有关DLL。
进入Keil,点击Flash/configureflashtools,debug,点击右边的“use”,选中TKStudy,实现Keil与实验箱通信。
3.实验箱接电源线,仿真器接数据线分别接计算机、实验箱,仿真器的电源线接实验箱。
特别是仿真器的并行线,凸出来的向左边。
如果接错,则实验箱开机后,仿真器不会正常闪亮了。
4.C10区的JP6的短路帽,套上。
C10区的J41分别与A2区的P10、P11、P12、P13相连
5.用Keil编写程序。
#include
#defineucunsignedchar
uctab[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//360度8步,注意思考四根线的高低电平变化规律
uck=0;//全局变量
delay(){inti;for(i=0;i<2000;i++);}}//修改数字2000更改延时长短
main()
{
uci;
while
(1)
{
if(k<30)//正转30圈
{
for(i=0;i<8;i++){P1=tab[i];delay();}
}
else//反转10圈
{
for(i=8;i>0;i--){P1=tab[i];delay();}
}
k++;if(k==40)k=0;//转够40次,归零
}
}
6.观察步进电机是否正常工作。
如果没有,请从计算机、实验箱、仿真器、接线、Keil软件、人品问题等方面进行分析。
当然,有些实验箱的步进电机已经损坏,达林顿管和电阻巨热,只能换箱。
7.解释为啥tab[8]里面的数字就能控制步进电机正转、反转。
步进电机的工作原理。
8.实验的心得体会,Proteus仿真和实物测试的区别,各自优点等。
例如,仿真实验灵活,基本上什么实验都能仿真,不能仿真的也可以通过其他方式替代。
什么元件都有,很多元件不容易买到。
不用花钱,实物的买几块小芯片就可能花了几百元,几万元的示波器连学校都没钱买。
实物的设备会烧毁,又得掏钱买,饭钱没了得饿肚子。
实物操作,不小心就被电死成烈士、与电烙铁亲密接触成为伤残之人……
但是,实物测试必不可少。
最终的电子产品还是要做成实物,而且实物和仿真还存在不完全一样的地方。
例如步进电机在仿真中转得挺欢,而在实物中受到摩擦力等因素而造成转速下降。
单片机实验报告4,温度传感器的控制(可做可不做)
实验时间:
2013年6月XX日
1.两人一组,实验报告每人一本,必须手写,不能打印。
2.实验项目名称,“温度传感器的控制”。
3.实验类型:
演示性实验
4.内容如下,请自行修改
实验目的:
掌握常见温度传感器DS18B20的基本原理。
掌握DS18B20的控制方法。
掌握DS18B20采集到得数据的转换和显示方法。
实验设备及器件:
计算机,一台(具有串口)。
DP-51PRO.NET单片机仿真器、编程器、试验仪三合一综合开发平台,一台。
实验内容:
实验箱接线。
编写程序,读取并转换DS18B20采集到的温度数据,用P1口作为数据显示的方法。
对比温度计、天气预报、手的温度影响等,检查温度传感器工作是否正常。
实验要求:
能够正确控制DS18B20并读出、显示数据,验证传感器是否工作正常。
实验原理:
DS18B20具有1-wire(一线式)、电压较宽(3V~5.5V)、测量温度较宽(-55℃~+125℃)、精度较高(±0.5℃)、抗干扰能力强等优点,成为最常见的温度传感器。
每个DS18B20都有一个ID,所以可以把多个DS18B20可以连接在一根导线上从而实现不同位置的一线式温度测量。
它的封装很多,有防水型、纽扣型、挂壁型,基本结构如下图所示。
DS18B20只有一条数据线,这条线既传输时钟,又传输数据,所以读写数据的时候只能一位一位的进行。
DS18B20读写数据都有自己的时序图,遵循相应的时序才能读出所测量的温度值。
实验箱的电路如下图。
实验步骤:
1.接线
首先,将D3区的JP12用短路帽或一根导线接上,给D3区提供电源。
然后,将D3区的J91接到A2区的J58接口的INT1(P3.3)。
最后,问题来了,俺们通常使用LCD1602、LCD12864作为显示芯片,但这个实验箱提供的字符型液晶太高级,咱平时都没见过、没用过,想搞设计也买不起,算了,还是用万能的方法,也就是将采集到的数据输出到某个端口,例如P1口。
因此,P1口的8个引脚接到LED。
2.编写程序
#include
#defineucunsignedchar
#defineuiunsignedint
sbitDQ=P3^3;//ds18b20与单片机连接口
voiddelay_18B20(uii){while(i--);}//延时
voidds1820rst()/*ds1820复位*/
{
DQ=1;//DQ复位
delay_18B20(4);//延时
DQ=0;//DQ拉低
delay_18B20(100);//精确延时大于480us
DQ=1;//拉高
delay_18B20(40);
}
ucds1820rd()/*读数据*/
{
uci=0,dat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)dat|=0x80;
delay_18B20(10);
}
return(dat);
}
voidds1820wr(ucwdata)/*写数据*/
{
uci=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=wdata&0x01;
delay_18B20(10);
DQ=1;
wdata>>=1;
}
}
read_temp()/*读取温度值并转换*/
{
uca,b;
ds1820rst();
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0x44);//启动温度转换
ds1820rst();
ds1820wr(0xcc);//跳过读序列号
ds1820wr(0xbe);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
a=ds1820rd();//读取温度值低位
b=ds1820rd();//读取温度值高位
//例如b=0x01,a=0x91,计算结果为:
0x01*16+0x91/16=1*16+9+(1/16)=25度+0.0625度
a=a>>4;
b=b<<4;
a+=b;//只要整数部分,小数部分省略了^_^
P1=a;//温度数值显示到P1口
}
voidmain(void)
{
while
(1)
{
read_temp();//读取温度
delay_18B20(50000);
}
}
3.测试
如果仿真器接到实验箱没接反、接到计算机的数据线没坏,Keil软件也配置好了,则编译、调试、运行后会发现LED灯部分点亮。
例如某次观察到的结果从P1.7到P1.0为“亮亮亮灭灭亮亮亮”,这就是温度?
众所周知,LED灯一头接VCC,另一头接P1口,因此,P1口的某根线为低电平的,LED点亮,反之熄灭。
也就是0亮1灭。
于是翻译过来就是00011000B=16+8=24度。
打开手机看钦州天气预报,今天是21度到27度,测量的温度落在这个范围,正常。
掏出温度计,正确。
用手轻轻捏住传感器(千万别太用力,这可不是握力器!
),发现温度上升了1度,等一会又上升了1度。
如下图所示。
P1口从高位到低位,亮亮亮灭灭亮灭亮=00011010=16+8+2=26度
4.心得体会
有用。
温度传感器可以广泛应用到工业控制、农业现代化、养殖业和仓库管理等多种场合,以后课程设计、毕业设计也可以派上用场……
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 语言程序设计 类型