单片机通过模拟串口怎么用74hc164控制数码管的位信号?

比如我想用51单片机P2口控制(共阴、共阳随便)四位一体的数码管的七个段,P3.7、P3.6接74HC164的clock、data(A、B),再通过164的Q0~Q3控制... 比如我想用51单片机P2口控制(共阴、共阳随便)四位一体的数码管的七个段,P3.7、P3.6接74HC164的clock、data(A、B),再通过164的Q0~Q3控制四个位来分别显示1、2、3、4,书上我看过用RXD、TXD来控制的,我现在想用模拟串口来控制位选,请各位大哥帮帮忙写一个C程序。
还有想想问一下,通过两个I/O口控制七个段,驱动信号该怎么写,如(P1接a~f、P2.7接g)这种段驱动信号该怎么写。
想必这位大哥没用过51C吧,我个人认为C比汇编好用还高效,其实我自己用C写了段,1、2、3、4还是能显示出来,但显示效果不佳,模拟串口写的那个DATA怎么送数进行位选还是有点含糊。想参考一下各位大哥的意见。还有分两个不同的I/O口控制段选能不能也给点提示。
#include<reg51.h>
char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x83,0xf8,0x80,0x98};
char disp[]={4,3,2,1};
sbit clk=P3^7;
sbit dat=P3^6;
main()
{char i,j;
char scan;
unsigned char byte;
while(1)
{scan=tab[byte];
for(i=0;i<4;i++)
{clk=0;
dat=scan&0x40;
j=disp[i];
P2=tab[j];
clk=1;
scan<<=1;
}
}
}
加了个延时程序显示效果好了很多,
但10ms太长,调试效果成动太显示,
如果再延长50ms以上,还是动态显示,
成飞入状态,但显示数据不对,
四位要体数码管完全显示只要低于16ms,
我又用了4ms延时,显示正确,但有点抖动,
最后我延时了1ms效果很好。
我想如果用0.5ms可能会更好,
但今天我的烧写器有问题,
不能再实验,就此作罢,谢谢你的指点
展开
 我来答
百度网友146035605
2008-09-16 · TA获得超过131个赞
知道小有建树答主
回答量:109
采纳率:0%
帮助的人:94.8万
展开全部
164呢 是边沿触发的移位寄存器
有脉冲就移位嘛~
没别的程序的话
scan=tab[byte];//用scan=0x40;就可以 作用是第一次给个1

这个程序有一个注意的地方是 动态扫描的问题
你这程序扫描的太快了 有10MS延时就好 你的应该是有些模糊吧
百度网友aaf474f66
2008-09-17 · 超过54用户采纳过TA的回答
知道答主
回答量:219
采纳率:0%
帮助的人:173万
展开全部
串口是uart,你现在是SPI的用法,要自己控制引脚送出的。51用c太笑话了吧,就那么点空间还是用汇编吧。给你段汇编的,C我不知道怎么操作符号位,写不到那么高效。
SetCommandSpeed:
clr NSEL
mov a,#0C6H
lcall sendbyte
mov a,#04H
lcall sendbyte
setb NSEL
ret
sendbyte:
mov r2,#8
nextbit:
clr SCK
rlc a
mov SDI,c
LCALL delay2
setb SCK
LCALL delay2
djnz r2,nextbit
LCALL delay2
clr SCK
clr SDI
ret

你喜欢用C随便你,51还是很练功底的。164不清楚回去翻数点。
数组占着ram干嘛?const!
4位对吧,显示缓冲在哪里?你当一位的用
并转串要移位送出去,你移位呢?
P2是选位的,你段码跟位码混在一起了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式