❶ 学单片机都可以做哪些有趣的实验
我和单片机打了5年交道了,从大2开始。 我的心得:单片机不是用来学的,是用来玩的。初学者建议您用AVR,51就别学了,不是因为它老,是因为AVR涵盖的知识多,学会了AVR别的你就全明白了,不建议你以后用汇编编程,但是建议你看一下汇编程序,了解单片机内部工作原理。 学单片机之前先把C语言弄透,以后会少走好多弯路。 至于实验初学者可以先学流水灯、矩阵按键、数码管扫描,完后玩一点更稍级的18B20、DS1302、LED屏幕、液晶等,这些都会了你就算‘明白’单片机了,然后往更高层次发展。 单片机是工具,它需要你具备一定的模拟、数字基础知识,学这些都不难,最难的是坚持学下去。手机上、MP3上的控制芯片现在用的是ARM,这算是一种更高级的单片机,这就是单片机和电子的关系。单片机是一种潮流,推动电子往更高层次发展的潮流。 我们老师告诉我一句话:切忌做浮躁的单片机工程师,与其整日把时髦的技术挂在嘴边,不如把最基本的东西牢牢记在心里,学习单片机并不难,难的事坚持不懈的学习下去。 我想这就是学习单片机的诀窍。 然后的问题是程序下载器,这个有卖的,ISP下载线就可以,大约三四十块钱,也可以自己做,ouravr.com上也能找到电路图,至于编译器建议你用WINAVR,在这个网站上也有下载链接,这些都OK了之后下载一份Mega16的芯片说明书,然后买一本马潮老师写的单片机原理,在这个网上可以订得到,我是在书店买的,你要是有什么不会的话,在网站论坛上留言他会给你解答,这个网站对我的帮助很大,是一个纯技术的网站,所有源码公开,我的AVR就是在这里学会的。呵呵,看起来像是做广告,不过这个网站的学习环境远远比混乱的现实世界好~ 记住:最难能可贵的就是坚持,坚持下去!
❷ 单片机串行通信实验
1、实验:用单片机串行口,实现两个实验台之间的串行通讯。其中一个实验台作为发送方,
另一侧为接收方。发送方读入按键值,并发送给接收方,接收方收到数据后在LED上显示
2、原理:串行通信是指数据按位顺序传送的通信。串行数据传送的特点是:通信线路简单,最多只需一对传输线即可实现通信,成本低但速度慢,其通信线路既能传送数据信息,又能传送控制信息。它对信息的传送格式有固定要求,具体分为异步和同步两种信息格式.与此相应有异步通信和同步通信两种方式;在串行通信中,对信息的逻辑定义与TTL不兼容,需要进行逻辑电平转换:计算机与外界的数据传送大多是串行的,其传送的距离可以从几米到几千公里。单片机中使用的串行通信通常都是异步方式的
3、实验目的:1)掌握单片机串行口工作方式的程序设计,及简易三线式通讯的方法。 2)了解实现串行通讯的硬环境、数据格式的协议、数据交换的协议。 3)学习串口通讯的中断方式的程序编写方法
4、参考实现:
http://wenku..com/link?url=uyYKlkBQqwjGl-akFJ3xWa67R814ShF50uwd3
❸ 51单片机的实验一般都有哪些
12864液晶显示器,AD(电压表),LED渐亮渐灭(PWM),遥控解码,温度传感器采样,单片机播放音乐。。。。。。
❹ 单片机基础实验
1、
Loop:
mov a, #01h
mov r2, #8
Output:
mov P1, a
rl a
call Delay
djnz r2, Output
ljmp Loop
Delay:
mov r6, #0
mov r7, #0
DelayLoop:
djnz r6, DelayLoop
djnz r7, DelayLoop
ret
end
#include <reg51.h>
void delay()
{
unsigned int i;
for (i=0; i<20000; i++) {}
}
void main()
{
unsigned char index;
unsigned char LED;
while (1) {
LED = 1;
for (index=0; index < 8; index++) {
P1 = LED;
LED <<= 1;
delay();
}
}
}
2、
CS273 equ 8000h
mov dptr, #CS273
mov a,P1
movx @dptr, a
end
❺ 单片机有哪些设计实验
因为单片机内部有循环体,所以不加循环可以不断循环,但延时较长,所以应该自己加上一个循环体~~
❻ 单片机实验内容及结果分析
熟悉单片机的原理、结构;学好数电、模电,为设计电路打好基础;熟练使用C语言,多学习他人的程序;对操作系统原理有一定的了解,Protel有一定的基础;培养实际动手调试电路的能力。一般可以通过专业的书籍和课程进行持之以恒的学习,注意理论与实践并重,遇到问题耐心检查并适当投资购买实验器材。
❼ 单片机实验
你只要知道怎么控制IO就可以了。不知道你的LED是采用什么方式接入P1口的,如果是LED正极经过限流电阻接正电源,负极接P1口的话,那么就是当P1口某个引脚为低电平时,LED点亮。
这样的话,你这个1357,2468不知道是先亮1,然后1灭了换3,在3灭换5亮。。还是1357同时亮,然后2468同时亮,不过我告诉你思路你自己就编程了
先使P1=0XFF这样所有LED均熄灭。
然后因为1357实际对应的P1口IO是P1.0,P1.2,P1.4,P1.6, 那么如果需要他们点亮,因为上面我说的是P1的某个IO为低电平,LED点亮,那么给P1口我上面说的这几个IO变为低电平就可以了。
即二进制的P1.7->P1.0(高->低)10101010.换算为16进制就是0XAA(如果是要1亮,然后变成1灭3亮。。。。这样的话只需要P1.0先为低电平,即二进制的11111110 16进制的0xFE然后P1.0变为高电平P1.2为低电平,即二进制的11111011,16进制的0xFB,依次算出16进制对应的数,当7单独亮时就是01111111,16进制的0x7F,2,4,6,8一样,我就不在说了)
这样让P1口=0xAA就可以实现你所说的1,3,5,7亮了
同理,2,4,6,8就是P1.1,P1.3,P1.5,P1.7换算为二进制就是01010101即16进制的0x55.
让P1口=0x55就可以了
另外因为单片机执行程序的速度很快,所以你如果是
P1=0XAA
P1=0X55这样的话可以说你看来根本就是8个LED同时亮着。所以需要在每句下面加个延时函数使每个亮0.几秒钟,使眼睛可以看到他们的变化
所以要做个延时函数
void delay(unsigned char i)
{
unsigned char j,k;
for (j=i,j>0,j--)
{
for(k=255,k>0,k--);
}
}
调用时只需要给delay函数赋值就可以了
比如
P1=0XAA;
delay(200);
P1=0X55;
delay(200);
其他的就你自己写了。。
我靠。。刚看你写的是要汇编的。。
那么上面P1=0XAA这些就要改成
MOV P1,#AAH
MOV P1,#55H
延时就需要这样了
DELAY:
MOV R0,#200
DELAY1:
MOV R1,#255
DELAY:
DJNZ R1,DELAY
DJNZ R0,DELAY1
RET
这样你上面就是
MAIN:
MOV P1,#AAH
CALL DELAY
MOV P1,#55H
CALL DELAY
SJMP MAIN
❽ 51单片机应该做哪些实验
如果是刚开始学习的话,那就买一块开发板,比如笃行之家的,一般的开发板都会配套好多实验,你可以先学习基本的实验,如流水灯,数码管,点阵,lcd显示,红外,AD/DA,继电器,蜂鸣器等,学完了之后就可以拔高练习。
❾ 单片机点亮一个led的实验目的
任何单片机程序都要有一个死循环,否则程序执行到底了,然后怎么办。没有这个死循环,单片机从0地址重新运行,整个系统重新初始化,会导致IO口复位,运行的很快的话,就看到别的灯微亮。at89s52也是51系列的单片机,程序完全兼容,用51的程序就行了,包括外围电路也一样,直接用就行了。 单灯亮就是在io口输出一个二进制数中只有一位不同的数,比如说“00000001”,就只有最后一位是“1”,其余的都是“0”,要双灯亮就使其中的两位与其他的不同就行了,还是那上面的例子来说,现在改成“00000011”,这样有两位是不用的了,当然不同的两位也可以不挨着,比如“00100001”,这样也是两位同时点亮。(例子的前提是输出高电平时led点亮,如果不是的话就把里面的“0”改成“1”,“1”改成“0”就行了。出现这种问题我感觉有一下几点原因,你可以逐个排查下,如果程序下载成功,说明单片机电源应该没有问题,那就需要看已下几点
1.看你的程序是不是编写的不对,主要看你的IO口配置是否正确,IO口的高低电平是不是写错了,IO口电平翻转时,中间是不是延时太短,延时太短的话,人眼看不出来。
2.硬件方面的话,你就看看你的指示灯是不是接错了
3.你看一下你的单片机晶振是不是符合你单片机的型号
4.看一下,晶振旁边的电容是不是焊错了
如果这些都没有问题的话,那只能说你的程序肯定有问题,或者程序没有下载成功。