如何使用 at89c51 直接控制 8x8 LED点阵显示简单图形.

来源:百度知道 编辑:UC知道 时间:2024/05/22 08:52:20
我用at89c51的 P1 和 P2 直接控制一个8x8 LED点阵,在c51的每个管脚也都加了1k电阻.
用c51为每个需要被点亮的点的行和列加正向电压,不需被点亮的点的行和列加反向电压.

首先,用at89c51逐一点亮每个点是成功.
问题:
当我想点亮一个 "口" 字型是,我使用以下两个方法都未成功.
1. 快速逐一点亮"口" 字型的每个点(亮度不够,还特别闪);
2. 一行一行的快速点亮行中属于"口"字型多个点(亮度不够,还特别闪.而连"口"字型也看不出来还不如方法 1 呢);
我是自学+初学, 请高手您多多帮助!
const unsigned char code range2[][8] =
{
{ 0xff, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xff } ,
{ 0x00, 0x7e, 0x42, 0x42, 0x42, 0x42, 0x7e, 0x00 } ,
{ 0x00, 0x00, 0x3c, 0x24, 0x24, 0x3c, 0x00, 0x00 } ,
{ 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00 }
};

void delay( unsigned short times )
{
while(--times);
}

main ()
{
// "口"字型从大变小. Faild
char idx = -1;
unsigned char step = 4;
while(1)
{
for (step = 0; step<4; ++step) // "口"字型大->小->在.在range2中描述
{
unsigned long dl = 0;

你的SetRow()函数细节是如何,看不清楚。
试试下列程序,看看有否效果。
;//-------------------------
ORG 0000H
ajmp main
org 0100h
main:
mov sp, #70h
MOV 50H, #066H
MOV 51H, #099H
MOV 52H, #081H
MOV 53H, #081H
MOV 54H, #042H
MOV 55H, #024H
MOV 56H, #018H
MOV 57H, #000H
;//-------------------------
ACALL DISP500MS
SJMP $ - 2
;//-------------------------
DISP500MS:
MOV R4, #60
ACALL mainloop
DJNZ R4, $ - 2
RET
;//-------------------------
mainloop:
MOV A, #0FEH
MOV R0, #50H
MOV R5, #8
flashcy:
MOV P1, A
MOV P2, @R0
INC R0
RL A
LCALL DELAY
DJNZ R5, flashcy
RET
;//-------------------------
DELAY: MOV R7, #4
DELAY1: MOV R6, #128
DJNZ R6, $
DJNZ R7,DELAY