找回密码
 立即注册
查看: 32|回复: 0

41-科学计算器使用CDC虚拟液晶屏显示,STC8H8K64U实验箱演示程序, STC8H2K32U, STC8H2

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:274
  • 最近打卡:2026-07-21 08:44:27
已绑定手机

292

主题

1027

回帖

3313

积分

超级版主

积分
3313
QQ
发表于 2026-6-29 16:20:49 | 显示全部楼层 |阅读模式
41-科学计算器使用CDC虚拟液晶屏显示,STC8H8K64U实验箱演示程序, STC8H2K32U, STC8H2K12U, STC8H
主程序main.C代码如下(汇编版本在附件中):

/*---------------------------------------------------------------------*/
/* --- Web: www.STCAI.com ---------------------------------------------*/
/* --- BBS: www.STCAIMCU.com  -----------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序            */
/*---------------------------------------------------------------------*/

/*************  功能说明    **************


//#define PRINTF_HID              //printf输出直接重定向到USB HID接口,放在"usb.h"头文件之前

#include "../comm/STC8h.h"  //包含此头文件后,不需要再包含"reg51.h"头文件
#include "../comm/usb.h"     //USB调试及复位所需头文件
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#include "spi.h"
#include "middle.h"
#include "set.h"
#include "menu.h"


char  *USER_DEVICEDESC = NULL;
char  *USER_PRODUCTDESC = NULL;
char  *USER_STCISPCMD = "@STCISP#";                      //设置自动复位到ISP区的用户接口命令

//P3.2口按键复位所需变量
u8 xdata  Key_Flag;
u16 xdata Key_cnt;

void sys_init();
void KeyResetScan(void);


void main()
{
    static u8 xdata Init_flag=0;
    u8 xdata Key_Num=0;   
    P_SW2 |= 0x80;  //XFR访问使能
   
    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 &= ~0x03;
    P3M1 |= 0x03;

    IRC48MCR = 0x80;
    while (!(IRC48MCR & 0x01));
    USBCLK = 0x00;
    USBCON = 0x90;

    usb_init();
    Timer0_init();
    Menu_Init();   
   
    /* 开总中断 */
    IE2 |= 0x80;   //IE2相关的中断位操作使能后,需要重新设置EUSB
    EA = 1;
  

    while (1)
    {
        delay_ms(1);
        if(DeviceState != DEVSTATE_CONFIGURED)  //判断USB设备是否配置完成
            continue;
        if (bUsbOutReady)
        {
            if ((UsbOutBuffer[0] == 'K') &&(UsbOutBuffer[1] == 'E') &&(UsbOutBuffer[2] == 'Y') &&(UsbOutBuffer[3] == 'P'))
            {
                if( Init_flag==0 )
                {
                    Init_flag = 1;
                    OLED_LightSet(255);
                    OLED12864_ScrollStop();
                    OLED_DisplayOn();
                    Menu_Display();
                    Screen_Clear();
                }
               
                Key_Num = CDC_KeyRead( UsbOutBuffer[5] );
            }
            else
            {
                memcpy(UsbInBuffer, UsbOutBuffer, OutNumber);      //原路返回, 用于测试
                usb_IN(OutNumber);
            }
            usb_OUT_done();
        }                  
        delay_ms(9);            
        Menu_Deal(&Key_Num);
        Key_Num = 0;
    }
} 41-科学计算器使用CDC虚拟液晶屏显示.zip (370.14 KB, 下载次数: 2)

热线19952583534
www.STCAI.com
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-7-22 10:24 , Processed in 0.068853 second(s), 43 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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