Posted on  Updated on 

stc32学习

时隔三月,再摸单片机,这一次我要把遗忘的全部拿回来

STC32介绍

STC I/O口工作模式

除了P3.0和P3.1(准双向口)外,其他默认高阻输入模式
准双向口和推挽输出模式默认为高电平

define和typedef

1
2
typedf unsigned char u8;
给已存在的数据类型起别名

WTST

程序读取等待控制寄存器,上电默认为7
0-255

volatile

设置变量,防止优化

预编译处理

1
2
3
4
5
6
7
8
9
10
//主要命令有
#include
#ifndef //如果宏未定义则执行
#define //定义宏
#endif //结束有if的定义
#elif
#undef // 取消已定义的宏
#line
#program
#error

模块化编程思想

移位法点亮LED

1
2
3
4
5
6
7
while(1){
for(i = 0;i < 8; i++)
{
P2 = ~(0x01 << i);
delayms(500);
}
}

上拉电阻和下拉电阻

所有IO口都配置了一个4.1K的上拉电阻和10K的下拉电阻
都是8位寄存器
上拉电阻控制寄存器:PxPU
上拉电阻控制寄存器:PxPD
(x =0,1,2,3,4,5,6,7)

1
2
3
4
5
6
7
8
9
P7M1 = 0xFF;P7M0 = 0x00; //高阻输入模式
EAXFR = 1; //使能XFR,特殊寄存器,设置使之能访问
while(1){
P7PU = 0x01; //加上拉电阻等于准双向口模式
delayms(1000);
P&PD = 0x00;
delayms(1000);
}

自适应delayms()函数

1
2
3
4
5
6
7
8
#define MAIN_Fose = 35000000  //设置主频
void delayms(int ms){
int i;
do{
i = MAIN_Fose/6000;
while(i--);
}while(--ms);
}

特殊功能寄存器(SFR,XFR)

地址范围0x7E0000-0x7EFFF
如需访问扩展寄存器,需先设置SFR使能寄存器
CKCON 外部数据总线时钟控制寄存器
CKCON = 0x00;
(上电默认为7,建议设为0)

74HC595

独立按键

定时器与计数器

5个24位定时器/计数器(八位预分频+16位计数)