国学芯用 发表于 2026-6-29 16:20:49

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

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 xdataKey_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 == 'K') &&(UsbOutBuffer == 'E') &&(UsbOutBuffer == 'Y') &&(UsbOutBuffer == 'P'))
            {
                if( Init_flag==0 )
                {
                  Init_flag = 1;
                  OLED_LightSet(255);
                  OLED12864_ScrollStop();
                  OLED_DisplayOn();
                  Menu_Display();
                  Screen_Clear();
                }
               
                Key_Num = CDC_KeyRead( UsbOutBuffer );
            }
            else
            {
                memcpy(UsbInBuffer, UsbOutBuffer, OutNumber);      //原路返回, 用于测试
                usb_IN(OutNumber);
            }
            usb_OUT_done();
      }                  
      delay_ms(9);            
      Menu_Deal(&Key_Num);
      Key_Num = 0;
    }
}

页: [1]
查看完整版本: 41-科学计算器使用CDC虚拟液晶屏显示,STC8H8K64U实验箱演示程序, STC8H2K32U, STC8H2