查看: 2048|回复: 10

51开发板STC8H天问51-Mini面包板学习板学习手记

[复制链接]

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2020-11-24 08:13:10 | 显示全部楼层 |阅读模式
51开板STC8H天问51-Mini面包板学习板

01

01

天问51-Mini是专为学习开发板的阶段性课程后,快速开发小项目而生,板载低成本STC8H芯片,接口采用面包板方式引出,方便焊接分立元器件。通过自己亲手搭建电路、焊接电路、调试电路、编写程序,才能做到真正的融会贯通,学以致用。
芯片采用STC8H1KO8-36I-TSSOP20,8K Flash、256字节RAM、1K扩展RAM、4K EEPROM;2路串口、1路SPI、1路I2C、10位ADC、GPIO多达17个,芯片价格0.9元。

本人曾学过一点简单的STC89C51RC,手头有一些老式的开发板和模块。打算以天问51-Mini为核心,以好搭图形化编程软件为依托,在比较、理解图形化和C语言的过程中,学习STC8H的基本运用。
请各位朋友多多指导。谢谢。

2.png
回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 08:33:06 | 显示全部楼层
P1P316IO口和8个正极、8个负极都焊接了排针。

排针

排针

回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 08:43:44 | 显示全部楼层
连接在一个模块化的89C51开发板上。

连接开发板

连接开发板
现在接的是数码管。P30和P31的排针对应连接。51mini上的正负极接在89C51开发板上输出正负极的排针上。
P1接数码管段选,P34、P35、P36、P37接数码管位选。
回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 09:27:05 | 显示全部楼层
一、点亮一个LED

LED经典电路

LED经典电路

回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 09:31:18 | 显示全部楼层
本帖最后由 liupeng123456 于 2020-11-30 20:59 编辑

两种方式:
1.推挽输出,拉电流。IO口——LED——负极
2.准双向IO口,灌电流点亮。正极——LED——IO口。

51MINIled

51MINIled

miniled

miniled

#include    "STC8G.h"                                //包括了REG51.H文件里面的内容
#define     MAIN_Fosc       11059200L   //定义主时钟
typedef     unsigned char   u8;         //为复杂的声明定义简单的别名
typedef     unsigned int    u16;        //为复杂的声明定义简单的别名
typedef     unsigned long   u32;        //为复杂的声明定义简单的别名

/*****************
函数: void  delay_ms(u8 ms)
参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
*****************/
void  delay_ms(u8 ms)
{
     u16 i;
     do
                 {
                                i = MAIN_Fosc / 13000;
                                while(--i)    ;   //14T per loop
     }
                 while(--ms);
}
//Void  delay_ms(u8 ms);               //延时函数声明
void  IO_init_config(void)           //IO口初始化函数
{
        
    P1M1 = 0x00;   P1M0 = 0x01;   //设置P10为推挽模式,P11为准双向口
    P3M1 = 0;   P3M0 = 0;   //设置为准双向口
    P5M1 = 0;   P5M0 = 0;   //设置为准双向口
}


/******************** 主函数 **************************/
void main(void)
{   //进入主函数初始化
    IO_init_config();  //IO口初始化函数
    while(1)   //进入主函数主循序
    {
        P10 = 1;
        delay_ms(250);
        P10 = 0;              //P1.0去点亮LED
        delay_ms(250);
        P11 = 1;                                //P1.0去灭LED
        delay_ms(250);
        P11 = 0;
        delay_ms(250);
    }
}






回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 09:36:25 | 显示全部楼层
本帖最后由 liupeng123456 于 2020-11-25 19:23 编辑

51mini主板上P54,是第1种接线方式。(.准双向IO口,灌电流点亮。正极——LED(带500欧左右电阻)——IO口。)硬件已固定,不能再修改。

mini板在LED

mini板在LED


p54点亮led

p54

p54


回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 09:40:48 | 显示全部楼层
好搭图形化编程和代码编程

好搭led

好搭led
回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 09:45:39 | 显示全部楼层
本帖最后由 liupeng123456 于 2020-11-25 09:59 编辑

常见的stc89c51程序
#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

sbit led = P2^0;

void delay(u16 i)
{
      while(i--);
}

void main()
{
   while(1)
   {
         led = 0;
         
delay(50000);
         led = 1;
        
delay(50000);
   }   
}
比较可知,STC8G的程序和STC89C51的程序差不多,核心部分(蓝字部分)基本一致,都是低电平点亮,高电平熄灭,并且都有一个delay()延时函数。
不同的地方主要有两个:
1.头文件不同。#include<reg52.h>——#include <STC8HX.h>
2.STC89C51的IO默认是准双向,STC8G的IO需要设置为准双向。
void setup()
{
  P1M1&=~0x021M0&=~0x02;//双向IO口
}
另外还有两个不同:
1.系统时钟的设置不同。STC89C51默认是11.0592M,STC8G设置为24M。
2.由此带来的延时函数(也包括以后会用到的计时器)的代码不同。
回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 10:01:43 | 显示全部楼层
本帖最后由 liupeng123456 于 2020-11-25 10:03 编辑

好搭基础之上的精简程序

#include <STC8HX.h>
uint32 sys_clk = 24000000;//系统时钟确认
#include "lib/delay.h"
void  twen_board_init()
{
          P1M1=0x00;1M0=0x00;//双向IO口
          P3M1=0x00;3M0=0x00;//双向IO口
}

sbit led=P1^1;
void main(void)
{
twen_board_init();//天问51初始化
               
  while(1){
                led = 1;
                delay(1000);
                led = 0;
                delay(1000);
                }
}有了【sbit 】,感觉方便多了。

回复

使用道具 举报

1

主题

11

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2020-11-25 10:06:06 | 显示全部楼层
点亮LED的51升级版
/*************  功能说明    **************
STC8G系列IO口配置
程序使用P1.1来驱动LED闪灯
******************************************/
#include    "STC8G.h"                                //包括了REG51.H文件里面的内容
#define     MAIN_Fosc       11059200L   //定义主时钟
typedef     unsigned char   u8;         //为复杂的声明定义简单的别名
typedef     unsigned int    u16;        //为复杂的声明定义简单的别名
typedef     unsigned long   u32;        //为复杂的声明定义简单的别名

Void  delay_ms(u8 ms);               //延时函数声明
void  IO_init_config(void);                           //IO口初始化函数
/******************** 主函数 **************************/
void main(void)
{   //进入主函数初始化
        IO_init_config();  //IO口初始化函数
    while(1)   //进入主函数主循序
    {
        P11 = 1;                                //P1.0去灭LED
                delay_ms(250);
                P11 = 0;              //P1.0去点亮LED
        delay_ms(250);
    }
}

/*****************
函数: void  delay_ms(u8 ms)
参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
*****************/
void  delay_ms(u8 ms)
{
     u16 i;
     do
                 {
                                i = MAIN_Fosc / 13000;
                                while(--i)    ;   //14T per loop
     }
                 while(--ms);
}
/*****************
STC8系列任何型号必须初始化配置IO口模式,
原因:上电除了P3.1和P3.0是准双向IO口模式外,其它都是高阻输入模式
*************/
void IO_init_config(void)
{        //PxM1和PxM0必须要初始化配置,不然IO口不能正常输入输出
    P1M1 = 0x00;   P1M0 = 0x00;;   //P1设置为准双向口
    P3M1 = 0x00;   P3M0 = 0x00;;   //P3设置为准双向口
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-9-1 18:18 , Processed in 0.107102 second(s), 25 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表