复制代码
第一集 认识单片机
跟着冲哥学32
从开始学STC89C52到STC15W204s再到STC8H8K64U,发现STC单片机也可以很强大,足够做很多小玩具之类的,很庆幸申请了一块stc8h实验板,在暑假期间到现在也用8h单片机做了很多东西。最开心的是做了一个航模遥控器,那么现在,想更近一步学习stc32。
沉下心,多做笔记
加油加油,更上一层楼
第二集 了解硬件
在学习STC8H的时候,大部分东西都有了解应用过了,在这个试验箱,自己不会的还有比较多没接触过
1、RS232协议
2、FLASH拓展部分
3、NTC测温部分
4、PWM做DAC也没有操作过
在接下来的学习中,重点学习上面的方面
第三集:开发环境搭建和程序下载
准备好了,差一个C251编译环境
按照手册步骤,安装下载
终于找到了这个,今天又继续开始
终于搭建好了。开始下一课。
第4集
点亮一个LED:
很简单,那么就是LED二极管正极给高电平,负极给低电平就可以点亮了,设计时加上限流电阻,防止LED烧坏和过亮刺眼
由于和STC8H有兼容,由于目前还没有试验箱,就暂时用已有的STC8H演示
下面是两个灯的电路图,GREEN使用的是P34口
-
-
- sfr P3M1 = 0xb1;
- sfr P3M0 = 0xb2;
- sfr P3 = 0xb0;
- sbit P34=P3^4;
- void delay(long int time)
- {
- while(time--);
- }
- void main()
- {
- P3M0 = 0x00; P3M1 = 0x00;
- while(1)
- {
- P34=0;
- delay(0x00ffff);
- P34=1;
- delay(0x00ffff);
- }
- }
复制代码
闪烁成功
P3M0 = 0x00; P3M1 = 0x00; 是配置P3组IO口为双向口模式,那么使用其它模式是什么状态呢
第五集 C语言printf函数实现
这个是啥意思呢,这个头文件哪里可以调用呢,有点懵了
文件打开后就不能理解了。。。。。这一堆是啥意思看不懂
之前也有用printf函数打印是这样写的(假设使用串口1)
char putchar(unsigned char Data)
{
SBUF= Data;
while(!TI);
TI=0;
return Data;
}
printf("HELLO");
printf("%.2f",a);
还得好好理解理解,这个跳转的太快了
第六集 LED花式点灯
- void main(void)
- {
- P0M1 = 0x30; P0M0 = 0x30; //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
- P1M1 = 0x30; P1M0 = 0x30; //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
- P2M1 = 0x3c; P2M0 = 0x3c; //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
- P3M1 = 0x50; P3M0 = 0x50; //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
- P4M1 = 0x3c; P4M0 = 0x3c; //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
- P5M1 = 0x0c; P5M0 = 0x0c; //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
- P6M1 = 0x00; P6M0 = 0xff; //设置为推挽输出
- P7M1 = 0x00; P7M0 = 0x00; //设置为准双向口
-
- P40 = 0; //LED Power On
-
- while(1)
- {
- P6 = ~ledNum[ledIndex]; //输出低驱动
- ledIndex++;
- if(ledIndex > 7)
- {
- ledIndex = 0;
- }
- delay_ms(250);
- delay_ms(250);
- }
- }
-
- void delay_ms(u8 ms)
- {
- u16 i;
- do{
- i = MAIN_Fosc / 6000;
- while(--i);
- }while(--ms);
- }
复制代码
根据实验箱例程
这个延时为什么能根据时钟变化而变化呢?
单片机的主时钟频率给多大合适呢,排除低功率的情况下,可以认为越高越好吗?
第7集 按键点灯
代码示例,当按键按下时,LED亮,否则LED灭
那么这个是简单控制LED,在使用LED计数等等就需要考虑按键抖动的问题,
可以软件消抖或者硬件消抖。
一般采用延时软件消抖按键。
- sfr P3M1 = 0xb1;
- sfr P3M0 = 0xb2;
- sfr P3 = 0xb0;
- sbit P34=P3^4;
- sbit P32=P3^2;
- void main()
- {
- P3M1 =0x00;
- P3M0 =0x00;
- while(1)
- {
- if(P32==0)
- P34=0;
- else
- P34=1;
-
- }
- }
复制代码
第8集 按键消抖处理
按键在按下和松手的过程中会发生抖动,导致电平不稳定,会发生误判和多次判断
采用延时消抖
在按下的时候和松手的两个过程,利用延时,跳过这两个时间段的检测
void main()
{
P3M1 =0x00;
P3M0 =0x00;
while(1)
{
if(P32==0)
{
delay(20);
P34=0;
delay(20);
}
else
P34=1;
}
}