本帖最后由 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;
- }
- }
- }
试了一下,可以进行十级闪烁速度调整。
|