找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2456|回复: 7
打印 上一主题 下一主题
收起左侧

帮忙看看这个点阵的问题

[复制链接]
跳转到指定楼层
楼主


#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^0;  //串行时钟
sbit SH=P2^1;  //串行数据输入
sbit ST=P2^2;  //数据锁存
sbit A1=P2^3;
sbit A2=P2^4;
sbit A3=P2^5;
sbit A4=P2^6;  //138译码器


uchar code H[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*--  文字:  电  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x20,0x10,0x30,0x18,0x30,0x10,0x32,
      0x0B,0xFF,0x7C,0x30,0x18,0x30,0x18,0x78,
      0x18,0x78,0x18,0xCC,0x19,0x8E,0x1B,0x07,
      0x1C,0x02,0x36,0x00,0x63,0xFF,0x21,0xFE,
/*--  文字:  子  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x3F,0xF0,0x00,0x20,0x00,0x40,0x00,0x80,0x01,0x00,0x01,0x00,0x01,0x04,
0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00,
/*--  文字:  爱  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xF8,0x3F,0x90,0x12,0x10,0x09,0x20,0x3F,0xFE,0x22,0x02,0x42,0x00,0x3F,0xFC,
0x04,0x00,0x07,0xF0,0x0C,0x20,0x0B,0x40,0x10,0xC0,0x63,0x30,0x8C,0x0E,0x30,0x04,
/*--  文字:  好  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,
/******************************************************************************/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};

uchar BUFF[10];   //缓冲数组

void read(uchar dat)  
{
     uchar i;
     for(i=0;i<8;i++)
     {
         DS=(dat&0x80)?1:0;  //判断最高位,为真取1,为假取0
         SH=1;        //上升沿送数据
         SH=0;
         dat=dat<<1;  //左移取下一位
     }   
}//写入数据
void buff(uchar h,uchar word)
{
    uchar i;
    for(i=0;i<5;i++)
    {
        BUFF[2*i]=H[word*32+32*i+h*2];
        BUFF[2*i+1]=H[word*32+32*i+h*2+1];
    }
}//预先缓冲5个字
void move(uchar k)
{
    uchar i,temp,u8;
    if(k>=8)
    {
         k=k-8;
         u8=1;
    }
    else
         u8=0;
    for(i=0+u8;i<8+u8;i++)
    {
         temp=(BUFF<<k)|(BUFF[i+1]>>(8-k));
         read(temp);
    }
}//向左移动
int main(void)
{ uchar i=0,k=0,l=0,word=0;
    ST=SH=0;    //初始化端口
   
    while(1)
{
   
   
    buff(i,word);
   
    switch(i)
    {
        case 0:A1=0; A2=0; A3=0;A4=0;move(k); break;
        case 1:A1=1; A2=0; A3=0;A4=0;move(k); break;
        case 2:A1=0; A2=1; A3=0;A4=0;move(k); break;
        case 3:A1=1; A2=1; A3=0;A4=0;move(k); break;  
        case 4:A1=0; A2=0; A3=1;A4=0;move(k); break;
        case 5:A1=1; A2=0; A3=1;A4=0;move(k); break;
        case 6:A1=0; A2=1; A3=1;A4=0;move(k); break;
        case 7:A1=1; A2=1; A3=1;A4=0;move(k); break;
        case 8:A1=0; A2=0; A3=0;A4=1;move(k); break;
        case 9:A1=1; A2=0; A3=0;A4=1;move(k); break;
        case 10:A1=0; A2=1; A3=0;A4=1;move(k); break;
        case 11:A1=1; A2=1; A3=0;A4=1;move(k); break;  
        case 12:A1=0; A2=0; A3=1;A4=1;move(k); break;
        case 13:A1=1; A2=0; A3=1;A4=1;move(k); break;
        case 14:A1=0; A2=1; A3=1;A4=1;move(k); break;
        case 15:A1=1; A2=1; A3=1;A4=1;move(k); break;
        default: break;
    } //动态刷新
  
    if(++i==16)
    {
       l++;
       i=0;
       if(l==3){l=0;
       k++;
       if(k==16){
           k=0;word++;}}
    }

    if(word==8)
        word=0;
    ST=1;  //锁存数据
    ST=0;
}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:163557 发表于 2017-2-5 18:44 | 只看该作者
各位大神,请求帮助
回复

使用道具 举报

板凳
ID:7485 发表于 2017-2-6 19:42 | 只看该作者
什么点阵模块?硬件连接有无问题?字模正确吗?
回复

使用道具 举报

地板
ID:163961 发表于 2017-2-8 22:42 | 只看该作者
硬件连接有问题吧
回复

使用道具 举报

5#
ID:163968 发表于 2017-2-8 23:56 | 只看该作者
这个,硬件检查一下吧
回复

使用道具 举报

6#
ID:111634 发表于 2017-2-9 12:05 | 只看该作者
点阵拼接好像有点问题。
回复

使用道具 举报

7#
ID:111634 发表于 2017-2-9 12:52 | 只看该作者
本帖最后由 zl2168 于 2017-2-9 12:57 编辑

点阵器件连接好像有点问题。
实例66  LED 16×16点阵扫描显示汉字



Proteus仿真一下,确认有效。
实例66a LED 16×16点阵汉字显示.rar (48.21 KB, 下载次数: 3)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1.书中电路和程序设计有详细说明,程序语句条条有注解。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表