找回密码
 立即注册

QQ登录

只需一步,快速开始

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

不知道为啥 用单片机+74hc595不会出问题 直接用端口就会出问题 求大佬帮忙看看

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar  hanzi[9][8]={
  6.                   { 0xC3,0xc3,0xc3,0xc3,0x42,0x42,0x24,0x24 },    //其他
  7.                   /*              {0xC0,0xBF,0x7D,0xBB,0x3E,0xA0,0xBF,0x9D},          //你
  8.                                    {0xF7,0xEF,0xDF,0xBF,0x00,0xBF,0xDF,0xEF},          //个
  9.                                    {0xC7,0xBB,0x2D,0xBC,0xBC,0x2D,0x9B,0xC7},          //符号1
  10.                                    {0x00,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x00},          //符号2
  11.                                    {0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x81,0xFF},          //符号3
  12.                                    {0xFF,0xFF,0xC3,0xDB,0xDB,0xC3,0xFF,0xFF},          //符号4
  13.                                    {0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF},          //符号5
  14.                                         {0x7E,0xBD,0xDB,0xE7,0xE7,0xDB,0xB9,0x7E}      //结束            */                                                                 
  15.                                    },
  16.                 lie[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                  
  17. /*void delay( int c) //延迟函数

  18. int x,y;
  19. for(x=0;x<c;x++)
  20. {
  21.   for(y=110;y>0;y--);
  22. }
  23.   */
  24. void main()
  25. {           
  26. void delay( int c);
  27. int a,b,c,d;
  28. while(1){

  29.           P1=0x80;
  30.          for(a=0;a<9;a++)  

  31.         {for(c=0;c<2000;c++)        {
  32.          for(b=0;b<8;b++)
  33.          {           
  34.          
  35.          P0=hanzi[0][b];
  36.          P1=_cror_(P1,1);         
  37.         }         
  38.          }                          
  39.          }
  40.                    }
  41.           }
复制代码



                        不知道为啥 用595不会出问题 直接用端口就会出问题 求大佬看看
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2020-5-25 10:19 | 只看该作者
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
所以595在没有新的数据刷新时可以保持的
回复

使用道具 举报

板凳
ID:213173 发表于 2020-5-25 10:48 | 只看该作者
这是仿真软件的缺陷,不是程序问题,高速动态扫描无法得到预想效果。
回复

使用道具 举报

地板
ID:94031 发表于 2020-5-25 11:31 | 只看该作者
用 P0 P1 口点亮 8x8 led点阵
/* 用 P0 P1 口点亮 8x8 led点阵
   P1  位选
   P0  段选
*/
#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

hanzi[]={0xC3,0xc3,0xc3,0xc3,0x42,0x42,0x24,0x24};    //
lie[]  ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void main()
{           
       
        while(1)
        {
                u8 i;
               
                for(i=0;i<8;i++)
                {
                        P1=~lie[i];//位选
                        P0=hanzi[i];//段选
                }
        }
}
回复

使用道具 举报

5#
ID:737694 发表于 2020-5-25 14:51 | 只看该作者
wulin 发表于 2020-5-25 10:48
这是仿真软件的缺陷,不是程序问题,高速动态扫描无法得到预想效果。

哦哦 我又对着书写一遍一摸一样的程序 还是有问题 就感觉很奇怪  现在知道了 多谢
回复

使用道具 举报

6#
ID:737694 发表于 2020-5-25 14:59 | 只看该作者
xuyaqi 发表于 2020-5-25 11:31
用 P0 P1 口点亮 8x8 led点阵
/* 用 P0 P1 口点亮 8x8 led点阵
   P1  位选

                  #include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

hanzi[]={0xC3,0xc3,0xc3,0xc3,0x42,0x42,0x24,0x24};    //
lie[]  ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void main()
{           
      
        while(1)
        {
                u8 i;
                                u16 j;
               
                for(i=0;i<8;i++)
                {        /*  for(j=0;j<500;j++)*/
                                
                        P1=~lie[ i];//位选
                        P0=hanzi[ i];//段选
               
        }                }
}
不行 用仿真直接全亮 我加个延迟循环 也是一闪一闪的 显示内容也不对 仿真不行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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