单片机c语言程序设计类型Word格式.docx
《单片机c语言程序设计类型Word格式.docx》由会员分享,可在线阅读,更多相关《单片机c语言程序设计类型Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
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,蜂鸣器的控制(可做可不做)
掌握蜂鸣器的工作原理,掌握控制单片机输出的信号频率、节拍的方法。
同前面的实验。
完成实验箱接线,完成单片机输出连接蜂鸣器。
编写程序,用P1.3控制蜂鸣器,使之发出声音。
能够正确使用实验箱、编译程序,实现蜂鸣器发出声音。
单片机输出高电平,三极管导通,蜂鸣器响,反之不响。
单片机输出的方波,调整频率周期,就能发出音乐。
需要注意两点:
单片机的输出信号较弱,无法直接驱动蜂鸣器,需要通过三极管放大再接到蜂鸣器;
Proteus的仿真有所简化,单片机输出可以直接驱动蜂鸣器工作,但在实际当中是不行的!
实验步骤:
1.P1.3连接到蜂鸣器(A2区的J61接口的P13,接到D4区的J8接口的任一引脚)。
编译、加载程序。
完成实验箱的操作。
2.新建Keil工程,编译程序,加载Hex,观察是否能发出声音。
大家也可以自行建立一个Proteus,注意单片机输出端口为P13,把Hex加载到里面,观察是够能够工作。
完整程序如下:
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);
{unsignedchari,hi,lo,coute;
//单片机定时中断
TMOD=0X01;
//00000001。
低4位,是T0。
0定时,0在TR0/1是启动开始计数,00为13位定时计数。
ET0=1;
//允许T0中断
EA=1;
//允许所有中断
TR0=1;
//restart,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;
voidDELAY(unsignedcharlo)
unsignedchart1,t2;
do
for(t1=0;
t1<
150;
t1++)for(t2=0;
t2<
200;
t2++);
}while(lo--);
voidINTT0()interrupt1
TL0=tl0_temp;
//中断时间到,重新赋值。
P1_3=~P1_3;
//端口取反,让喇叭出现通电、断电的效果。
各位同学可以根据蜂鸣器的接线位置,自行设计从其他端口进行控制,自行编写让蜂鸣器发出声音的方法。
单片机实验报告3,步进电机控制实验报告(必做)
1.两人一组做实验,每人写一份实验报告。
必须手写,不能打印。
2.实验项目名称,“步进电机控制实验”。
掌握步进电机的工作原理。
掌握步进电机的工作原理的使用方法。
计算机,一台(有串口)。
1.根据电路原理,接线。
2.根据步进电机的工作原理编写程序。
3.加载程序到实验箱,控制步进电机实现正转、反转。
能够控制步进电机实现正转、反转。
用P1口控制步进电机的原理如下图。
步进电机除了2根电源线外,其他4根线被P1口的低4位控制,本实验箱中P10、P11、P12、P13分别控制步进电机的A、B、C、D。
图中的ULN2003A是达林顿管,专用于驱动功率较大的设备。
1.实验室的计算机问题较多,不少已经百毒缠身、软件问题重重。
如有问题,重装keil8.0或以上。
2.将厂家提供的TKStudy_DEB.dll复制到C:
该实验箱的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<
reg51.h>
#defineucunsignedchar
uctab[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};
//360度8步,注意思考四根线的高低电平变化规律
uck=0;
//全局变量
delay(){inti;
for(i=0;
2000;
}}//修改数字2000更改延时长短
uci;
if(k<
30)//正转30圈
for(i=0;
8;
i++){P1=tab[i];
else//反转10圈
for(i=8;
i>
0;
i--){P1=tab[i];
k++;
if(k==40)k=0;
//转够40次,归零
6.观察步进电机是否正常工作。
如果没有,请从计算机、实验箱、仿真器、接线、Keil软件、人品问题等方面进行分析。
当然,有些实验箱的步进电机已经损坏,达林顿管和电阻巨热,只能换箱。
7.解释为啥tab[8]里面的数字就能控制步进电机正转、反转。
步进电机的工作原理。
8.实验的心得体会,Proteus仿真和实物测试的区别,各自优点等。
例如,仿真实验灵活,基本上什么实验都能仿真,不能仿真的也可以通过其他方式替代。
什么元件都有,很多元件不容易买到。
不用花钱,实物的买几块小芯片就可能花了几百元,几万元的示波器连学校都没钱买。
实物的设备会烧毁,又得掏钱买,饭钱没了得饿肚子。
实物操作,不小心就被电死成烈士、与电烙铁亲密接触成为伤残之人……
但是,实物测试必不可少。
最终的电子产品还是要做成实物,而且实物和仿真还存在不完全一样的地方。
例如步进电机在仿真中转得挺欢,而在实物中受到摩擦力等因素而造成转速下降。
单片机实验报告4,温度传感器的控制(可做可不做)
2013年6月XX日
2.实验项目名称,“温度传感器的控制”。
掌握常见温度传感器DS18B20的基本原理。
掌握DS18B20的控制方法。
掌握DS18B20采集到得数据的转换和显示方法。
编写程序,读取并转换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<
reg51.H>
#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
//拉高
delay_18B20(40);
}
ucds1820rd()/*读数据*/
uci=0,dat=0;
for(i=8;
i--)
//给脉冲信号
dat>
=1;
DQ=1;
if(DQ)dat|=0x80;
delay_18B20(10);
return(dat);
voidds1820wr(ucwdata)/*写数据*/
uci=0;
i>
i--)
DQ=0;
DQ=wdata&
0x01;
delay_18B20(10);
wdata>
read_temp()/*读取温度值并转换*/
{
uca,b;
ds1820rst();
ds1820wr(0xcc);
//跳过读序列号
ds1820wr(0x44);
//启动温度转换
//跳过读序列号
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>
b=b<
<
a+=b;
//只要整数部分,小数部分省略了^_^
P1=a;
//温度数值显示到P1口
voidmain(void)
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.心得体会
有用。
温度传感器可以广泛应用到工业控制、农业现代化、养殖业和仓库管理等多种场合,以后课程设计、毕业设计也可以派上用场……