找回密码
 立即注册

QQ登录

只需一步,快速开始

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

总是在第46行 max7219_echo(unsigned char bw,sw,gw,dw);

[复制链接]
跳转到指定楼层
楼主
ID:590660 发表于 2019-7-26 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1黑币
#include<reg51.h>
#define uchar unsigned char

//地址定义
#define adr_bit_1 0x01        //显示数据1的寄存器地址
#define adr_bit_2 0x02        //显示数据2的寄存器地址
#define adr_bit_3 0x03        //显示数据3的寄存器地址
#define adr_bit_4 0x04        //显示数据4的寄存器地址
#define adr_bitrans_mode  0x09 //译码方式寄存器的地址
#define adr_light_con  0x0a //亮度寄存器
#define adr_scan_count 0x0b  //扫描界线寄存器
#define adr_close 0x0c                 //掉电控制寄存器
#define adr_glint_con 0x0d         //闪烁控制寄存器
#define adr_show_test 0x0f         //显示测试寄存器

  //管脚定义
sbit jia=P1^0;
sbit jian=P1^1;
sbit max7219_pin_LOAD=P2^0;
sbit max7219_pin_CLK=P2^1;
sbit max7219_pin_DIN=P2^2;
sbit max7219_pin_RST=P2^3;

//函数声明
void shuchu(unsigned char B );        //显示输出和电压调节
void chaoshi_2s();                                //超时2s判断子程序
void xd_delay();      
void  max7219_reset();                        //复位
void  max7219_init();                         //初始化控制寄存器
void  max7219_echo(unsigned char bw,sw,gw,dw);          //数据寄存器
void  max7219_send_data(unsigned char addr,da);          //完成一次寄存器的写操作
void  max7219_delay(void);

//uchar a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main()
{
char timer=0;
uchar bw=0,sw=0,gw=5,dw=0;
uchar B;
//初始化
B=50;
P0=B;
max7219_reset();   //复位
max7219_init();           //初始化控制寄存器
max7219_echo(uchar bw,sw,gw,dw); //数据寄存器显示
max7219_send_data(uchar addr,da); //完成一次寄存器的写操作

chaxun: if(P1==0xff)         //判断是是否有键按下
{
  xd_delay();
  goto chaxun;
}
else
{   
  if(jia==0)                  //判断是否按下+键
   {
    if(P0==0xff)   //输出已为最大值
   goto chaxun;
  else                                  //未达最大值
   {
    chaoshi_2s();  //返回一个 timer判断
    if(timer==32)        //是否超过按键超过2s
    {
     chang_jia: v++;
     shuchujia_0.1v(char B);
     if(P0==0xff)                 //输出已为最大值
      goto chaxun;
     else                                  //未达最大值
     {   if(jia==0)                         //判断是否按下+键
      {         //xd_delay();
        goto chang_jia;
        }
       else
        goto chaxun;
       }
      }
      else
      {          v++;
       shuchujia_0.1v(uchar B);
       goto chaxun;
      }
     }
    }
    if(jian==0)                         //按下—键
    {  if(P0==0)                 //输出已为最小值
      goto chaxun;
     else                           //已达最小值
     {        chaoshi_2s();        //返回一个判断值timer
      if(timer==32)        //是否超过按键超过2s
      {        chang_jian: v--;
       shuchujian_0.1v(uchar B);
       if(P0==0)                //输出已为最小值
        goto chaxun;
        else                  //未达最小值
        {        if(jian==0)         //判断按下是-键
          {                //xd_delay();
            goto chang_jian;
          }
         else
          goto chaxun;
         }
        }
        else
        {
         v--;
         shuchujian_0.1v(uchar B)
         goto chaxun;
        }
       }
      }
     }
    }
void shuchu(uchar B)          //修改显示数值及电压输出
{          //输出电压改变
P0=B;
//显示改变
bw=B/1000;
sw=B%1000/100;
gw=B%1000%100/10+0x80;
dw=B%10;
/*bw=a[bw];sw=a[sw];gw=a[gw]+0x80;        dw=a[dw];*/
max7219_echo(unsigned char bw,sw,gw,dw);  //数据寄存器显示
max7219_send_data(unsigned char addr,da);        //完成一次寄存器的写操作
}
void chaoshi_2s()                //查询超2s子程序
{ TMOD=0x01;
  TH0=0xff;
TL0=0xff;
TR0=1;
while(jia==0||jian==0)
{ while(!TF0);                        //定时一次未到空等待
  timer++;
  TH0=0xff;                //重新装入数值
  TL0=0xff;
  if(timer==32)
   break;
  }
}
//延时消抖
void xd_delay()
{         uchar i;
  for(i=0;i<2000;i++);
}
///完成max7219的复位
void  max7219_reset()
{  uchar i
  max7219_pin_RST=0;
  for(i=0;i<125;i++)
   max7219_delay();
  max7219_pin_RST=1;
  for(i=0;i<125;i++)
   max7219_delay();
    max7219_pin_RST=0;
    for(i=0;i<125;i++)
     max7219_delay();
}
//通过写控制寄存器,完成max7219的初始化
void  max7219_init()
{   max7219_reset();
   max7219_send_data(addr_scan_count,0x04);
   max7219_send_data(addr_light_con,0x80);
    max7219_send_data(addr_trans_mode,0xff);
     max7219_send_data(addr_close,0x01);
}
//入口参数 bw,sw,gw,dw
//送8位显示数据到显示寄存器
void  max7219_echo(unsigned char bw,sw,gw,dw)
{   max7219_send_data(addr_bit_1,bw);
max7219_send_data(addr_bit_2,sw);
max7219_send_data(addr_bit_3,gw);
max7219_send_data(addr_bit_4,dw);
}
//入口地址:addr寄存器地址,da寄存器设置值
//把设置值写入对应的寄存器中
void max7219_send_data(unsigned char addr,da)
{ uchar i,byte_out;
  byte_out=adr;
mwx7219_pin_DIN=1;
mwx7219_pin_CLK=1;
mwx7219_pin_LOAD=0;
for(i=1;i<8;i++)
{  mwx7219_pin_CLK=1;
   mwx7219_pin_DIN=(bit)(byte_out&0x80);
  byte_out=byte_out<<1;
  mwx7219_CLK=0;
  max7219_delay();
}
   mwx7219_pin_CLK=1;
   byte_out=da;
   for(i=0;i<7;i++)
   { mwx7219_pin_CLK=1;
     mwx7219_pin_DIN=(bit)(byte_out&0x80)
  byte_out=byte_out<<1;
   mwx7219_CLK=0;
  max7219_delay();
  }
  mwx7219_pin_CLK=1;
  mwx7219_pin_LOAD=1;
  mwx7219_pin_DIN=(bit)(byte_out&0x80);
  mwx7219_pin_CLK=0;
  max7219_delay();
  max7219_pin_CLK=1;
  }
  //延时
void max7219_delay(void)
  {  uchar i;
    for(i=0;i<125;i++)
  {
  }
}



总是在第46行 max7219_echo(unsigned char  bw,sw,gw,dw);附近显示语法错误,但是我又没检查出错误出处,求指点

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

使用道具 举报

沙发
ID:590652 发表于 2019-7-26 10:46 | 只看该作者
void  max7219_echo(unsigned char bw,sw,gw,dw)
{   max7219_send_data(addr_bit_1,bw);
max7219_send_data(addr_bit_2,sw);
max7219_send_data(addr_bit_3,gw);
max7219_send_data(addr_bit_4,dw);
}
这个函数需要放到
void shuchu(uchar B)          //修改显示数值及电压输出
{          //输出电压改变
P0=B;
//显示改变
bw=B/1000;
sw=B%1000/100;
gw=B%1000%100/10+0x80;
dw=B%10;
/*bw=a[bw];sw=a[sw];gw=a[gw]+0x80;        dw=a[dw];*/
max7219_echo(unsigned char bw,sw,gw,dw);  //数据寄存器显示
max7219_send_data(unsigned char addr,da);        //完成一次寄存器的写操作
}这个需要调用函数前面
回复

使用道具 举报

板凳
ID:590652 发表于 2019-7-26 11:01 | 只看该作者
函数申明也需要void  max7219_echo(unsigned char bw,sw,gw,dw);  被调用的函数要在 需要调用这个void shuchu(unsigned char B );  函数之前。希望我的回答可以帮到你哦
回复

使用道具 举报

地板
ID:390438 发表于 2019-7-26 11:14 | 只看该作者
max7219_echo(uchar bw,sw,gw,dw); //数据寄存器显示  加入uchar 干嘛?
回复

使用道具 举报

5#
ID:390438 发表于 2019-7-26 11:14 | 只看该作者
max7219_echo(uchar bw,sw,gw,dw); //数据寄存器显示  多了uchar
回复

使用道具 举报

6#
ID:590660 发表于 2019-7-26 11:19 | 只看该作者
hspirit3 发表于 2019-7-26 11:14
max7219_echo(uchar bw,sw,gw,dw); //数据寄存器显示  加入uchar 干嘛?

数码管不是用字符显示的吗?
回复

使用道具 举报

7#
ID:771143 发表于 2020-7-8 22:09 | 只看该作者
楼主最后解决问题了吗,我也遇到这个问题了,按第一位大佬说的做了,但没解决
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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