大家好,请问有谁做过51单片机的16*64点阵吗,,求仿真图和程序

 我来答
renlei040766
2011-05-11 · 超过16用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:41.9万
展开全部
  如果单片机I/O口不够用的话 试试用 串入并出 的方式
  我写过一个8*8点阵 是用的 串入并出 方式 是汇编的 你参考下吧
  其实可以考虑下用液晶 成本也不高

  ;MyDesign 8x8LEDboard by MCU
  ;阴极(行ROW)
  ;共阳极(列COL)
  ;P3.4-------MD
  ;P3.5-------CLR_COL 164并出端清零(显示)
  ;P3.6-------CLK1 164移位脉冲输出(驱动)
  ;P3.7-------CLK2 164移位脉冲输出(显示)
  ;P1.0-------驱动输入(串入)
  ;P2.0-------显示输入(串入)
  ;MD是灭灯信号
  ;CLR_COL是驱动清零信号,低电平有效
  ;CLK1是驱动的移位脉冲
  ;CLK2是显示的移位脉冲
  ;******************************************
  ORG 0000H
  MD EQU P3.4
  CLR_COL EQU P3.5
  CLK1 EQU P3.6
  CLK2 EQU P3.7

  ;初始化存储区
  MOV 50H, #81H
  MOV 51H, #42H
  MOV 52H, #24H
  MOV 53H, #18H
  MOV 54H, #18H
  MOV 55H, #24H
  MOV 56H, #42H
  MOV 57H, #81H
  MOV B, #50H ;首地址

  MOV IE, #98H ;开中断
  AJMP RVE1

  ORG 0050H
  RVE1:
  MOV TMOD, #20H ;T1工作方式2定时状态
  MOV TH1, #0F3H ;计数常数->T1
  MOV TL1, #0F3H
  SETB TR1 ;启动T1
  MOV SCON, #50H ;串口方式1,允许接收
  MOV PCON, #00H ;置波特率控制位SOMD=0,不加倍
  AJMP MAIN

  ;对显示信息修改的入口
  RVE2:
  SETB MD
  MOV R0, B ;恢复存储区地址
  CJNE R0, #58H, CONT1 ;存储区未写满则继续
  MOV R0, #50H ;存储区已写满则从第一个存储单元开始
  MOV B, #50H
  CONT1:
  MOV A, @R0 ;先将@R0中的数做保存
  MOV @R0, SBUF ;保存数据
  CJNE @R0, #0FFH, CONT5 ;"#0FFH"是暂时定义的结束修改命令
  MOV @R0, A ;还原这次的修改
  AJMP CONT2
  CONT5:
  CJNE @R0, #0EEH, CONT2 ;"#0EEH"是暂时定义的转到第一个存储单元命令
  MOV @R0, A
  AJMP RVE5
  CONT2:
  INC B ;为了方便更改地址
  MOV A, B
  CJNE A, #58H, CONT3
  MOV B, #50H
  CONT3:
  MOV SBUF, B ;发送下一次修改的地址
  AJMP MAIN
  CONT4:
  INC R0
  MOV B, R0 ;保存地址
  MOV SBUF, B
  AJMP MAIN
  RVE5:
  MOV B, #50H
  MOV SBUF, B
  MAIN:
  JBC RI, RVE2 ;如果接收到数据则跳至数据修改程序
  CLR CLK1
  CLR CLK2
  CLR CLR_COL ;清零移位寄存器并出(驱动)
  MOV SP, #60H
  MOV R1, #08H ;加载显示信息完成标志
  MOV R0, #50H ;片内存储区首地址
  MOV R2, #01H ;存储驱动信息
  MOV R3, #08H ;加载驱动信息完成标志
  MOV R4, #08H ;8行显示信息均已动态扫描

  ;加载一行的显示信息
  LOOP1:
  SETB MD ;灭灯
  MOV A, R0
  PUSH ACC
  MOV A, @R0
  LOADDATA:
  MOV P2, A ;加载显示信息,串入164
  SETB CLK2 ;发移位脉冲
  CLR CLK2
  RR A ;显示信息左移一位
  DJNZ R1, LOADDATA ;显示信息没加载完成则跳转继续加载

  ;加载驱动信息,开始按列动态扫描
  ;工作方式如下
  ;加载第一行显示信息,扫描第一行
  ;加载第二行显示信息,扫描第二行(对ACC右移,通过P1口串出)
  LOOP2:
  MOV A, R2 ;加载驱动信息
  SETB CLR_COL ;禁止清零移位寄存器并出(驱动)
  MOV P1, A ;加载驱动信息,串入164
  SETB CLK1 ;发移位脉冲
  CLR CLK1
  RR A ;驱动信息左移一位
  CLR MD ;显示
  LCALL myDELAY
  MOV R2, A ;保存当前的驱动信息
  DJNZ R4, LOOP3 ;8行显示信息至少有一行没动态扫描完成则跳转继续加载
  ;不需要对动态扫描的次数作判断
  AJMP MAIN
  LOOP3:
  POP ACC
  INC A
  MOV R0, A
  AJMP LOOP1

  ;450ms延时子程序
  ;MOV 1(个机器周期)
  ;DEC 1
  ;CJNE 2
  ;RET 2
  ;由myDELAY.C计算生成
  myDELAY:
  MOV R6,#197
  MOV R7,#1
  DELAY1:
  DEC R6
  CJNE R6,#00H,DELAY1
  MOV R6,#197
  DEC R7
  CJNE R7,#00H,DELAY1
  RET

  END
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式