夏季学期单片机学习(一)

这一部分要学习在STC-B学习板上进行的案例测试和硬件相关操作,第一步先把已有的样例看懂吧

1.流水灯案例

程序主体代码如图,可以看到init函数对p0和p2进行了初始化,那么p0和p2是什么呢

在这张图中可以看到,如果我们想使二极管点亮,就需要使得E3为低电平0,所以p2.3就需要被置为1,这也是为什么p2M0被置为0x08的原因

根据数据手册中给出的p2端口工作模式设置,p2M0为0x08,p2m1为0x00,为推挽输出,增加显示亮度

对于p0端口,同样有工作模式设置规则,可以看到p0m0为0xff,p0m1为0x00,这样推算下来是……仅为输入??这部分没大看懂,有时间再问问大神吧

第二个函数delay_ms看起来是一个延时函数,也容易理解他的作用,如果led灯一个接一个闪过去由于视觉暂留的原因是没办法辨别的,所以在这里要让led灯闪烁之间停留一段时间

通过注释了解到这是一个延时1ms的程序,也就是说while循环执行完11*190次经过了1ms,那么每一次也就是1/(11*190)ms,不过这不重要

接下来关注到主函数,前面的截图不全,整体应该是这样的

这样就明朗一些了,首先将端口状态进行初始化,然后led这个参数对应于位选信号,选择哪一位led灯进行点亮,下面设置的死循环保证了硬件层面可以一直执行下去,将led的值赋给p0,在电路图中也看到p0决定了哪些二极管可以被点亮,二极管阴极已经被置为0,所以哪个二极管的阳极为1则哪个点亮,点亮后为了保证人眼有充分的时间辨别下一个二极管的点亮,我们延时200ms,下面的语句用来判断led灯是否已经点亮到电路板最左边的一个,如果是,为了实现循环点亮的功能,将led重新赋值为0x01,否则向左移动一位,点亮下一个二极管即可。

//这是第一次写博客,感觉和大神们的博客真的是没法比,就当做自己的学习笔记吧

//文中有一些问题的思考其实是模糊的,明天找时间去把这些弄明白再修改

猜你喜欢

转载自blog.csdn.net/LieberVater/article/details/81107234