找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问下我16*16点阵显示一个汉字的程序有问题吗?

[复制链接]
跳转到指定楼层
楼主
ID:710261 发表于 2020-6-26 14:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
50黑币
1个74154驱动阴极,2个74595驱动阳级,为什么我仿真出来的“二”这个字的上下两横反复跳?速度一会快一会儿慢程序如下:
#include <reg52.h>
//#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DS=P2^4;
sbit SH=P2^5;
sbit ST=P2^6;
sbit A_port=P1^0;
sbit B_port=P1^1;
sbit C_port=P1^2;
sbit D_port=P1^3;
/*
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xF8,0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xC0,0x01,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
*///二
uchar dian_H[]={
0xFF,0xFF,0xFF,0xFF,
0xF8,0xFF,0xFF,0xFF,
0xFF,0xFF,0xC0,0xFF,
0xFF,0xFF,0xFF,0xFF
};//列码高8位
uchar dian_L[]={
0xFF,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0x01,0xFF,
0xFF,0xFF,0xFF,0xFF
};//列码低8位

/*列选函数*/
void Sendbyte(uint dat1,uint dat2)//dat1为列码低八位,dat2为高八位
{
        uchar i;
        ST=0;
                        for(i=0;i<8;i++)//将列码低八位发送至595的移位寄存器
                {
                                SH=0;
                                        if(dat1&0x01)
                                                DS=1;
                                        else
                                                DS=0;//取列码的最低位,若为1则DS输入1,若为0则DS输入0
                                SH=1;
                                dat1=dat1>>1;
                }
                        for(i=0;i<8;i++)//将列码高八位发送至595的移位寄存器
                {
                                SH=0;
                                        if(dat2&0x01)
                                                DS=1;
                                        else
                                                DS=0;
                                SH=1;
                                dat2=dat2>>1;
                }
        ST=1;
}
/*行选函数*/
void HX(uchar hang)
{
        switch (hang)
                {
  case 0:
   D_port = 0; C_port = 0; B_port = 0; A_port = 0;//选第1行
   break;
  case 1:
   D_port = 0; C_port = 0; B_port = 0; A_port = 1;//选第2行
   break;
  case 2:
   D_port = 0; C_port = 0; B_port = 1; A_port = 0;//选第3行
   break;
  case 3:
   D_port = 0; C_port = 0; B_port = 1; A_port = 1;//选第4行
   break;
  case 4:
   D_port = 0; C_port = 1; B_port = 0; A_port = 0;//选第5行
   break;
  case 5:
   D_port = 0; C_port = 1; B_port = 0; A_port = 1;//选第6行
   break;
  case 6:
   D_port = 0; C_port = 1; B_port = 1; A_port = 0;//选第7行
   break;
  case 7:
   D_port = 0; C_port = 1; B_port = 1; A_port = 1;//选第8行
   break;
  case 8:
   D_port = 1; C_port = 0; B_port = 0; A_port = 0;//选第9行   
   break;
  case 9:
   D_port = 1; C_port = 0; B_port = 0; A_port = 1;//选第10行
   break;
  case 10:
   D_port = 1; C_port = 0; B_port = 1; A_port = 0;//选第11行
   break;
  case 11:
   D_port = 1; C_port = 0; B_port = 1; A_port = 1;//选第12行
   break;
  case 12:
   D_port = 1; C_port = 1; B_port = 0; A_port = 0;//选第13行
   break;
  case 13:
   D_port = 1; C_port = 1; B_port = 0; A_port = 1;//选第14行
   break;
  case 14:
   D_port = 1; C_port = 1; B_port = 1; A_port = 0;//选第15行
   break;
  case 15:
   D_port = 1; C_port = 1; B_port = 1; A_port = 1;//选第16行
   break;
  }
}
/*主函数*/
void main()
{       
  uchar j;
        while(1)
        {
                for(j=0;j<16;j++)
                {                                       
                        Sendbyte(dian_L[j],dian_H[j]);       
                        HX(j);
          }
        }
}

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

使用道具 举报

沙发
ID:710261 发表于 2020-6-26 14:33 | 只看该作者
是不是频率的问题啊吗,怎么通过编程设置他动态扫描的频率啊
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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