89C52RC普中单片机

文章提供了一系列STM8单片机的实践程序,包括LED点亮、闪烁、流水灯效果,独立按键控制LED亮灭及状态改变,二进制递增显示,以及LED的左右移位。还涉及到了数码管静态显示的示例代码,并包含消抖处理和延时函数的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资料下载

普中科技--各型号产品资料下载链接 - STM8单片机 - 普中开源电子分享网 - Powered by Discuz! (prechin.net)

2023-06-28 

1.开发板

 

 2.软件

keil,stc-isp。

代码案例

1.点亮led

89C52RC芯片LED模块是P2口。

 

 

 

2.led1一秒闪烁

#include<reg52.h>
#include<intrins.h>//引入_nop()_函数
/*led1延时一秒闪烁*/
void Delay500ms()		//@11.0592MHz stc-isp生成的500ms代码
{
	unsigned char i, j, k;

	_nop_();
	i = 4;
	j = 129;
	k = 119;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}


void main()
{
	while(1)
	{
	P2=0xfe;	  //1111 1110 led1亮
	Delay500ms(); //延时500ms
	P2=0xff;	  //1111 1111 全灭
	Delay500ms();
	}
}

 3.LED流水灯

#include<reg52.h>
#include<intrins.h>
/*led流水灯*/
void Delay1ms(unsigned int xms)		//@11.0592MHz 延时=参数*1ms
{
	unsigned char i, j;
	while(xms)
	{
		i = 2;
		j = 199;
		do
		{
			while (--j);
		} while (--i);
		xms--;
	}

}



void main()
{
	int i=0;
	char x=0xfe;	
	while(1)
	{
		for(i=0;i<8;i++)   //循环8次
		{
			P2=x;
			Delay1ms(100); //延时100ms
			x=_crol_(x,1); // x循环左移一位
		}

	}
}

 4.独立按键控制led亮灭(按下key1亮,松手灭)

#include<regx52.h>
/*独立按键控制led亮灭
按下key1亮,松手灭*/

void main()
{
	while(1)
	{
		if(P3_1==0)//key1按下
		{
			P2_0=0;//亮
		}else{
			P2_0=1;//灭	
		}

		if(P3_0==0)//key2按下
		{
			P2_2=0;//亮
		}else{
			P2_2=1;//灭	
		}


	}
}

5.独立按键控制led状态

#include<regx52.h>
/*独立按键控制led状态
消抖动*/
void Delay(unsigned int xms)//带参延时函数ms	
{
	unsigned char i, j;
	while(xms--){
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
	}
}

void main()
{
	while(1)
	{
	  if(P3_1==0) //key1按下
	  {
	  	 Delay(20);//消抖
		 while(P3_1==0) ; //按下未松一直执行空语句
		 Delay(20);//消抖

		 P2_0=~P2_0;
	  }
	}
}

6.独立按键实现led二进制递增

#include<regx52.h>
/*06独立按键实现led二进制递增*/
void Delay(unsigned int xms)//带参延时函数ms	
{
	unsigned char i, j;
	while(xms--){
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
	}
}

void main()
{
unsigned char LEDNum=0;
	while(1)
	{
	  if(P3_1==0) //key1按下
	  {
	  	 Delay(20);//消抖
		 while(P3_1==0) ; //按下未松一直执行空语句
		 Delay(20);//消抖

		 LEDNum++;	 //LEDNum=10,=0000 1010  亮0灭1
		 P2=~LEDNum; //~LEDNum=1111 0101
	  }
	}
}

7.独立按键实现led左右移位

#include<regx52.h>
/*07独立按键实现led移位*/
void Delay(unsigned int xms)//带参延时函数ms	
{
	unsigned char i, j;
	while(xms--){
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
	}
}

void main()
{
	unsigned char LEDNum;
	P2=~0x01;
	while(1)
	{
	/*按下k1,led灯左移一位*/
	  if(P3_1==0) //key1按下
	  {
	  	 Delay(20);//消抖
		 while(P3_1==0) ; //按下未松一直执行空语句
		 Delay(20);//消抖

		 LEDNum++;
		 if(LEDNum>=8) LEDNum=0;
		 P2=~(0x01<<LEDNum);//左移1,2,3,...8位
	  }
	  /*按下k2,led灯右移一位*/
	  if(P3_0==0) //key2按下
	  {
	  	 Delay(20);//消抖
		 while(P3_0==0) ; //按下未松一直执行空语句
		 Delay(20);//消抖

		 if(LEDNum==0)
		 	LEDNum=7;
		else
			LEDNum--;
		 P2=~(0x01<<LEDNum);//左移1,2,3,...8位
	  }
	}
}

8.静态数码管显示

#include<regx52.h>
/*静态数码管*/
/*
P0:表示数码管的abcdefg dp
P2.234表示位选 P2=1110 0011是第0号数码管
*/
void Delay(unsigned int xms)//带参延时函数ms	
{
	unsigned char i, j;
	while(xms--){
	i = 2;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
	}
}

void main()
{
	while(1)
	{
	  P2=0xe3;//第一个
	  P0=0x5b;//显示2
	  Delay(5);
	  P2=0xe7;//第二个
	  P0=0x4f;//显示3
	  Delay(5);
	  P2=0xeb;//第三个
	  P0=0x06;//显示1
	  Delay(2);

	  P2=0xf3;
	  P0=0x5b;//显示2
	  Delay(5);
	  
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值