STC8H1K28学习笔记(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • STC8H1K28学习笔记(一)
  • 一、I/O口配置
  • 二、流水灯实现
    • 1.单个灯闪烁
    • 2.按键控制LED
  • 总结


STC8H1K28学习笔记(一)


提示:以下是本篇文章正文内容,下面案例可供参考

一、I/O口配置

与传统8051不同,STC8H1K28的每个I/O口使用前需要配置相关模式。
如下:
P()M0和P()M1
00(共阳)为准双向口模式(既可以输出也可//以输入)
01推挽输出(共阴),
10高祖输入(A/D转换时),
11开漏输出(电平匹配时,需接上拉电阻)
例如配置LED1(P1^4)为推挽输出:P1M0=0x00; P1M1=0x10;//0000 0000 0001 0000

二、流水灯实现

1.单个灯闪烁

代码如下(示例):

/*
程序功能:
led8,500ms交替闪烁,led7长亮。( led8 = P1^3;)  ( led7 = P1^4;)
led7,和led8共阴极(P24)
蜂鸣器也在P2上,所以设置beep=0
*/
#include 
#include  /*用到_nop_()这个函数就得包含这个头文件里面有关于这个函数的定义*/
void Delay500ms()		//@11.0592MHz延时函数
{
	unsigned char i, j, k;
	_nop_();//用到它就要用到这个头文件
	_nop_();
	i = 22;
	j = 3;
	k = 227;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}
void initialize()//初始化io口工作模式
{ 
	P1M1 = 0x00;   P1M0 = 0x81;
	P2M1 = 0x00;   P2M0 = 0x10;
//设置IO口工作模式00(共阳)为准双向口模式(既可以输出也可//以输入)
//01推挽输出(共阴),10高祖输入(A/D转换时),11开漏输出(电平匹配时)
}

void LED8()
{
	
	P13=1;//因为是共阴LED所以给高电平它亮,给低电平它灭
	Delay500ms();//延时500ms再灭,不能太快灭和亮,不然人眼看不出变化
	P13=0;   //灭灯
	Delay500ms();
}
 
void main()//万年不变三段式:初始化,循环体,循环内容
{
		initialize();//初始化用到哪个io口就先设置工作模式
		P24=0;
		beep=0;
		while(1)
		{
			LED8();//放大循环里让灯不停运转
		}
}

2.按键控制LED

代码如下(示例):

/*
 led7 = P1^4;
 led8 = P1^3;
 led9 = P3^6;
 led10 = P3^5;
 led- = P2^4;
*/


#include 

void Delay_ms(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 15;
		j = 90;
		do
		{
			while (--j);
		} while (--i);
	}
}

void initialize()//初始化io口工作模式
{  
	P1M1 = 0x00;   P1M0 = 0x81;
	P2M1 = 0x00;   P2M0 = 0x10;
	P3M1 = 0x00;   P3M0 = 0x60;
//设置IO口工作模式00(共阳)为准双向口模式(既可以输出也可//以输入)
//01推挽输出(共阴),10高祖输入(A/D转换时),11开漏输出(电平匹配时)
}

void main()
{
	initialize();//初始化用到哪个io口就先设置工作模式
	P24=0;       //led阴极给低
	beep=0;      //关闭蜂鸣器,不然上电就叫
	while(1)
		{
			if(P25 == 0){
				Delay_ms(20);
				while(P25 == 0);
				Delay_ms(20);
				   led7=~led7;
			}
			if(P23 == 0){
				Delay_ms(20);
				while(P23 == 0);
				Delay_ms(20);
				   led8=~led8;
			}
			if(P22 == 0){
				Delay_ms(20);
				while(P22 == 0);
				Delay_ms(20);
				   led9=~led9;
			}
			if(P20 == 0){
				Delay_ms(20);
				while(P20 == 0);
				Delay_ms(20);
				   led10=~led10;
			}
		}
}

总结

1、编程前查看硬件原理图,搞清楚每个外设的端口和需要配置成的模式。
2、配置模式需要计算16进制数

你可能感兴趣的:(STC8H1K28,c语言,单片机,51单片机)