资料下载
普中科技--各型号产品资料下载链接 - 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);
}
}