单片机同一IO口输出两组数组

来源:本站
导读:目前正在解读《单片机同一IO口输出两组数组》的相关信息,《单片机同一IO口输出两组数组》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《单片机同一IO口输出两组数组》的详细说明。
简介:基于80C51,因为没有多余的口可用,只能用同一IO口输出两组数组,高4位一组输出0~9,低4位一组输出0~15!

单片机同一IO口输出两组数组

基于80C51,因为没有多余的口可用,只能用同一IO口输出两组数组,高4位一组输出0~9,低4位一组输出0~15!

;=============================================

试试看:

MOV R0, #s1 ;数组一的指针

MOV R1, #s2 ;数组二的指针

LCALL _HEBY_OUT ;调用子程序,合并输出

......

;---------------------

_HEBY_OUT:

MOV A, @R0 ;取数组一的元素

ANL A, #0FH

SWAP A ;放到高四位

MOV R0, A

MOV A, @R1 ;取数组二的元素

ANL A, #0FH

ADD A, R0 ;合并

MOV P1, A ;输出

RET

;=============================================

上文答案正解,用C来做更简单, 子程序就一句话, 而且更加灵活, 想取数组那位直接给编号即可。

#include <REG51.H>

#define dat_out P0

unsigned char str1[]={1, 2, 3, 5, 6, 7......};//数值不要超过15即可

unsigned char str2[]={15, 8, 6, 12, 3, 6, 4.....};

/***********************

str0:数组1 str1:数组2

n1:取数组1中的某位数

n2:取数组2中的某位数

************************/

void exp(unsigned char *str1, unsigned char *str2, unsigned char n1,unsigned char n2)

{

dat_out = ((str1[n1] << 4) & 0xf0) | (str2[n2] & 0x0f);

}

void main(void)

{

exp(str1, str2, 1, 3); //P0口高4位输出str1数组的第1个元素"2"

// 低4位输出str2数组的第3个元素"12"

//P0 = 0x2C

while(1);

}

;=============================================

就是将高位数和低位数合并送到I/O口

如果你想不同时输出的话,可能有一些困难,只能采用【晕啊 你为什么不加个锁存器呢 如果是同时输出的话,那么就可以用377加138进行配合使用,这样可以对I/O口进行扩展,一个138加8和377,就可以扩出64个I/O,足够你用了!】的回答。

;=============================================

提醒:《单片机同一IO口输出两组数组》最后刷新时间 2024-03-14 00:57:37,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《单片机同一IO口输出两组数组》该内容的真实性请自行鉴别。