找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6755|回复: 17
收起左侧

51单片机如何同时控制数码管和LCD

  [复制链接]
ID:312450 发表于 2018-4-20 15:28 来自手机 | 显示全部楼层 |阅读模式
怎么能同时使用他们两个呢?光用数码管动态显示就是正常的,加上LCD动态显示就不正常了,因为LCD读写速度慢的原因我觉得,不知道该怎么解决,大神们谁能解答一下
回复

使用道具 举报

ID:312448 发表于 2018-4-20 15:40 | 显示全部楼层
初步判断,LZ  的程序 是: LED 亮; 延时5秒; LED 灭; 延时10秒; 数码管 +1; 循环以上内容;
回复

使用道具 举报

ID:160834 发表于 2018-4-20 16:32 | 显示全部楼层
数码管用74H595来驱动(而且只占用3个IO口),不要直接用动态方式驱动。
回复

使用道具 举报

ID:213173 发表于 2018-4-20 17:46 | 显示全部楼层
这样的功能很容易实现,问题是你的数码管动态显示程序不合理,占用CPU时间太多,如果调度得好,再增加许多任务也不会互相干扰。
回复

使用道具 举报

ID:154413 发表于 2018-4-20 18:13 | 显示全部楼层
可以使用74HC573   锁存器   把信号锁存起来
回复

使用道具 举报

ID:312593 发表于 2018-4-20 18:24 | 显示全部楼层
74H595 74H573都可以
回复

使用道具 举报

ID:111634 发表于 2018-4-20 20:49 | 显示全部楼层
本帖最后由 zl2168 于 2018-4-20 20:54 编辑

如果两个都会,拼起来不就是了?如果两个都不会,那就一个一个学,然后拼起来!如果不会拼,说明没学好,那就继续学!不会有现成答案,只有自己去拼。
回复

使用道具 举报

ID:312678 发表于 2018-4-20 21:16 | 显示全部楼层
跟硬件有关吧?I/O不够用,如果I/O够多就可以互相不受影响
回复

使用道具 举报

ID:123289 发表于 2018-4-20 22:36 | 显示全部楼层
主要是你不会合理地安排时序逻辑!
回复

使用道具 举报

ID:310990 发表于 2018-4-20 23:03 | 显示全部楼层
换颗单片机试试,按理说i/o口没事就ok啊
回复

使用道具 举报

ID:158375 发表于 2018-4-21 11:06 | 显示全部楼层
说明逻辑、时序你还没有搞清楚。。。。。。
回复

使用道具 举报

ID:1050078 发表于 2022-11-1 16:25 | 显示全部楼层
zl2168 发表于 2018-4-20 20:49
如果两个都会,拼起来不就是了?如果两个都不会,那就一个一个学,然后拼起来!如果不会拼,说明没学好,那 ...

两个有冲突哥哥,别在这里张口没学好没学好
回复

使用道具 举报

ID:961114 发表于 2022-11-4 11:25 | 显示全部楼层
STC8H4K64TLCD-45MHz-LQFP64,硬件LCD段码驱动显示-硬件实时时钟演示

可以从 STC-ISP V6.90T 以上版本的 ISP烧录/辅助开发工具包一体化软件的
//资料下载// 专栏 中下载 开源的 C语言代码, 开源的原理图   
22222222.png
回复

使用道具 举报

ID:1047507 发表于 2022-11-4 19:23 | 显示全部楼层
74H573 74H595
回复

使用道具 举报

ID:1050554 发表于 2022-11-4 21:32 | 显示全部楼层
LED动态显示加锁存器驱动
回复

使用道具 举报

ID:1050628 发表于 2022-11-5 17:07 | 显示全部楼层
74H5C3就可以了
回复

使用道具 举报

ID:827550 发表于 2022-11-6 16:16 来自手机 | 显示全部楼层
可以使用74HC573   锁存器   把信号锁存起来
回复

使用道具 举报

ID:160893 发表于 2022-11-6 21:28 | 显示全部楼层
程序结构问题,不能用delay扫描数码管,用中断扫描,每执行中断一次扫描一位,LCD驱动在主循环执行就不会干涉,例如8位扫描+键盘中断
/*------------------------------------------------------------------------------
T0          中断1         延时、显示、键盘扫描          
------------------------------------------------------------------------------*/
void timer0(void) interrupt 1
        {       
                static uchar i,j,key_down,key_count;
                TH0 = 0xEE;
                TL0 = 0x12;
                P0=0x00;        //段码关闭,避免影响键盘(避免位三极管饱和压降大)
                i++;                        //生产速度计数       
                if(i==4)          //2.5ms*4=0.01s时基
                {   
                        i=0;
                        for(j=0;j<8;j++)//delay[0]-delay[6]每10ms周期减一到零为止
                        {
                                if(delay[j]!=0)
                                        {
                                                delay[j]--;
                                        }       
                        }
                }
                //键盘扫描(有按键按下后每周期固定P2输出2.5ms间隔计数去抖)
                if(key_down!=8)
                {
                        P2=weim[key_down];           //输出第一次按下的扫描码
                        if(P2!=weim[key_down]) //检测输入跟输出不同
                        {
                                if(key_count==8)           //如果小于8,计数+1
                                {
                                        key[key_down]=1;//否则,按键有效
                                }
                                else
                                        key_count++;
                        }
                        else   //检测输入跟输出相同        key_num-- 到零
                        {
                                if(key_count!=0)        //计数不为零
                                        key_count--;
                                else
                                {
                                        key[key_down]=0;  //按键输出置零
                                        key_down=8;                  //标记置8新一轮每个检测
                                }
                        }
                }
                else
                {
                        if(P2!=weim[wei]) //检测输入跟输出不同
                                key_down=wei;          //做标记=位码
                }
                wei++;     
                //数码管扫描
                if(wei==8)
                        wei=0;
                P2=weim[wei];   //置位码
                if(wei!=point)           //断码加小数点处理
                        P0=duan[disp[wei]];
                else
                        P0=duan[disp[wei]]|0x80;
        }

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表