;======================================= ;跳线设置:默认 ;晶振:12M ;试验结果8*8点阵上出现流水灯 ;74hc164芯片可实现串-并,所以常用他来扩展单片机io口,51hei板子上的8*8点阵有8行8列 ;本来是需要8个io口来控制行数据的,现在我们用74hc164后只需要2个io口便能实现 ;===========预定义====================== SDA BIT P2.5 ;74HC164的AB端串行输入 SCL BIT P2.4 ;74HC164的CLK端,上升沿有效 dds EQU 48H ORG 0000H AJMP MAIN ORG 0100H ;============主程序开始======================= MAIN: clr P2.7 ;关数码管 mov ACC,#0FFH ;送SHIFT子程序的参数 ACALL SHIFT ;调74hc164移位输出子程序,把FF输出到8*8点阵的所有行 ;因51hei开发板采用共阳点阵,这时只要哪一列为0,这一列便可被点亮 mov dds,#0feH ;二进制为11111110,供RL指令移位用 huqin: mov P0,dds ;输出到8*8点阵的列,每一次只有一列被点亮 mov dds,P0 ;P0现在的值保存到48H里去 mov a,dds ;由于RAM中不能直接RL移位,所以先送人A RL a ;移位 mov dds,a ;移位之后的数据保存到48H里去 ACALL DELAY_1S ;延时1.002035秒 jmp huqin ;死循环 ;============74hc164移位输出子程序============================== ; 子程序名: SHIFT ; 功能描述: 移位程序,将8位数据依次移进74LS164芯片中 ; 控制方式就是数据引脚的数据在时钟引脚的脉冲下一位一位的移入芯片 ; 程序作者: 胡琴 网站:www.51hei.com ;=============================================================== SHIFT: push ACC ;A进栈暂存 MOV R2,#8 ;串输出数据8位 CLR C ;把C清0 hei: CLR SCL ;拉低SCL,以便下次拉高便可产生上升沿 RLC A ;A的最高位移到C,C原值移到A最低位 MOV SDA,C ;C中的数据先送入74hc164,等待clk上升沿的到来 SETB SCL ;低电平到高电平边沿触发到来,并行数据输出至164的Q0-Q7 DJNZ R2,hei ;判断输出完毕了没有 pop ACC ;出栈恢复A值 RET ;============延时子程序============= DELAY_1S: ;延时子程序,12M晶振延时1.002035秒 MOV R4,#10 L3: MOV R2 ,#200 ;1指令周期 L1: MOV R3 ,#249 ;1指令周期 L2: DJNZ R3 ,L2 ;2指令周期 DJNZ R2 ,L1 ;2指令周期 DJNZ R4 ,L3 ;2指令周期 RET ;2指令周期 ;循环体延时时间: [(249*2+1+2)*200+1+2]*10*12/12000000=1.002030s ;加上ACALL指令和第一条mov指令以及最后一条RET指令算出来整个函数的时间为1.002035s ;=================================================== END ;汇编结束伪指令
c语言的版本由于分为几个文件不方便在论坛贴出,用户可从以下地址获得
源代码与hex文件下载:
汇编语言:http://www.51hei.com/ziliao/51hei-5/74HC164串-并_asm.rar
C 语言:http://www.51hei.com/ziliao/51hei-5/74HC164串-并_c.rar
顶,菜鸟学习中。。。
哎!汇编用哪个软件写程序呀??只会用KEIL写C的,可是没学过C,学过汇编,却不知道用哪个软件写汇编!
pjking1214 发表于 2011-9-28 10:04
哎!汇编用哪个软件写程序呀??只会用KEIL写C的,可是没学过C,学过汇编,却不知道用哪个软件写汇编!
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |