当前位置:首页 > 单片机 > 单片机
[导读]LED即发光二极管,具有单向导电性。电路图如下,LED与1K电阻串联在5V与0V之间,即可点亮LED,电阻起限流作用。现在我们来学习用单片机的IO(输入输出)引脚来点亮LED,用PC1引脚代替VCC,PC1输出高电平点亮LED,输出

LED即发光二极管,具有单向导电性。电路图如下,LED与1K电阻串联在5V与0V之间,即可点亮LED,电阻起限流作用。现在我们来学习用单片机的IO(输入输出)引脚来点亮LED,用PC1引脚代替VCC,PC1输出高电平点亮LED,输出低电平熄灭LED。

IO即INPUT/OUTPUT,引脚作为输入模式时,可以采集外界高低电平值;作为输出模式时,引脚可以输出高低电平。

一、库函数

DAHUME MINI2017.11.2.rar:http://pan.baidu.com/s/1hsvjq1A

解压DAHUME MINI2017.11.2.rar(2017.11.2指最后修改时间,不定期更新)到当前文件夹。以后编写程序都用这个工程作为模板。编写一个新的工程,先解压此工程,暂不使用实验2中创建工程的方法。

1、打开DAHUME MINI.stw文件;

2、在STVD左侧Workspace窗口Source Files目录下找到main.c,双击打开,可以看到如下代码;

#include "main.h"

void setup(void)

{

delay(10);

CLOCK(_16MHz);

pinMode(PC1, OUTPUT);

//_asm("rim");//rim为打开总中断,sim为关闭总中断

}

main()

{

setup();

while (1)

{

digitalWrite(PC1, HIGH);

delay(500);

digitalWrite(PC1, LOW);

delay(500);

}

}

代码第一行,main.c包含了main.h头文件,这个头文件又包含了很多其他头文件。可以把鼠标移动到main.h处右击选择Open Document “main.h”选项,也可以在Include Files目录下找到main.h,双击打开,来查看总头文件里包含了哪些子头文件。这样,我们就可以在main.c里调用包含头文件里声明过的所有的函数与变量。

函数与变量在***.c里定义,在源文件对应的***.h里声明,其它源文件包含了***.h之后,就可以调用***.h里声明过的函数与变量。

第二段代码是定义一个函数。

void setup(void)

{

******

}

第一个void是函数的类型,调用函数是无返回值。void空格后的英文是函数名字,不能与变量名、参数名和其它函数名重复。后面括号里的void是调用函数时,使用的参数类型,void表示无类型,调用函数时不使用参数。其它类型如下表。

变量类型

数值范围


_Bool

0、1

布尔变量

char、unsigned char

0~255(0~2^8-1)

无符号8位(byte)

signed char

-128~127

有符号8位

unsigned int

0~65535

无符号16位(word)

int、signed int

-32768~32767

有符号16位

unsigned long

0~16777215

无符号32位

long、signed long

-8388608~8388607

有符号32位

例如

void delay(unsigned int time_ms)

{

******

}

调用这个函数时,参数是无符号16位数值或者变量。以上变量类型是C语言关键字,也可作为函数类型和定义变量,例如

char abc(void)

{

char i;

return i;

}

这是一个返回char类型数值的函数,函数内部定义了一个char类型的局部变量,之后返回了这个变量。调用abc函数时,会返回i的数值。

下面我们来看setup函数内部。第一行是

delay(10);

这是调用了延时函数,作用是使单片机当前状态保持10ms。在这里加延时是给所有设备上电或者复位后准备就行。

调用函数最后需要加分号。程序中大括号、中括号、小括号要成对出现。

CLOCK(_16MHz);

这个函数用来设置单片机的主频率,主频是16MHz,这个频率的概念与用处将在后面实验作详细讲解。

pinMode(PC1, OUTPUT);

void pinMode(char pin, char mode);是引脚工作模式设置函数。第一个参数是引脚名,STM8S105K4单片机除了PA1、PA2,其他IO引脚都可在此作为参数。PA1、PA2接上了晶振,用来给单片机提供时钟源,去掉晶振后还可以做IO引脚使用。第二个参数是引脚的工作模式。可设置的工作模式如下表

参数

工作模式

INPUT

输入模式

INPUT_IT

外部中断输入模式

OUTPUT

输出模式

下面是一行//开头的代码,双斜杠的作用是注释本行的内容,在编译器编译程序时,不编译此行内容,内容中可以出现中文。

注释多行内容的方法如下

现在来看主函数main()。单片机上电和复位后运行主函数。

首先调用了setup();函数,接下来是while函数。while是C语言关键字,while是循环语句。小括号里为执行条件,条件为真(成立)或者不等于0时,循环执行后面大括号里的代码;条件为假(不成立)或者等于0时,不执行后面大括号里的代码或者执行最后一遍循环后跳出循环。所以while (1)是一个无限循环或者叫死循环。

digitalWrite(PC1, HIGH);

void digitalWrite(char pin, _Bool value);函数设置输出模式的引脚输出电平值,电平参数value为HIGH输出高电平,为LOW输出低电平。

编写完程序,点击Build编译程序,若下方Build窗口出现红字(错误)如下图,找到#error并双击,会跳转到错误代码处。

编译无错误,将下载器与单片机下载接口正确连接,点击Debug仿真程序。菜单栏第三行有如下几个按钮,第一个是Run(开始运行程序),第四个是Continue(继续运行程序),第五个是Stop Program(停止运行程序)。点击Run按钮,可以看到程序运行效果。

开发板上PC1引脚的排针与LED1阳极的排针通过跳线帽连接。本例程所实现效果是PC1所接的LED1循环亮0.5秒灭0.5秒。

退出仿真,程序自动运行。若无法运行,硬件(按键)复位也无效,请将单片机重新上电。

二、寄存器

pinMode(PC1, OUTPUT);

用寄存器写即

PC_DDR_1 = 1;

PC_CR1_1 = 1;

或者

PC_DDR = PC_DDR | 0b00000010;

PC_CR1 = PC_CR1 | 0b00000010;

或者

PC_DDR |= 0b00000010;

PC_CR1 |= 0b00000010;

PC即Port C,C端口,PC1至PC7合称C端口,STM8S105K4有A、B、C、D、E、F端口,每个端口有不同个数的引脚,总共25个IO引脚。DDR即data direction register,数据方向寄存器,用于设置IO引脚输入输出模式。CR1即control register 1,控制寄存器1。IO引脚作为输出模式,配置模式如下。本实验PC1引脚作为推挽输出模式。

IO口配置表

配置模式

DDR位

CR1位

CR2位

配置模式

P-Buffer

输出

1

0

0

开漏输出

OFF

1

1

0

推挽输出

ON

1

X

1

输出(最快速度10MHZ)

CR1位决定

X

X

X

真正的开漏输出(特定引脚)

未采用

0b是二进制数前缀,0x是十六进制数前缀。以上寄存器用二进制表示,有8位,最左为最高位(第7位),最右为最低位(第0位)。以PC_DDR寄存器为例,寄存器第x位决定PCx引脚的输入输出工作模式。

=用于赋值,将等号右边的值赋值给等号左边。

|用于二进制按位或运算。&用于二进制按位与运算。按位运算无需进位。

运算表达式

运算结果


运算表达式

运算结果

0 | 0

0

0 & 0

0

0 | 1

1

0 & 1

0

1 | 0

1

1 & 0

0

1 | 1

1

1 & 1

1

digitalWrite(PC1, LOW);

digitalWrite(PC1, HIGH);

用寄存器写即

PC_ODR_1 = 0;

PC_ODR_1 = 1;

或者

PC_ODR = PC_ODR & 0b11111101;

PC_ODR = PC_ODR | 0b00000010;

或者

PC_ODR &= 0b11111101;

PC_ODR |= 0b00000010;

ODR即output data register,输出数据寄存器,用于设置输出引脚输出电平值。

三、练习

1、循环以下步骤:

1)LED1、LED2亮1秒;

2)LED2、LED3亮1秒;

3)LED1、LED2、LED3亮1秒;

4)三个灯全灭2秒。

提示:使用IO引脚先设置工作模式;


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭