本帖最后由 gaoyang9992006 于 2020-3-26 15:29 编辑
/*
SC95F8617,GPIO输入输出例子,利用P11输出闪灯,P10作为按钮
按下按钮可以调节闪烁的频率.
GPIO说明
PxCON=0x00;设置为高阻输入模式
PxCON=0xFF;设置为推挽输出模式
PxPH = 0xFF;设置上拉电阻
*/
#include"SC95F861X.H"
#include"stdio.h"
#define LED P11
#define Button_PIN P10
unsigned int x=50000;
/*
---------IO输出测试代码---------
*/
void delay(void);
void GPIO_Init(void);
void Timer0_Init(void);
void Blink(void);
void key(void);
/*
---------主函数---------
*/
void main(void)
{
GPIO_Init();
Timer0_Init();
while(1)
{
Blink();
key();
}
}
void delay(void)
{
//设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz
int i=320;
TR0=1;
while(i--)
{
TL0 = (65536 - x)%256; //时钟为Fsys,则溢出时间=50000*(1/Fsys);
TH0 = (65536 - x)/256;
while(TF0==0);
TF0=0;
}
TR0=0;
}
void GPIO_Init(void)
{
//P10设置为输入上拉,P11设置为输出
P1CON=BIT1;
P1PH =BIT0;
}
void Timer0_Init(void)
{
/*
TCON,定时器控制寄存器, |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
模式0:13位定时器计数器模式
模式1:16位定时器计数器模式
模式2:8位自动重载模式
模式3:两个8位定时器计数器模式
*/
//设置定时器0工作模式1
TMOD |= BIT0;
//设置定时器0时钟源不分频,32MHz;默认是12分频
TMCON |= BIT0;
}
void Blink(void)
{
LED=~LED;
delay();
}
void key()
{
if(Button_PIN==0)
{
while(Button_PIN==0);
if(Button_PIN==1)
{
x=x-5000;
if(x==0)
x=50000;
}
}
}
试了一下,可以进行十级闪烁速度调整。
|