(1小时学会C语言51单片机)C语言入门教程

Python019

(1小时学会C语言51单片机)C语言入门教程,第1张

51作为学习入门,确实是最最基础的了,不过至少它可以让一个新手明白控制是怎么回事,反馈是怎么回事,程序是怎么下载进去运行,又是怎么控制到io输入输出的,如何去访问寄存器,掌握一套在嵌入式领悟最最基本的开发方法和学习思路。这部分如果有兴趣,建议学习时间不要超过两个月。

1.c语言,及部分汇编代码

2.用一个月时间看完做完郭天祥的十天学会51单片机

3.买一块开发板

4.学习能够看懂看会原理图

5.掌握搜集资料,datasheet查找阅读英文手册的能力

6.自己动手动手动手做一个简单的功能

最后,我其实不建议51入门,可以直接stm32,虽然他还是单片机。不过十年前我当初也是51入门的,乐此不疲。至于忽悠你什么协议,内核,我觉得让一个大一嵌入式新手学这些,无疑没有基础就想建高楼,所以踏踏实实从基础开始,大学就是注重基础,学习能力!

你这是有开发板做测试吧。

从你的程序,到你得出的三个结论,最关键的问题就是你对单片机执行程序的速度理解不够造成的,用你思考问题的速度(相当慢的)来考虑单片机的速度(是人思考问题的速度的几千倍,几万倍),所以,得出了错误的结论。

1,实际运行情况是按了一次可以闪烁。可能你只做了一次测试,就得出了这个结论。如果你多做几次,而且每次按键的时间都不同,就会发现有时能闪烁,有时就是灭的,没有规律。

原因:if(K1==0)

{

DELAY_MS(5)

if(K1==0) key=~key

}

这段程序在你按下键并没有松开的时候,并不是只执行一次的,是很多次,与你按键时间长短有关,就是因为单片机执行程序的速度是快的,你慢的思维去考虑就出错了。 key=~key也就变化很多次,是什么,不确定了。

因为按住不松,while(K1==1)条件不满足,就不会闪烁。直到松开,也恰好key=1了,就进入while(K1==1)循环闪烁了。

当你执行多次,按键时间长短不同,就有不会闪烁的时候,那就是key=0了。

2,再按一次却不能关闭。是可能关闭的。如果进入 闪烁状态,再按一次,能否关闭,也不确定,因为key=~key变化还不是一次,还不确定。

3,K1==0应该跳出循环,但是跳不出。其实是可以跳出循环的。

这是因为在闪烁状态下,按键松开的状态下,

while(K1==1)//标记

{

LED1=0

DELAY_MS(1000)//延时长

LED1=1

DELAY_MS(1000)

}要执行完这个循环闪烁,这可是有两个延时的,你再次按键的时间要足够长,等这两个延时结束,才能再判断上面的if(K1==0)。而第二次你按键的时间肯定是短的,所以,误以为不能跳出循环的,但,是可以的,只你按键够长。可是,跳出循环,再按键,是什么状态,还是不确定。

根据以上的分析,你的程序应该怎么改,应该知道了吧。