就我而言使用单片机仅仅是作为业余爱好的玩具,十几年前入门C51单片机技术时也做过多种选择,遇到STC单片机后因其对新手之友好、资料之丰富、上手之容易而不离不弃了,近两年来STC也不负众望不断扩展产品线提高性能和性价比,对我而言真真正正的成了一款好用、实用的产品。
因为比较喜欢用单片机驱动各种小显示屏,所以总是对单片机内存斤斤计较,尤其是最近玩的电子价签墨水屏仅适合全屏刷新,最简单的方法就是在单片机ram里描画好一幅400*300(15000字节)的图片一次性写进屏幕的显存中,此前用8H8K64U时因8k内存无法实现,各种变通方法下使编程越来越复杂而控制效果却越来越差,当然这与编程技术密不可分,但对于我这样非专业学习非专业应用的外行新手而言也是没办法的,而此时恰好遇到了STC推广AI8051U的活动,于是用积分换了芯片又重新画了PCB样板,一番折腾后果然获得了惊喜,通过几个超大数组空间的配置使得编程轻松的很多,真正感悟了“大道至简”同时也感觉了“大国重器”之“庇护如山”。
以下是代码片段:
- #include "EPD_UC8176.h"
- #include "EPD_spi.h"
- #include "zimo.h"
- #include "delay.h"
- #include "RX8025.h"
- #include "hint_text.h"
- #include "ADCn.h"
- //------------------------------------------------------------------
- xdata unsigned char date[15000];//全屏显示数据编辑、缓存空间
- xdata unsigned char update_time[4800];//数据编辑、缓存空间
- xdata unsigned char previous_time[4800];//数据暂存空间
-
- bit working_flag;
- bit ADC0_flag, datas_flag;
复制代码
- //----写一个宽32高40汉字--------------------------------------------------
- void Part_block_CH(bit fu, u16 x0, u16 y0, u8 *s)//fu:0=写入date,1=写入update_time
- {
- u8 xdata han_zi[160]; //设置字库汉字转存空间
- u16 i, k, data_start;
- u8 j;
- data_start = y0 * 50 + x0 / 8; //字符第一个数据的偏移量、每行50个数据
-
- //提取待显示的汉字显示数据存入han_zi[]中
- for(k = 0; k < 71; k++) //k为数组中汉字的个数,如果有偏差会出现某个汉字显示乱码
- {
- if((GB_32[k].Index[0] == s[0]) && (GB_32[k].Index[1] == s[1]))
- {
- for(i = 0; i < 160; i++)
- {
- han_zi[i] = GB_32[k].Msk[i];
- }
- }
- }
-
- //将汉字显示数据转写至缓存空间
- for(i = 0; i < 160; i = i + 4)
- {
- for(j = 0; j < 4; j++) //j是字符每行的数据个数
- {
- if(fu)
- {
- update_time[data_start + j] = han_zi[i + j]; //写入update_time
- }
- else
- {
- date[data_start + j] = han_zi[i + j]; //写入date
- }
- }
-
- data_start += 50;
- }
- }
复制代码
|