历史上的今天
今天是:2025年06月27日(星期五)
2020年06月27日 | STM8 IO输出之LED显示程序
2020-06-27 来源:eefocus
系统功能
使用STM8控制8位LED,演示STM8单片机流水灯。
硬件设计
关于STM8的I/O结构及相关介绍详见Datasheet,这里仅对作部分简单介绍,下面是STM8的I/O引脚配置表:
STM8 I/O 口引脚配置表
Px_DDR Px_CR1 Px_CR2 I/O 方式 引脚状态说明
0 0 0 输入 悬浮输入
0 0 1 输入 上拉输入
0 1 0 输入 中断悬浮输入
0 1 1 输入 中断上拉输入
1 0 0 输出 开漏输出
1 1 0 输出 推挽输出
1 X 1 输出 输出(最快速度为10MHZ)
虽然STM8的I/O口单独输出“1”时,可输出较大电流足已点亮一盏灯,但STM8总的I/O输出毕竟是有限的,所以,有经验的点灯者考虑到除了点灯外可能还有其它费劲的活儿要干,会将STM8的I/O口设计为输出“0”时点灯,输出“1”时熄灯。这种接法亦叫“灌电流接法”。

LED控制电路原理图
软件设计
/*********************************************************************
目标系统: 基于STM8单片机
应用软件: Cosmic CxSTM8
*********************************************************************/
#include #include #define LED_DDR PB_DDR #define LED_PORT PB_ODR #define LED_CR1 PB_CR1 #define LED_CR2 PB_CR2 void main(void) { u8 i,j; LED_DDR=0XFF; LED_CR1=0XFF; LED_CR2=0X00; while(1) { for(i=0;i<4;i++) { LED_PORT^=0xFF; //我闪!拚命闪! delay50ms(10); } j=0x01; for(i=0;i<8;i++) { j<<=1; LED_PORT=j; //我左闪! delay50ms(10); } j=0x80; for(i=0;i<8;i++) { j>>=1; LED_PORT=j; //我右闪! delay50ms(10); } } } 系统调试 本节的目的在于学习STM8的IO输出功能,对于STM8来说,它和传统的单片机不同,他是GPIO,需要设置IO引脚方向,跟输出模式 作如下调试: (1)改变IO方向,即将“LED_DDR=0XFF;”改为“0X00”,观察现象。 (2)将语句:delay50ms(10);改为语句:delay50ms(1);可以看到LED闪的更快!
史海拾趣
|
利尔达的工程师及各位网友: 你们好! 我是一名大四学生,目前跟老师做一个项目。它要实现430的离线下载,实现便捷的远程软件升级。 老师要求我们做一块升级实验板,用PC并口连上升级实验板中430的JTAG将已写好的简短的升级程序写入FL ...… 查看全部问答> |
|
$(\'swf_fCr\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://www.tudou.com/v/LvxONqdJFXA/&rpid=93619453&res ...… 查看全部问答> |
|
CCDEBUGEER 用四线刷Dongle 的问题和解决方法 收到 @wateras1 大的CCDEBUGEER后刷了下 SensorTag的固件一切正常,然后想把四线刷机口的Dongle 刷成支持btool,结果CCDEBUGEER一直显示红灯无法连接。看了各个说明都说四线是可以刷CC2540 ,就去研究了一下SensorTag的10线刷机口的接线图。 接 ...… 查看全部问答> |
|
打算做一个无线温度标签,功能比较简单,FRID+测温即可。FRID打算选择无线射频卡芯片,暂时找了一个国产的,QR2213。MCU当然首先咱们的金刚狼,温度采集现在有两种想法,一个是选测温芯片,另外一个就是用单片机内部的温度传感器,精度在1°左右就 ...… 查看全部问答> |




