单片机c语言程序设计类型Word格式.docx

上传人:b****1 文档编号:361759 上传时间:2023-04-28 格式:DOCX 页数:16 大小:247.56KB
下载 相关 举报
单片机c语言程序设计类型Word格式.docx_第1页
第1页 / 共16页
单片机c语言程序设计类型Word格式.docx_第2页
第2页 / 共16页
单片机c语言程序设计类型Word格式.docx_第3页
第3页 / 共16页
单片机c语言程序设计类型Word格式.docx_第4页
第4页 / 共16页
单片机c语言程序设计类型Word格式.docx_第5页
第5页 / 共16页
单片机c语言程序设计类型Word格式.docx_第6页
第6页 / 共16页
单片机c语言程序设计类型Word格式.docx_第7页
第7页 / 共16页
单片机c语言程序设计类型Word格式.docx_第8页
第8页 / 共16页
单片机c语言程序设计类型Word格式.docx_第9页
第9页 / 共16页
单片机c语言程序设计类型Word格式.docx_第10页
第10页 / 共16页
单片机c语言程序设计类型Word格式.docx_第11页
第11页 / 共16页
单片机c语言程序设计类型Word格式.docx_第12页
第12页 / 共16页
单片机c语言程序设计类型Word格式.docx_第13页
第13页 / 共16页
单片机c语言程序设计类型Word格式.docx_第14页
第14页 / 共16页
单片机c语言程序设计类型Word格式.docx_第15页
第15页 / 共16页
单片机c语言程序设计类型Word格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机c语言程序设计类型Word格式.docx

《单片机c语言程序设计类型Word格式.docx》由会员分享,可在线阅读,更多相关《单片机c语言程序设计类型Word格式.docx(16页珍藏版)》请在冰点文库上搜索。

单片机c语言程序设计类型Word格式.docx

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.心得体会

有用。

温度传感器可以广泛应用到工业控制、农业现代化、养殖业和仓库管理等多种场合,以后课程设计、毕业设计也可以派上用场……

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2