找回密码
 立即注册
查看: 3629|回复: 12

【实验箱已收到】2023学习日记 STC 32位 8051 单片机

[复制链接]

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-17 15:43:29 | 显示全部楼层 |阅读模式
本帖最后由 STC89C51 于 2023-10-29 12:06 编辑

.


2023学习日记 STC 32位 8051 单片机


https://www.stcaimcu.com/forum.php?mod=viewthread&tid=323


STC 32位 8051单片机  


STC32G12K128-实验箱-V9.62  2023-05-19

非常感谢冲哥老师的辛苦教学
还有STC公司美女业务员的大力支持
非常感谢  感谢
1933892258


















.硬件工程师初学C语言软件程序编译.
20231029_104843.jpg
回复

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-17 15:44:00 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-19 09:13 编辑

.







....................................................................



看32位8051教学视频,送实验箱,200万大奖等你拿, 《STC单片机原理》免费教育大学

教学视频链接下方
有一个ZIP压缩包下载链接
里面就有很多很实用的配套学习的软件和资料

教学视频配套附件-20230731.zip





....................................................................







.




回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-17 15:44:13 | 显示全部楼层
本帖最后由 STC89C51 于 2023-11-23 20:55 编辑

.





第三集:开发环境搭建和程序下载


.........................................................................
1.STC-ISP软件的下载
2.STC32手册下载
3.PDF阅读器下载
4.学会PDF阅读器查阅手册
5.跟着手册搭建C251开发环境
6.程序包的下载
7.第一个工程的编译和下载
........................................................................


下载安装

SumatraPDF-3.4.6

PDF文档阅读器

.......................................................................



跟着教学视频搭建C251开发环境

....................................................................

打开keil官方英文网站  

填写一些用户基本信息
邮箱 电话
下载
编译软件

keil编译软件c251v560

C251
MCS® 251 微控制器开发工具
版本 5.60

C251V560.EXE

最好要安装谷歌浏览器翻译


....................................................................

看32位8051教学视频,送实验箱,200万大奖等你拿, 《STC单片机原理》免费教育大学

教学视频链接下方
有一个ZIP压缩包下载链接
里面就有很多很实用的配套学习的软件和资料

教学视频配套附件-20230731.zip

....................................................................

打开查看
STC32G 单片机技术手册

..................................................................

安装
keil编译软件c251v560
默认到电脑C盘根目录

....................................................................


学习编译  C语言
0错误 0警告

01-用P6口做跑马灯

.....................................................................

设置 STC-ISP
keil仿真设置
添加型号头文件
电脑C盘
keil  v5

....................................................................

在 STC-ISP 工具软件上
安装 USB 驱动程序


..................................................................

在 STC-ISP 工具软件上

选择 芯片型号

打开程序文件

IRC频率 24M

点击   下载/编程

将板子通过USB线链接电脑
按下P3.2按钮,此时按下并松开OFF按钮,在松开P3.2进入USB下载模式




................................................................
weixin 6.6.5 APK for Android 4.3
weixin 6.7.3 APK for Android 4.4
weixin 6.5.8 APK for Android 4.2
weixin 5.0.0 APK for Android 2.3
weixin 7.0.7 APK for Android 5.0






.




















.









stc32g.pdf

16.1 MB, 下载次数: 87

stc-isp-15xx-v6.90U-完整版.zip

12.98 MB, 下载次数: 90

01-用P6口做跑马灯.rar

38.2 KB, 下载次数: 95

SumatraPDF-3.4.6.zip

6.5 MB, 下载次数: 88

keil编译软件c251v560.rar

43.75 MB, 下载次数: 100

STC32G-DEMO-CODE-20221012 .zip

22.9 MB, 下载次数: 96

第三章:开发环境搭建.ppt

2.99 MB, 下载次数: 91

PDF文档阅读器.rar

29.67 MB, 下载次数: 95

keil编译软件c51v961.part1.rar

55 MB, 下载次数: 96

keil编译软件c51v961.part2.rar

46.46 MB, 下载次数: 92

XC16xC16xST10 微控制器开发工具C166V757.rar

50.36 MB, 下载次数: 93

weixin 6.6.5 APK for Android 4.3.rar

55.4 MB, 下载次数: 82

weixin 6.7.3 APK for Android 4.4.rar

68.94 MB, 下载次数: 83

weixin 6.5.8 APK for Android 4.2.rar

39.43 MB, 下载次数: 82

weixin 5.0.0 APK for Android 2.3.rar

27.3 MB, 下载次数: 86

weixin 7.0.7 APK for Android 5.0.rar

81.83 MB, 下载次数: 91

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-17 16:20:02 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-20 21:19 编辑

.




第四集:建立工程点亮第一颗LED上


...............................................................

VCC  是 高电平 是 1
GND 是 低电平 是 0


GPIO   输入输出端口


.........................................


新建 Keil 项目



观看教学视频

查看STC32G12K128实验箱-V9.4使用说明书

查看STC32G.PDF单片机技术手册





学习编写代码

0.DEMO

................................................







sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;

sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;

sbit P40 = P4^0;
sbit P60 = P6^0;

void main()
{
        P0M0 = 0X00;
        P0M1 = 0X00;
        
        P4M1 = 0X00;
        P4M0 = 0X00;
        P6M1 = 0X00;
        P6M0 = 0X00;
        
        while(1)
        {
               
                P40 = 0;
                P60 = 0;
        }
}








..................................................................



出现错误代码提示


Build target 'Target 1'
compiling DEMO.c...
DEMO.c(14): error C67: 'P0M0': undefined identifier
DEMO.c(15): error C67: 'P0M1': undefined identifier
Target not created.
Build Time Elapsed:  00:00:01













...........................................................



查出问题 修改错误


sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;

sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;

sbit P40 = P4^0;
sbit P60 = P6^0;

void main()
{
        P6M0 = 0X00;
        P6M1 = 0X00;
        
        P4M1 = 0X00;
        P4M0 = 0X00;
        P6M1 = 0X00;
        P6M0 = 0X00;
        
        while(1)
        {
               
                P40 = 0;
                P60 = 0;
        }
}

.........................................................................



程序编译成功
0错误 0警告



Build target 'Target 1'
compiling DEMO.c...
linking...
Program Size: data=8.0 edata+hdata=256 xdata=0 const=0 code=49
creating hex file from ".\Objects\DEMO"...
".\Objects\DEMO" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01



.................................................................................

















.




0.DEMO.rar

14.7 KB, 下载次数: 88

stc32g.pdf

16.1 MB, 下载次数: 92

STC32G12K128实验箱-V9.4使用说明书.pdf

4.5 MB, 下载次数: 95

第四章:建立工程点亮第一颗LED.pptx

522.87 KB, 下载次数: 100

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-17 19:01:03 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-21 14:23 编辑

.




第四集:建立工程点亮第一颗LED下


.......................................................



5.15
用户程序复位到系统区进行 USB 模式 ISP 下载的方法(不停电)


1、下载最新版本的 STC-ISP 下载软件
2、选择正确的单片机型号
3、打开“收到用户命令后复位到 ISP 监控程序区”选项页
4、选择“USB(HID)模式”,并设置 USB 设备的 VID 和 PID,STC 提供的范例中的 VID 为“34BF”,
PID 为“FF01”
5、选择 HEX 模式或者文本模式
6、设置自定义下载命令,需要和代码中的自定义命令相一致
7、选择上这两项,当目标代码重新编译后,STC-ISP 下载软件便会自动发送复位命令,并自动开始
USB 模式的 ISP 下载



注意:若需要使用此模式,则必须将 STC 提供的“stc_usb_hid.lib”代码库添加到项目中,并按照下
图所示的方式设置自定义下载命令。

..........................................................................................

编写代码程序   USB-HID模式   DEMO.rar 压缩包文件



#include "COMM/stc.h"
#include "COMM/usb.h"

#define MAIN_Fosc       24000000L   //¶¨ÒåÖ÷ʱÖÓ

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                      //ÉèÖÃ×Ô¶¯¸´Î»µ½ISPÇøµÄÓû§½Ó¿ÚÃüÁî

void sys_init()
{
    WTST = 0;  //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

    P0M1 = 0x00;   P0M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P1M1 = 0x00;   P1M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P2M1 = 0x00;   P2M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P3M1 = 0x00;   P3M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P4M1 = 0x00;   P4M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P5M1 = 0x00;   P5M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P6M1 = 0x00;   P6M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

    //====== USB ³õʼ»¯ ======
    P3M0 &= ~0x03;
    P3M1 |= 0x03;
   
    IRC48MCR = 0x80;
    while (!(IRC48MCR & 0x01));
   
    USBCLK = 0x00;
    USBCON = 0x90;
    //========================
}

//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-3-9
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);   //6T per loop
     }while(--ms);
}

sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;

sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;

sbit P40 = P4^0;
sbit P60 = P6^0;

void main()
{
        P6M0 = 0X00;
        P6M1 = 0X00;
      
        P4M1 = 0X00;
        P4M0 = 0X00;
        P6M1 = 0X00;
        P6M0 = 0X00;
      
        sys_init();
        usb_init();
        EA = 1;
      
        while(1)
        {               
                P40 = 0;
                P60 = 0;
        }
}




.................................................................................

程序代码编译
0错误  0警告



Rebuild target 'Target 1'
compiling main.c...
linking...
Program Size: data=8.3 edata+hdata=404 xdata=192 const=39 code=6792
creating hex file from ".\Objects\DEMO"...
".\Objects\DEMO" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:00




..................................................................................................

编写代码程序  USB-CDC 串口模式  1.LED.rar 压缩包文件



#include "COMM/stc.h"
#include "COMM/usb.h"

#define MAIN_Fosc       24000000L   //¶¨ÒåÖ÷ʱÖÓ

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                      //ÉèÖÃ×Ô¶¯¸´Î»µ½ISPÇøµÄÓû§½Ó¿ÚÃüÁî

void sys_init()
{
    WTST = 0;  //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

    P0M1 = 0x00;   P0M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P1M1 = 0x00;   P1M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P2M1 = 0x00;   P2M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P3M1 = 0x00;   P3M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P4M1 = 0x00;   P4M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P5M1 = 0x00;   P5M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P6M1 = 0x00;   P6M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

    //====== USB ³õʼ»¯ ======
    P3M0 &= ~0x03;
    P3M1 |= 0x03;
   
    IRC48MCR = 0x80;
    while (!(IRC48MCR & 0x01));
   
    USBCLK = 0x00;
    USBCON = 0x90;
    //========================
}

//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-3-9
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);   //6T per loop
     }while(--ms);
}

sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;

sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;

sbit P40 = P4^0;
sbit P60 = P6^0;

void main()
{
        P6M0 = 0X00;
        P6M1 = 0X00;
      
        P4M1 = 0X00;
        P4M0 = 0X00;
        P6M1 = 0X00;
        P6M0 = 0X00;
      
        sys_init();
        usb_init();
        EA = 1;
      
        while(1)
        {               
                P40 = 0;
                P60 = 0;
        }
}



.................................................................................

程序代码编译
0错误  0警告




Rebuild target 'Target 1'
compiling main.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=44 code=7024
creating hex file from ".\Objects\DEMO"...
".\Objects\DEMO" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01




.................................................................................
.................................................................................



USB-CDC 串口模式    编写代码程序    2.LED.rar 压缩包文件





/*************  ¹¦ÄÜ˵Ã÷    **************

±¾Àý³Ì»ùÓÚSTC32GºËÐÄת½Ó°å£¨ÍÀÁúµ¶£©½øÐбàд²âÊÔ¡£

ʹÓÃUSBÏßÁ¬½ÓºËÐİåUSB½Ó¿ÚÓëµçÄÔ;

MCUͨ¹ýUSB CDC(Communication Device Class)ЭÒéʶ±ðΪ´®¿ÚÉ豸;

ʹÓô®¿ÚÖúÊÖ´ò¿ªCDCÐéÄâ´®¿Ú£¬È»ºóÏòMCU·¢ËÍÊý¾Ý£¬MCU·µ»Ø½ÓÊÕµ½µÄÊý¾Ýµ½´®¿ÚÖúÊÖ;

Êý¾Ý³¤¶ÈÏÞÖÆÔÚ63×Ö½ÚÒÔÄÚ¡£

´ËÍâ³ÌÐòÑÝʾÁ½ÖÖ¸´Î»½øÈëUSBÏÂÔØÄ£Ê½µÄ·½·¨£º
1. ͨ¹ýÿ1ºÁÃëÖ´ÐÐÒ»´Î¡°KeyResetScan¡±º¯Êý£¬ÊµÏÖ³¤°´P3.2¿Ú°´¼ü´¥·¢MCU¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½¡£
   (Èç¹û²»Ï£Íû¸´Î»½øÈëUSBÏÂÔØÄ£Ê½µÄ»°£¬¿ÉÔÚ¸´Î»´úÂëÀォ IAP_CONTR µÄbit6Çå0£¬Ñ¡Ôñ¸´Î»½øÓû§³ÌÐòÇø)
2. ͨ¹ý¼ÓÔØ¡°stc_usb_cdc_32g.lib¡±¿âº¯Êý£¬ÊµÏÖʹÓÃSTC-ISPÈí¼þ·¢ËÍÖ¸Áî´¥·¢MCU¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½²¢×Ô¶¯ÏÂÔØ¡£
   (×¢Ò⣺ʹÓÃCDC½Ó¿Ú´¥·¢MCU¸´Î»²¢×Ô¶¯ÏÂÔØ¹¦ÄÜ£¬ÐèÒª¹´Ñ¡¶Ë¿ÚÉèÖãºÏ´ÎÇ¿ÖÆÊ¹Óá±STC USB Writer (HID)¡±½øÐÐISPÏÂÔØ)

ÏÂÔØÊ±, Ñ¡ÔñʱÖÓ 24MHZ (Óû§¿É×ÔÐÐÐÞ¸ÄÆµÂÊ)¡£

******************************************/

#include "stc.h"
#include "usb.h"

#define MAIN_Fosc       24000000L   //¶¨ÒåÖ÷ʱÖÓ

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";                      //ÉèÖÃ×Ô¶¯¸´Î»µ½ISPÇøµÄÓû§½Ó¿ÚÃüÁî

//P3.2¿Ú°´¼ü¸´Î»ËùÐè±äÁ¿
bit Key_Flag;
u16 Key_cnt;

void sys_init();
void delay_ms(u8 ms);
void KeyResetScan(void);

sfr P4 = 0XC0;
sfr P4M1 = 0XB3;
sfr P4M0 = 0XB4;

sfr P6 = 0XE8;
sfr P6M1 = 0XCB;
sfr P6M0 = 0XCC;

sbit P40 = P4^0;
sbit P60 = P6^0;

void main()
{
    sys_init();  //ϵͳ³õʼ»¯
    usb_init();  //USB CDC ½Ó¿ÚÅäÖÃ
    EA = 1;

{
        P6M0 = 0X00;
        P6M1 = 0X00;
      
        P4M1 = 0X00;
        P4M0 = 0X00;
        P6M1 = 0X00;
        P6M0 = 0X00;
      
        sys_init();
        usb_init();
        EA = 1;
      
        while(1)
        {               
                P40 = 0;
                P60 = 0;
        }
}

    while (1)
    {
        delay_ms(1);
        KeyResetScan();   //³¤°´P3.2¿Ú°´¼ü´¥·¢Èí¼þ¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½£¬²»ÐèÒª´Ë¹¦ÄÜ¿Éɾ³ý±¾ÐдúÂë

        if(DeviceState != DEVSTATE_CONFIGURED)  //µÈ´ýUSBÍê³ÉÅäÖÃ
            continue;

        if (bUsbOutReady)
        {
            usb_OUT_done();    //½ÓÊÕÓ¦´ð£¨¹Ì¶¨¸ñʽ£©
            
            printf("OutNumber=0x%X\r\n",OutNumber);  //ʹÓà printf º¯Êý´òÓ¡½ÓÊÕÊý¾Ý³¤¶È

            memcpy(UsbInBuffer, UsbOutBuffer, OutNumber);  //½«½ÓÊÕÊý¾Ý(UsbOutBuffer)£¬¸´ÖƵ½·¢ËÍ»º³åÇø(UsbInBuffer)
            usb_IN(OutNumber);      //ԭ··µ»Ø, ÓÃÓÚ²âÊÔ
        }
    }
}

void sys_init()
{
    WTST = 0;  //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

    P0M1 = 0x00;   P0M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P1M1 = 0x00;   P1M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P2M1 = 0x00;   P2M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P3M1 = 0x00;   P3M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P4M1 = 0x00;   P4M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P5M1 = 0x00;   P5M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P6M1 = 0x00;   P6M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú

    //====== USB ³õʼ»¯ ======
    P3M0 &= ~0x03;
    P3M1 |= 0x03;
   
    IRC48MCR = 0x80;
    while (!(IRC48MCR & 0x01));
   
    USBCLK = 0x00;
    USBCON = 0x90;
    //========================
}

//========================================================================
// º¯Êý: void delay_ms(u8 ms)
// ÃèÊö: ÑÓʱº¯Êý¡£
// ²ÎÊý: ms,ÒªÑÓʱµÄmsÊý, ÕâÀïÖ»Ö§³Ö1~255ms. ×Ô¶¯ÊÊÓ¦Ö÷ʱÖÓ.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2021-3-9
// ±¸×¢:
//========================================================================
void delay_ms(u8 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);   //6T per loop
     }while(--ms);
}

//========================================================================
// º¯Êý: void KeyResetScan(void)
// ÃèÊö: P3.2¿Ú°´¼ü³¤°´1Ãë´¥·¢Èí¼þ¸´Î»£¬½øÈëUSBÏÂÔØÄ£Ê½¡£
// ²ÎÊý: none.
// ·µ»Ø: none.
// °æ±¾: VER1.0
// ÈÕÆÚ: 2022-6-11
// ±¸×¢:
//========================================================================
void KeyResetScan(void)
{
    if(!P32)
    {
        if(!Key_Flag)
        {
            Key_cnt++;
            if(Key_cnt >= 1000)                //Á¬Ðø1000msÓÐЧ°´¼ü¼ì²â
            {
                Key_Flag = 1;                //ÉèÖð´¼ü״̬£¬·ÀÖ¹ÖØ¸´´¥·¢

                USBCON = 0x00;      //Çå³ýUSBÉèÖÃ
                USBCLK = 0x00;
                IRC48MCR = 0x00;
               
                delay_ms(10);
                IAP_CONTR = 0x60;   //´¥·¢Èí¼þ¸´Î»£¬´ÓISP¿ªÊ¼Ö´ÐÐ
                while (1);
            }
        }
    }
    else
    {
        Key_cnt = 0;
        Key_Flag = 0;
    }
}







..................................................................................................


程序代码编译
0错误  0警告





Rebuild target 'Target 1'
compiling main.c...
linking...
Program Size: data=8.4 edata+hdata=417 xdata=192 const=61 code=6982
creating hex file from ".\obj\stc_usb_ser"...
".\obj\stc_usb_ser" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01





...........................................................................................






.





































































截图202310191629082329.jpg
截图202310191711203227.jpg

DEMO.rar

133.61 KB, 下载次数: 88

1.LED.rar

133.99 KB, 下载次数: 91

2.LED.rar

103 KB, 下载次数: 90

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-17 19:01:10 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-20 21:16 编辑

.



第五集:C语言运算符和进制数入门上

...............................................................




主函数添加程序:


if(DeviceState != DEVSTATE_CONFIGURED)
    continue;
if (bUsbOutReady)
{
    usb_OUT_done();    //接收应答(固定格式)   
}        




常规用法:


printf(“Hello World!”);
printf(“室内温度:%.2f\r\n”,11.2);







在Windows系统中我们输入回车时,输入的字符是\r\n,
unix系统中回车为\n,而mac系统中回车的字符为\r.




..............................................................


C语言 Printf  函数  

ASCII 字符代码表


二进制  十进制  十六进制  换算方式

代码程序 输出字符  

论坛ID = STC89C51
当前温度:11.20



...........................................................


编写代码程序




#include "COMM/stc.h"                //µ÷ÓÃÍ·Îļþ
#include "COMM/usb.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
        
//sbit P40 = P4^0;        //Èý¼«¹Ü¿ØÖÆÒý½Å
//sbit P60 = P6^0;        //LED¿ØÖÆÒý½Å
//sbit P61 = P6^1;        //LED¿ØÖÆÒý½Å

void sys_init();        //º¯ÊýÉùÃ÷

void main()                                        //³ÌÐò¿ªÊ¼ÔËÐеÄÈë¿Ú
{
        sys_init();                                //USB¹¦ÄÜ+IO¿Ú³õʼ»¯
        usb_init();                                //usb¿â³õʼ»¯
        EA = 1;                                        //CPU¿ª·ÅÖжϣ¬´ò¿ª×ÜÖжϡ£
        
        while(1)                //ËÀÑ­»·
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        printf("??ID = STC89C51");
                        printf("????:%.2f\r\n",11.2);
                }
                P40 = 0;        //Èý¼«¹ÜÒý½ÅÊä³öµÍµçƽ
                P60 = 0;        //led4Òý½ÅÊä³öµÍµçƽ
                P61 = 0;        //led5Òý½ÅÊä³öµÍµçƽ
        }
}


void sys_init()                //º¯Êý¶¨Òå
{
    WTST = 0;  //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

        P0M1 = 0x00;   P0M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P1M1 = 0x00;   P1M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P2M1 = 0x00;   P2M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P3M1 = 0x00;   P3M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P4M1 = 0x00;   P4M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P5M1 = 0x00;   P5M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P6M1 = 0x00;   P6M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
        
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

    //ÉèÖÃUSBʹÓõÄʱÖÓÔ´
    IRC48MCR = 0x80;    //ʹÄÜÄÚ²¿48M¸ßËÙIRC
    while (!(IRC48MCR & 0x01));  //µÈ´ýʱÖÓÎȶ¨

    USBCLK = 0x00;        //ʹÓÃCDC¹¦ÄÜÐèҪʹÓÃÕâÁ½ÐУ¬HID¹¦ÄܽûÓÃÕâÁ½ÐС£
    USBCON = 0x90;
}



..........................................................................................................



程序编译成功
0错误 0警告



Rebuild target 'Target 1'
compiling Demo.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=72 code=7039
creating hex file from ".\Objects\Demo"...
".\Objects\Demo" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01



................................................................................................

































.





圖片1.png
圖片2.png
圖片3.png
圖片4.png

1.C语言Printf.rar

101.06 KB, 下载次数: 91

第五章:C语言运算符和进制数入门.pptx

895.31 KB, 下载次数: 97

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2023-10-17 19:17:48 | 显示全部楼层
你这风格不可取,可能会被禁止访问
回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-20 19:27:26 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-20 21:13 编辑

.





第五集:C语言运算符和进制数入门下

........................................................................


数的进制:2进制、10进制、16进制




C语言常用运算符




一、算术运算符
加(+)减(—)乘(*)除(/)
模(余)运算符(%):不允许出现浮点型,余数正负取决于被除数正负
自增(++i,–i;i++,i–)
二、位运算符
右移(>>)左移(<<)
按位与(&)
按位或(|)
按位异或(^)
取反(~)







........................................................................


C语言 Printf 函数运算


编写代码程序


论坛ID = STC89C51
数学运算 15 X 3 = 45

                        printf("??ID = STC89C51");
                        printf("%u",15*3);

........................................................................







#include "COMM/stc.h"                //µ÷ÓÃÍ·Îļþ
#include "COMM/usb.h"

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
        
//sbit P40 = P4^0;        //Èý¼«¹Ü¿ØÖÆÒý½Å
//sbit P60 = P6^0;        //LED¿ØÖÆÒý½Å
//sbit P61 = P6^1;        //LED¿ØÖÆÒý½Å

void sys_init();        //º¯ÊýÉùÃ÷

void main()                                        //³ÌÐò¿ªÊ¼ÔËÐеÄÈë¿Ú
{
        sys_init();                                //USB¹¦ÄÜ+IO¿Ú³õʼ»¯
        usb_init();                                //usb¿â³õʼ»¯
        EA = 1;                                        //CPU¿ª·ÅÖжϣ¬´ò¿ª×ÜÖжϡ£
        
        while(1)                //ËÀÑ­»·
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         //
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        printf("??ID = STC89C51");
                        printf("%u",15*3);
                }
                P40 = 0;        //Èý¼«¹ÜÒý½ÅÊä³öµÍµçƽ
                P60 = 0;        //led4Òý½ÅÊä³öµÍµçƽ
                P61 = 0;        //led5Òý½ÅÊä³öµÍµçƽ
        }
}


void sys_init()                //º¯Êý¶¨Òå
{
    WTST = 0;  //ÉèÖóÌÐòÖ¸ÁîÑÓʱ²ÎÊý£¬¸³ÖµÎª0¿É½«CPUÖ´ÐÐÖ¸ÁîµÄËÙ¶ÈÉèÖÃΪ×î¿ì
    EAXFR = 1; //À©Õ¹¼Ä´æÆ÷(XFR)·ÃÎÊʹÄÜ
    CKCON = 0; //Ìá¸ß·ÃÎÊXRAMËÙ¶È

        P0M1 = 0x00;   P0M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P1M1 = 0x00;   P1M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P2M1 = 0x00;   P2M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P3M1 = 0x00;   P3M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P4M1 = 0x00;   P4M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P5M1 = 0x00;   P5M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P6M1 = 0x00;   P6M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
    P7M1 = 0x00;   P7M0 = 0x00;   //ÉèÖÃΪ׼˫Ïò¿Ú
        
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

    //ÉèÖÃUSBʹÓõÄʱÖÓÔ´
    IRC48MCR = 0x80;    //ʹÄÜÄÚ²¿48M¸ßËÙIRC
    while (!(IRC48MCR & 0x01));  //µÈ´ýʱÖÓÎȶ¨

    USBCLK = 0x00;        //ʹÓÃCDC¹¦ÄÜÐèҪʹÓÃÕâÁ½ÐУ¬HID¹¦ÄܽûÓÃÕâÁ½ÐС£
    USBCON = 0x90;
}




.......................................................................................................................


程序编译成功
0错误 0警告


Rebuild target 'Target 1'
compiling Demo.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=63 code=7035
creating hex file from ".\Objects\Demo"...
".\Objects\Demo" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01




...................................................................................................................
















.



圖片5.png
圖片6.png
圖片7.png

1.C语言Printf.rar

101 KB, 下载次数: 96

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-20 21:36:28 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-21 17:00 编辑

.



第六集:LED闪烁和花式点灯上


....................................................................................




1.基于Delay实现的LED闪烁
2.函数的使用
3.新建文件,使用模块化编程



1.基于Delay实现的LED闪烁



1秒 = 1000毫秒 = 1000 000微秒




在工程中添加如下语句



#define MAIN_Fosc        24000000UL



void  delay_ms(u16 ms)
{
     u16 i;
     do{
          i = MAIN_Fosc / 6000;
          while(--i);
     }while(--ms);
}





.................................................................................................


编写代码程序     LED双灯闪烁





#include "COMM/stc.h"               
#include "COMM/usb.h"

#define MAIN_Fosc 24000000UL

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
        
//sbit P40 = P4^0;        
//sbit P60 = P6^0;        
//sbit P61 = P6^1;        

void sys_init();        

void delay_ms(u16 ms)
{
        u16 i;
        do
        {
                i = MAIN_Fosc/6000;
                while(--i);
        }while(--ms);
}

void main()                                       
{
        sys_init();                                
        usb_init();                                
        EA = 1;                                       
        
        while(1)               
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                }
                P40 = 0;        
               
                P60 = 0;
                P67 = 0;
    delay_ms(500);        
                P60 = 1;
                P67 = 1;
    delay_ms(500);               
        }
}


void sys_init()               
{
    WTST = 0;  
    EAXFR = 1;
    CKCON = 0;

        P0M1 = 0x00;   P0M0 = 0x00;   
    P1M1 = 0x00;   P1M0 = 0x00;   
    P2M1 = 0x00;   P2M0 = 0x00;   
    P3M1 = 0x00;   P3M0 = 0x00;   
    P4M1 = 0x00;   P4M0 = 0x00;   
    P5M1 = 0x00;   P5M0 = 0x00;   
    P6M1 = 0x00;   P6M0 = 0x00;   
    P7M1 = 0x00;   P7M0 = 0x00;   
        
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

   
    IRC48MCR = 0x80;   
    while (!(IRC48MCR & 0x01));  

    USBCLK = 0x00;        
    USBCON = 0x90;
}










............................................................................................



程序编译成功
0错误 0警告




Rebuild target 'Target 1'
compiling Demo.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=44 code=7046
creating hex file from ".\Objects\Demo"...
".\Objects\Demo" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:01



.......................................................................................................
.......................................................................................................
.......................................................................................................


printf("a 的值: %d\n", a);


语法分析:
1.while
2.do
{
}while();
3.--ms 的用法
4.#define



int a = 10;

   do
   {
       printf("a 的值: %d\n", a);
       a = a + 1;
   }while( a < 20 );

   while( a < 20 )
   {
      printf("a 的值: %d\n", a);
      a++;
   }













..................................................................................................



编写代码程序   printf("a 的值: %d\n", a);






#include "COMM/stc.h"               
#include "COMM/usb.h"

#define MAIN_Fosc 24000000UL

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
        
//sbit P40 = P4^0;        
//sbit P60 = P6^0;        
//sbit P61 = P6^1;        

void sys_init();        

void delay_ms(u16 ms)
{
        u16 i;
        do
        {
                i = MAIN_Fosc/6000;
                while(--i);
        }while(--ms);
}

void main()                                       
{
        int a =10;
        
        sys_init();                                
        usb_init();                                
        EA = 1;                                       
        
        while(1)               
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();
                        do
                        {
                                printf("a???: %d\r\n",a);
                                a = a+1;
                }while(a<20);
          }                        
                P40 = 0;        
               
//                P60 = 0;
//                P67 = 0;
//    delay_ms(500);        
//                P60 = 1;
//                P67 = 1;
//   delay_ms(500);               
        }
}


void sys_init()               
{
    WTST = 0;  
    EAXFR = 1;
    CKCON = 0;

        P0M1 = 0x00;   P0M0 = 0x00;   
    P1M1 = 0x00;   P1M0 = 0x00;   
    P2M1 = 0x00;   P2M0 = 0x00;   
    P3M1 = 0x00;   P3M0 = 0x00;   
    P4M1 = 0x00;   P4M0 = 0x00;   
    P5M1 = 0x00;   P5M0 = 0x00;   
    P6M1 = 0x00;   P6M0 = 0x00;   
    P7M1 = 0x00;   P7M0 = 0x00;   
        
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

   
    IRC48MCR = 0x80;   
    while (!(IRC48MCR & 0x01));  

    USBCLK = 0x00;        
    USBCON = 0x90;
}



.........................................................................

程序编译成功
0错误 0警告




Rebuild target 'Target 1'
compiling Demo.c...
linking...
Program Size: data=8.3 edata+hdata=420 xdata=192 const=55 code=7051
creating hex file from ".\Objects\Demo"...
".\Objects\Demo" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:00





......................................................................


















.




圖片1.png
圖片2.png

第六集:LED闪烁和花式点灯.pptx

363.5 KB, 下载次数: 88

LED双灯闪烁.rar

99.96 KB, 下载次数: 91

printf(a 的值: %dn, a);.rar

100.72 KB, 下载次数: 95

回复 支持 反对

使用道具 举报 送花

3

主题

24

回帖

111

积分

注册会员

积分
111
发表于 2023-10-21 18:14:04 | 显示全部楼层
本帖最后由 STC89C51 于 2023-10-29 11:23 编辑

.



第六集:LED闪烁和花式点灯下


..............................................................................




2.函数的使用




在模块化编程里,函数使用分为如下三步:
1.函数定义
返回值 函数名称( 入口参数 )
{
函数要执行的功能
}
@返回值:没有返回值就是void
@函数名称:避开关键词,不重复,非特殊字符随便取
@入口参数:类型+名称,多个参数“,”分开,空就写void
2.函数声明
返回值 函数名称( 入口参数 );
3.函数调用
函数名称( 入口参数 );









................................................................................................



3.新建文件,使用模块化编程



新建xxx.c和xxx.h文件,代表一个功能块。

xxx.h格式:
#ifndef __XXX_H
#define __XXX_H
调用头文件
函数声明...
#endif

xxx.c格式
#include “xxx.h”
函数定义

添加文件一定要记得引用路径和添加到工程里。



......................................................................................................

函数计算程序



printf("?????:%d\r\n",Add(1,2));



void sys_init();



int  Add( int parm1,int parm2 )
{
        return parm1 + parm2;
}





...........................................................................................


编写代码程序





#include "COMM/stc.h"               
#include "COMM/usb.h"
#include "math.h"

#define MAIN_Fosc 24000000UL

char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
     

void sys_init();


int Add( int parm1,int parm2 );

void main()                                       
{
        
        sys_init();                                
        usb_init();                                
        EA = 1;                                       
        
        while(1)               
        {
                if( DeviceState != DEVSTATE_CONFIGURED )         
                        continue;
                if( bUsbOutReady )                                                               
                {
                        usb_OUT_done();

                        printf("?????:%d\r\n",Add(1,2));
                        
          }        
        }               
}

void sys_init()               
{
    WTST = 0;  
    EAXFR = 1;
    CKCON = 0;

        P0M1 = 0x00;   P0M0 = 0x00;   
    P1M1 = 0x00;   P1M0 = 0x00;   
    P2M1 = 0x00;   P2M0 = 0x00;   
    P3M1 = 0x00;   P3M0 = 0x00;   
    P4M1 = 0x00;   P4M0 = 0x00;   
    P5M1 = 0x00;   P5M0 = 0x00;   
    P6M1 = 0x00;   P6M0 = 0x00;   
    P7M1 = 0x00;   P7M0 = 0x00;   
        
    P3M0 = 0x00;
    P3M1 = 0x00;
   
    P3M0 &= ~0x03;
    P3M1 |= 0x03;

   
    IRC48MCR = 0x80;   
    while (!(IRC48MCR & 0x01));  

    USBCLK = 0x00;        
    USBCON = 0x90;
}

int Add( int parm1,int parm2 )
{
        return parm1 + parm2;
}











...............................................................................


math.c  程序文件





#include "math.h"

int  Add( int parm1,int parm2 )
{
        return parm1 + parm2;
}








.............................................................................


math.h   程序文件




#ifndef __MATH_H
#define __MATH_H

int  Add( int parm1,int parm2 );


#endif





...........................................................................


添加文件  引用路径 添加到工程







..........................................................................



编译提示错误信息




Rebuild target 'Target 1'
compiling Demo.c...
compiling math.c...
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  Add
    MODULE:  .\Objects\math.obj (math)
   DEFINED:  .\Objects\Demo.obj (Demo)
Program Size: data=8.3 edata+hdata=420 xdata=192 const=55 code=7064
Target not created.
Build Time Elapsed:  00:00:01





ERROR L104: MULTIPLE PUBLIC DEFINITIONS

意思是有重复的定义 。检查一下看你的变量,函数名 有没有重复的定义的。



...........................................................................................





.........................................................................................



















.







Printf.rar

89.25 KB, 下载次数: 96

回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 03:58 , Processed in 0.140948 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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