浦江一水
发表于 2025-3-27 08:51:46
vb2002 发表于 2025-3-27 00:31
擎天柱那个电位器是做 掉电检测的嘛?
是的.
蓝天白云51
发表于 2025-4-6 12:12:33
这是我多年前购买的普中试验箱.配上擎天柱真是如鱼得水!
前几天试用了楼主介绍的1.8寸7735tft彩屏.楼主这个屏的驱动写的真好.
功能齐全,有详尽注释.正好手上备有几个,可以好好玩玩了.
不知楼主是否能发表这个驱动的8位51机版本.8位机应用更多.
浦江一水
发表于 2025-4-6 19:15:58
蓝天白云51 发表于 2025-4-6 12:12
这是我多年前购买的普中试验箱.配上擎天柱真是如鱼得水!
前几天试用了楼主介绍的1.8寸7735tft彩屏.楼主 ...
这位朋友贴上了普中实验箱的图片,很漂亮的。充分利用它,学习编程,是其乐无穷的。
也感谢你对我所写7735彩屏驱动程序代码的肯定和缪赞。
关于希望改编成8位单片机的7735彩屏驱动版本,我觉得是不需要做大动作的。
聊聊本人的认知理解:
首先,AI8051U是32位单片机,不同于传统的8051单片机,它兼容8位模式,但是它不并是所有功能都可以用8位的模式来实现的。
如果说,所有功能都可以用8位的模式来实现的话,那么AI8051U升级为32位模式,就失去意义了。
然而它确实兼容8位模式,能实现传统8051单片机的功能。
对于驱动7735屏这样的操作,其实没有啥特殊性,用的都是最基础功能语句,因此改写为8位模式,源代码几乎是不需要做任何修改的。
只是在工程的制作编译方面是需要做一点点修改的。
因为32位模式,是用C251编译,8位模式是用C51编译的。
所以,若需要兼容8位模式, 只要改用C51编译器就可以了。
具体做法是这样的,打开原有工程文件...
1,在Keilc工程的Device页CPU选项中选择“AI8051U-8bit”即可,如图:
此时,Keil已经自动转为使用C51编译了。
2,正确设置Target页中的存储器设置选项等,如图:
3,正确设置Output页,创建HEX文件。如图:
其它设置一如往常。
这样编译生成的HEX就是8位模式了,执行的效果感觉与32位模式是没啥区别的。
4, 最后别忘了,用ISP下载时,要选择8bit模式。
可以按照上述方法,自己先实践一下,你肯定是行的。有问题再交流
另外,要注意理解一点:(你可能会遇到编译不通的貌似奇怪的问题,其实并不奇怪)
32位模式与8位模式,它们的头文件是不同的。如果工程当前目录下,没有AI8051U.H的话,
那么Keil会自动在自己的环境下寻找到它的。
要特别注意,8位模式下的头文件, 对某些特殊寄存器的定义与访问是不同的。有的寄存器只有字节访问,没有位访问功能。
举一个例子:
像 AUXR 这个寄存器,32位模式的头文件中是这样定义的:
sfr AUXR = 0x8E;
sbit T0x12 = AUXR^7;
sbit T1x12 = AUXR^6;
sbit S1M0x6 = AUXR^5;
sbit T2R = AUXR^4;
sbit T2_CT = AUXR^3;
sbit T2x12 = AUXR^2;
sbit EXTRAM = AUXR^1;
sbit S1BRT = AUXR^0;
而8位模式的头文件中是这样定义的:
sfr AUXR = 0x8E;
#define T0x12 0x80
#define T1x12 0x40
#define S1M0x6 0x20
#define T2R 0x10
#define T2_CT 0x08
#define T2x12 0x04
#define EXTRAM 0x02
#define S1BRT 0x01
这说明啥?
这说明32位模式下,AUXR寄存器中的各个位,是可以位访问的,如果...
写 T2R = 1; //是可以的,是合法的。
而8位模式下,AUXR中的各个位,是不可以位访问的,只能字节访问,8位一起访问,
写 T2R = 1; //是不可以的,是非法的,编译通不过的。
遇到这种类似情况,源代码就要改写了。
此外,也建议你看看本版块荣誉版主ercircle写的”普中单片机学习板◎89C52教学程序移植到强大的AI8051U..."的帖子,定有收获的。
蓝天白云51
发表于 2025-4-13 15:38:10
浦江一水 发表于 2025-4-6 19:15
这位朋友贴上了普中实验箱的图片,很漂亮的。充分利用它,学习编程,是其乐无穷的。
也感谢你对我所写773 ...
谢谢楼主指导.7735演示程序移植至8位模式终于搞定了.过程中许多伪错误,费时很久终于搞定.
void delayAms(void) //@22.1184MHz
{ unsigned longi; //unsigned long edata i;
_nop_();
i = 5528UL;
while (i) i--;
}
上面语句中,unsigned long edata i;
32位模式没问题.
8位模式通不过.改为unsigned longi;
就可以了.
不理解.不管了,能用就行.
另外,串口通信函数因为暂时用不上懒得排错就移除了.
感谢楼主授人以鱼,更授人以渔.
蓝天白云51
发表于 2025-4-13 18:16:36
蓝天白云51 发表于 2025-4-13 15:38
谢谢楼主指导.7735演示程序移植至8位模式终于搞定了.过程中许多伪错误,费时很久终于搞定.
void delayAm ...
看了手册,明白了,8位模式,没有edate空间,可以用xdate空间但速度慢些.
浦江一水
发表于 2025-4-14 11:16:38
蓝天白云51 发表于 2025-4-13 15:38
谢谢楼主指导.7735演示程序移植至8位模式终于搞定了.过程中许多伪错误,费时很久终于搞定.
void delayAm ...
移植8位模式已经搞定, 为你高兴.
在2楼的例程中, 如果不使用串口通讯, 可以将有关串口的文件和语句删除,直接改为8位模式编译即可,是没有任何问题的.
如果日后需要用到串口通讯, 只要稍稍修改即可,不是太麻烦的,若有问题再交流, 共同学习.
擎天柱核心板, 将自身原来的P3.0和P3.1作为USB口下载调试(Type-C接口), 而将P5.0和P5.1(UART3)引到了DIP40排针的原P3.0和P3.1位置, 这一点是很用心的. 这样就很方便连接传统实验板的原串口1外设了. 就像你这块普中的HC6800-MS实验板, 红色USB线(通过CH340芯片)是可以连接到擎天柱核心板的P5.0和P5.1了,很方便做串口通讯实验.
香河英茂工作室
发表于 3 天前
感谢分享,鲜花。