【实验箱已收到】2023学习日记 STC 32位 8051 单片机
本帖最后由 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.622023-05-19
非常感谢冲哥老师的辛苦教学
还有STC公司美女业务员的大力支持
非常感谢感谢
1933892258
.硬件工程师初学C语言软件程序编译.
本帖最后由 STC89C51 于 2023-10-19 09:13 编辑
.
....................................................................
看32位8051教学视频,送实验箱,200万大奖等你拿, 《STC单片机原理》免费教育大学
教学视频链接下方
有一个ZIP压缩包下载链接
里面就有很多很实用的配套学习的软件和资料
教学视频配套附件-20230731.zip
....................................................................
.
本帖最后由 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盘
keilv5
....................................................................
在 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
.
.
本帖最后由 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
.................................................................................
.
本帖最后由 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
...........................................................................................
.
本帖最后由 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
................................................................................................
.
你这风格不可取,可能会被禁止访问 本帖最后由 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
...................................................................................................................
.
本帖最后由 STC89C51 于 2023-10-21 17:00 编辑
.
第六集:LED闪烁和花式点灯上
....................................................................................
1.基于Delay实现的LED闪烁
2.函数的使用
3.新建文件,使用模块化编程
1.基于Delay实现的LED闪烁
1秒 = 1000毫秒 = 1000 000微秒
在工程中添加如下语句
#define MAIN_Fosc 24000000UL
voiddelay_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
......................................................................
.
本帖最后由 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();
intAdd( 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"
intAdd( int parm1,int parm2 )
{
return parm1 + parm2;
}
.............................................................................
math.h 程序文件
#ifndef __MATH_H
#define __MATH_H
intAdd( 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
意思是有重复的定义 。检查一下看你的变量,函数名 有没有重复的定义的。
...........................................................................................
.........................................................................................
.
页:
[1]
2