soma 发表于 2024-11-17 17:07:03

ercircle 发表于 2024-11-16 22:50
搞了个IAR环境体验下C++上来就踩坑啊,
类的成员函数内位移操作不能用成员变量
,


keil的c51就是不支持c++啊。

ercircle 发表于 2024-11-17 18:16:26

soma 发表于 2024-11-17 17:07
keil的c51就是不支持c++啊。

不是keil,是IAR for 8051,应该是编译器问题,我用的8.x太老了

ercircle 发表于 2024-11-17 18:25:31

32bit和8bit工程差异感悟:
8bit头文件一部分寄存器使用宏定义声明,无法像sbit一样操作(而库函数的优点之一就是操作归一化了)
> 为什么要用宏定义:因为这部分用sbit会报错:C51: ERROR 146 (Invalid Base Address) !:(
//32bit
PD = 1;
//8bit
PCON |= PD;
//32bit
PD = 0;
//8bit
PCON &= ~PD;
//32bit
if(PD)
//8bit
if(PCON & PD)

ercircle 发表于 2024-11-17 22:04:28

ercircle 发表于 2024-11-16 22:50
搞了个IAR环境体验下C++上来就踩坑啊,
类的成员函数内位移操作不能用成员变量
,


果然是版本太低导致的,网上搜"IAR EW for 8051 软件注册"能找到10.10.1版本跑起来就没问题。感谢神秘网友的支持。{:5_275:}

装完IAR要导入devices:
IAR平台开发


头文件可以用Ai8051U自己的:


ercircle 发表于 2024-11-17 22:28:06

这有的宏定义也太随意了,给改改{:5_351:}

ercircle 发表于 2024-11-18 00:34:13

36.3例程跑8bit编译报错:
Start to Rebuild target Target 1
Rebuild target 'Target 1'
compiling LCD1602-LCM-DMA.c...
e:\hwWorkSpace\stc-ai8051U\ai8051U_Box_prj\AI8051U-DEMO-CODE-V1.2-C51\36.3-LCD1602显示程序-硬件M6800并行接口+DMA刷新\LCD1602-LCM-DMA.C(355) warning C280: 'i': unreferenced local variable
linking...

LX51 LINKER/LOCATER V4.41 - SN: K1DZC-R0HMSC
COPYRIGHT KEIL ELEKTRONIK GmbH 1995 - 2009
@.\list\AI8051~1.LNP ".\list\LCD1602-LCM-DMA.obj"
TO ".\list\Ai8051U-output"

PRINT(".\list\Ai8051U-output.map") REMOVEUNUSED


*** ERROR L214: INPUT PHASE ERROR
    MODULE:.\list\LCD1602-LCM-DMA.obj (LCD1602_LCM_DMA)
Target not created.
Build Time Elapsed:00:00:00

查了下论坛看到浦江大佬帖子:
基于AI8051U_V1.2实验箱_学习实验之驱动TFT彩屏
和猜想一致,中断号超了


尝试添加isr.asm还是报错,应该不认超过32的中断号吧,直接将DMA_LCM_VECTOR改为USER_VECTOR即13



再看8H函数库里也是这样处理的

ercircle 发表于 2024-11-18 00:46:54

C251中有near关键字C51没有,知识点++

ercircle 发表于 2024-11-18 16:57:00

cdc重定向差异,32bit重定向printf,8bit重定向putchar:
关于STC8H芯片 想要重定向printf函数问题


72.3例程没用"usb.h"头文件{:5_320:}

宏定义效果直接替换了printf到printf_hid。重定向putchar应该可以实现一样的效果,待测试。


这个SEG7_ShowString的作用:STC-ISP-7段数码管


万能的论坛,想问的基本都能搜到~

ercircle 发表于 2024-11-18 17:38:11

8bit头文件缺失一些宏定义,不知道为啥,先拷贝过来试下~

ercircle 发表于 2024-11-18 23:09:28

本帖最后由 ercircle 于 2024-11-18 23:18 编辑

keil C51工程初步全部构建成功。3.5寸屏到了先测下TFT,参考以下ILI9488链接的屏参:
SPI驱动TFT屏ILI9488的程序@STC32, @STC8H
修改38例程LCD_Init, RGB 8位并口驱动:

/*****************************************************************************
* @name       :void LCD_Init(void)
* @date       :2018-08-09
* @function   :Initialization LCD screen
* @parameters :None
* @retvalue   :None
******************************************************************************/                  
void LCD_Init(void)
{
      LCD_Set_GPIO();
      LCDReset(); //初始化之前复位

//************* ILI9488初始化**********//      
      LCD_WR_REG(0XF7);
      LCD_WR_DATA(0xA9);
      LCD_WR_DATA(0x51);
      LCD_WR_DATA(0x2C);
      LCD_WR_DATA(0x82);
      LCD_WR_REG(0xC0);
      LCD_WR_DATA(0x11);
      LCD_WR_DATA(0x09);
      LCD_WR_REG(0xC1);
      LCD_WR_DATA(0x41);
      LCD_WR_REG(0XC5);
      LCD_WR_DATA(0x00);
      LCD_WR_DATA(0x0A);
      LCD_WR_DATA(0x80);
      LCD_WR_REG(0xB1);
      LCD_WR_DATA(0xB0);
      LCD_WR_DATA(0x11);
      LCD_WR_REG(0xB4);
      LCD_WR_DATA(0x02);
      LCD_WR_REG(0xB6);
      LCD_WR_DATA(0x02);
      LCD_WR_DATA(0x42);
      LCD_WR_REG(0xB7);
      LCD_WR_DATA(0xc6);
      LCD_WR_REG(0xBE);
      LCD_WR_DATA(0x00);
      LCD_WR_DATA(0x04);
      LCD_WR_REG(0xE9);
      LCD_WR_DATA(0x00);
      LCD_WR_REG(0x36);
      //LCD_WR_DATA((1<<3)|(0<<7)|(1<<6)|(1<<5));
    LCD_WR_DATA(0x08);   //设置RGB,含排线的屏
//LCD_WR_DATA(0x00);   //设置RGB,不含排线的屏
      LCD_WR_REG(0x3A);
      LCD_WR_DATA(0x05);
      LCD_WR_REG(0xE0);
      LCD_WR_DATA(0x00);
      LCD_WR_DATA(0x07);
      LCD_WR_DATA(0x10);
      LCD_WR_DATA(0x09);
      LCD_WR_DATA(0x17);
      LCD_WR_DATA(0x0B);
      LCD_WR_DATA(0x41);
      LCD_WR_DATA(0x89);
      LCD_WR_DATA(0x4B);
      LCD_WR_DATA(0x0A);
      LCD_WR_DATA(0x0C);
      LCD_WR_DATA(0x0E);
      LCD_WR_DATA(0x18);
      LCD_WR_DATA(0x1B);
      LCD_WR_DATA(0x0F);
      LCD_WR_REG(0XE1);
      LCD_WR_DATA(0x00);
      LCD_WR_DATA(0x17);
      LCD_WR_DATA(0x1A);
      LCD_WR_DATA(0x04);
      LCD_WR_DATA(0x0E);
      LCD_WR_DATA(0x06);
      LCD_WR_DATA(0x2F);
      LCD_WR_DATA(0x45);
      LCD_WR_DATA(0x43);
      LCD_WR_DATA(0x02);
      LCD_WR_DATA(0x0A);
      LCD_WR_DATA(0x09);
      LCD_WR_DATA(0x32);
      LCD_WR_DATA(0x36);
      LCD_WR_DATA(0x0F);
      LCD_WR_REG(0x11);
      delay_ms(120);
      LCD_WR_REG(0x29);      

      //设置LCD属性参数
      LCD_direction(USE_HORIZONTAL);//设置LCD显示方向
}
页: 1 [2] 3 4 5 6 7 8 9 10 11
查看完整版本: 学习官方Ai8051U实验箱 | 最强记录贴,Ai8051U-8Bit,Keil-C51, SDCC-51, IAR/C++