PIC16F946使用LCD的技巧

由pic16f946的datasheet中得知,将值写到lcd做显示有两种方法
1.直接将值写入lcddata1~lcddata23
2.利用断开将值写入lcddata1~lcddata23
第一种方法有一个缺点需判断lcdps里的wa,若wa=1,才可以写入lcddata1~lcddata23
这在程序中是非常不好写,也容易造成错误,若wa=0时将值写入lcddata1~lcddata23,会造成错误(lcdcon的werr会变成1),
若在程序中用回圈一直判断wa是否为1然后再将值写入lcddata,对系统而言这个等待时间太长了(几个ms),且写入错误时
(werr=1),不只值 没有写入成功,还需用软件将werr清为零,非常的不好用.
第二种方法只是比第一种麻烦一点,它是在lcd允许你写入时产生断开,断开可以写入的时间为
tframe/(2*(lmux+1))+tcy/2
若是frame frequency=64hz,tframe=1/64=15.625ms
我是用1/4 multiplex及1/3 lcd bias,所以lmux=11
所以15.625/(2*(3+1))+tcy/2=15.625/8+tcy/2=1.953125+tcy/2,tcy是一个命令运行的时间,这个可忽略不计,因为值太小了,
这约2ms的时间,表示你可以写入lcddata的时间,以下是我的做法
断开副程序如下
if(t0ie && t0if)
{
//30ms断开一次
lcdie=1;
}
if(lcdif && lcdie)
{
lcddata0=lcddata0;
lcddata1=lcddata1;
lcddata2=lcddata2;
lcddata3=lcddata3;
lcddata4=lcddata4;
lcddata5=lcddata5;
lcddata6=lcddata6;
lcddata7=lcddata7;
lcddata8=lcddata8;
lcddata9=lcddata9;
lcddata10=lcddata10;
lcddata11=lcddata11;
lcddata12=lcddata12;
lcddata13=lcddata13;
lcddata14=lcddata14;
lcddata15=lcddata15;
lcddata16=lcddata16;
lcddata17=lcddata17;
lcddata18=lcddata18;
lcddata19=lcddata19;
lcddata20=lcddata20;
lcddata21=lcddata21;
lcddata22=lcddata22;
lcddata23=lcddata23;
lcdie=0;
}
其中lcddata1~lcddata23是自己定义的变量名称,在主程序中需点亮某一段lcd,只需将lcddata1~lcddata23的bit设 为1即可,
当然主程序中还需设置lcdps,lcdcon,lcdse0~lcdse5及lcdie,这样的做法保证一定能将数据写入lcddata且不会发生错误,
因为timer0 30ms才断开一次也就是30ms才enable lcd的断开,这样的好处是lcd不会很频繁的断开,当然30ms可以再延长,因为
毕竟人的眼睛没法反应那么快,这同时解决了lcddata不易写入的问 题及lcd不会时常在断开

美国的两家国家实验室计划建立一个新的量子网络
AI为您解读手机众生相,华为、OPPO、小米、苹果等
单结晶体管
ThiEye运动相机:4K摄录+WiFi 带防水壳
Model 3交付将继续延迟 超级电池生产瓶颈还未解决
PIC16F946使用LCD的技巧
KEPServerEX登场——制造业信息采集独领风骚
对比净水器十大名牌,松下全屋净水更贴心
SAW滤波器匹配的目的和方法
车载电磁兼容测试攻略
恩智浦扩充汽车以太网产品组合 推出新型千兆交换机和双端口PHY
声智AIGC私有化部署入围2023AIGC基础服务TOP10
基于区块链技术的去中心化广告生态系统Bigbom Eco介绍
中国半导体创企还有机会吗?
全球首个活体机器人诞生,它会给我们带来什么影响
利用INA117组成电池单元电压监测电路
如何知道您的混合云是否适合您的业务
大师建议:电子零组件最看好
vr在游戏中的应用案例分析
限流式保护器在家庭安全用电中的应用