找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1314|回复: 1
收起左侧

单片机控制点阵 为什么我这个函数正确,却不能正确显示0啊

[复制链接]
ID:261485 发表于 2018-4-13 08:26 来自手机 | 显示全部楼层 |阅读模式
为什么我这个函数正确,却不能正确显示0啊

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;
  5. sbit SRCLK=P3^6;                 //宏定义sbit RCLK=P3^5;
  6. sbit SER=P3^4;
  7. void delay(u16 i)                  //延时函数
  8. {   
  9. while(i--);
  10. }
  11. u8 ledduan[]=(0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00);                  //段选   横向选中一排
  12. u8 ledwei[]=(0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfb,0xfe);                  //位选   纵向选中一列
  13. void hc595sendbaty(u8 dat)
  14. {      u8 a;      
  15. SRCLK=0;                                 //为上升沿做准备          RCLK=0;                                           for(a=0;a<8;a++)          {}   SER=dat>>7;               
  16.    dat<<=1;               
  17.    SRCLK=1;                                 //产生上升沿                   _nop_();               
  18.    _nop_();                                   
  19.    SRCLK=0;                                 //为下一个上升沿做准备          }                          
  20.           RCLK=1;        
  21.   _nop_();        
  22.   _nop_();        
  23.   RCLK=0;}void main()
  24. {    u8 i;    P0=0x7f;                   //不理解为什么要先点亮第一排??   
  25. while(1)                {                                                              for(i=0;i<8;i++)        
  26.         {    P0=ledwei[i];                        hc595sendbaty(ledduan[i]);                        delay(100);               
  27.         hc595sendbaty(0x00);                }                 }          }
复制代码
回复

使用道具 举报

ID:164602 发表于 2018-4-13 09:52 | 显示全部楼层
你的程序正确才怪!!!!!
第一:编译有错:RCLK没申明。所以没能编译出可执行文件.HEX,你真的下载起了?那么就不是这个程序,当然不会显示正确了。
第二:主函数都没有,还说“函数正确”

不知道是不是你没有发全部程序。显示0的程序我也有一个,看看吧。

#include<reg51.h>
#include<intrins.h>

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
unsigned char code TAB[8]  = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char code CHARCODE[20][8]=
{

{0x00,0x00,0x00,0x3E,0x41,0x41,0x41,0x3E}, //0       

{0x00,0x00,0x00,0x00,0x21,0x7F,0x01,0x00}, //1

{0x00,0x00,0x00,0x21,0x43,0x45,0x49,0x31}, //2

{0x00,0x00,0x00,0x42,0x41,0x51,0x69,0x46}, //3

{0x00,0x00,0x00,0x0C,0x14,0x24,0x7F,0x04}, //4

{0x00,0x00,0x00,0x72,0x51,0x51,0x51,0x4E}, //5

{0x00,0x00,0x00,0x1E,0x29,0x49,0x49,0x06}, //6

{0x00,0x00,0x00,0x40,0x40,0x4F,0x50,0x60}, //7

{0x00,0x00,0x00,0x36,0x49,0x49,0x49,0x36}, //8

{0x00,0x00,0x00,0x30,0x49,0x49,0x4A,0x3C}, //9

{0x00,0x00,0x01,0x1F,0xE4,0x3C,0x07,0x01}, //A

{0x00,0x00,0x00,0x81,0xFF,0x91,0x91,0x6e}, //B

{0x00,0x00,0x00,0x7E,0x81,0x81,0x81,0xc2}, //C

{0x00,0x00,0x00,0x81,0xFF,0x81,0x81,0x7e}, //D

{0x00,0x00,0x00,0x81,0xFF,0x91,0xb9,0xc3}, //E

{0x00,0x00,0x00,0x81,0xFF,0x91,0xb8,0xc0}, //F

{0x00,0x00,0x3C,0x42,0x81,0x89,0xce,0x08}, //G

{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00},  //中

{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},  //全灭

{0x3C,0x62,0xB1,0xAB,0x87,0xB1,0x62,0x3C}//人脸

};
void delay(unsigned int time)//0.0001766s延时,约0.2ms
{
  unsigned int j;
  for(time;time>0;time--)
    for(j=0;j<20;j++);
}
void Hc595SendByte(unsigned char dat)
{
        unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                if ((dat<<a)&0x80)
                {
                        SER=1;
                }
                else
                {
                        SER=0;
                }
                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;       
        }

        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}

void main ()
{
        unsigned char i,j,k;
        P0=0xff;
        while (1)
        {
                for (i=0;i<20;i++)
                {
                        for (j=0;j<100;j++)
                        {
                                for (k=0;k<8;k++)
                                {
                                        P0=0xff;                       
                                        Hc595SendByte(CHARCODE[i][k]);
                                        P0=TAB[k];
                                        delay(5);
                                }
                        }                       
                }
        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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