freshuman 发表于 2020-9-11 21:30:18

嘉立创每月的福利,弄一个开发单片机参数用的显示板

本帖最后由 freshuman 于 2020-9-11 22:04 编辑

每一次想显示单片机当前的参数,麻烦就作一个RS485+数码管的显示板
新唐003+TM1650驱动方案;
空板:


焊好的板;


刚上电的:

现在解码红外的键值,贼好用,当然可以显示你要显示的数据;


附一个原厂的1650的驱动代码:
/*****************************************************************************
*版权信息:深圳天微电子有限公司
*文 件 名:TM1650-V1.0
*当前版本:V1.0
*MCU 型号:STC12C5608AD
*开发环境:Keil uVision4
*晶震频率:11.0592MHZ      
*完成日期:2013-07-29
*程序功能:1.上电8段4位共阴数码管显示1、2、3、4.
            2.按下K11与DIG1,K12与DIG2 ,K13与DIG3之间的按键,数码管第一位分别显示5、6、7。
*免责声明:1.此程序为TM1650驱动LED数码管演示程序,仅作参考之用。
            2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任            
********************************************************************************/
#include<reg52.h>                                  //MCU头文件
#include<intrins.h>                                  //包含nop指令头文件
#define uint unsigned int                        //数据类型宏定义
#define uchar unsigned char                        //数据类型宏定义

#define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();//宏定义


/********************定义控制端口**********************/
sbit SCL=P2^1;                     //时钟线
sbit SDA=P2^0;                     //数据线

uchar keya;                           //定义读出按键返回值

/*************1ms延时*晶振11.0592M********************/
void delay(uint n)
{
uint i;
while(n--)
         for(i=0;i<550;i++);
}

/**************共阴数码管显示0-F**********************/
uchar display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共阴极字段码

/************ START信号*******************************/
void TM1650_START()
{
      SCL=1;
      SDA=1;
      nop;
      SDA=0;
      nop;
      SCL=0;
}
/******************** STOP信号************************/
void TM1650_STOP()
{
      SDA=0;
      nop;
      SCL=1;
      nop;
      SDA=1;
      nop;
      SCL=0;
      SDA=0;
}
/****************写1个字节给TM1650********************/
void write_8bit( uchar dat)
{
         uchar i;
      SCL=0;
      for(i=0;i<8;i++)
                {
                if(dat&0x80)
                {
                        SDA=1;
                        nop;
                        nop;
                        SCL=1;
                        nop;
                        nop;
                        nop;
                        nop;
                        nop;
                        SCL=0;         
                }
                else
                {
                        SDA=0;
                        nop;
                        nop;
                        SCL=1;
                        nop;
                        nop;
                        nop;
                        nop;
                        nop;
                        SCL=0;
                }      
                        dat<<=1;         
                }
                SDA=1;                        //ACK信号
                nop;
                nop;
                nop;
                nop;
                SCL=1;
                nop;
                nop;
                nop;
                nop;
                nop;
                SCL=0;
                nop;
                nop;         
}

/**********************读8bit**************************/
uchar read_8bit()
{
      uchar dat,i;
      SDA=1;
      dat=0;
      for(i=0;i<8;i++)
      {
      SCL=1;                        //时钟上沿
      nop;
      nop;
      nop;
      dat<<=1;
      if(SDA)
         dat++;
      SCL=0;
      nop;
      nop;
      nop;
      nop;
      }
      SDA=0;                            //ACK信号
      nop;
      nop;
      nop;
      SCL=1;
      nop;
      nop;
      nop;
      nop;
      SCL=0;
      nop;
      
      return dat ;

}
/*******************读按键命令************************/
uchar TM1650_read()
{
      uchar key;
      TM1650_START();
    write_8bit(0x49);//读按键指令      
      key=read_8bit();
      TM1650_STOP();
      return key;
}
/*****************发送命令信号***********************/
void TM1650_send(uchar date1,uchar date2)
{
         TM1650_START();
      write_8bit(date1);
      write_8bit(date2);
      TM1650_STOP();
}

/*****************显示函数***********************/
void disp()
{
      TM1650_send(0x48,0x01);                     // 开启显示模式:8段显示,1级亮度
      TM1650_send(0X68,display);//GID1
      TM1650_send(0X6A,display);//GID2
      TM1650_send(0X6C,display);//GID3
      TM1650_send(0X6E,display);//GID4
}


/**************主函数**************************/
void main(void)
{
   disp();                                          //上电显示1、2、3、4
   delay(1);
   while(1)
      {
                keya=TM1650_read();
                delay(50);
                if (keya!=0)
                {
                        switch(keya)               //控制数码管显示数字         
                        {            
                        case 0x44:TM1650_send(0X68,display);break;    //K11与DIG1   
                        case 0x4D:TM1650_send(0X68,display);break;    //K12与DIG2                  
                        case 0x56:TM1650_send(0X68,display);break;    //K13与DIG3
                        default:break;
                        }
                }      
    }
}


huangyiting1990 发表于 2020-9-11 21:34:45

.... 运用场景是啥呢?
你发的文字都认识,但不知道具体啥意思

freshuman 发表于 2020-9-11 21:39:13

huangyiting1990 发表于 2020-9-11 21:34
.... 运用场景是啥呢?
你发的文字都认识,但不知道具体啥意思

难道我的表达那么次,就是每一月嘉立创福利每款板5元包邮,所以作一个数码管显示板。

elevator2020 发表于 2020-9-11 21:39:46

可以显示STM32单片机里数据吗?

freshuman 发表于 2020-9-11 21:40:44

elevator2020 发表于 2020-9-11 21:39
可以显示STM32单片机里数据吗?

串口的RS485随便用

yy625 发表于 2020-9-11 21:44:49

当做好后,发现显示的参数就那么几个,于是再加数码管;
又发现不能显示ASCII,于是上LCD12864吧;
12864只能显示简单的几行,太LOW了,于是上个7寸TFT吧,800X480够不够?
……
最后发现:怎么那么傻,用串口助手调一下不就行了吗

freshuman 发表于 2020-9-11 21:48:37

本帖最后由 freshuman 于 2020-9-11 22:53 编辑

yy625 发表于 2020-9-11 21:44
当做好后,发现显示的参数就那么几个,于是再加数码管;
又发现不能显示ASCII,于是上LCD12864吧;
12864只 ...

就一个调试工具要那么高级吗?
有时候就显示那么几个而以;


不是什么时候都可以在电脑上显示用的,户外作业;
用来DMX512地址码,信号值........不说了,
这句话突然想起大学上学的时候我反问教单片机的老师,单片机有什么用,干吗不弄一个奔三的机器回来用,几百块,现在想想是多多幼稚;

Himem 发表于 2020-9-11 21:50:14

yy625 发表于 2020-9-11 21:44
当做好后,发现显示的参数就那么几个,于是再加数码管;
又发现不能显示ASCII,于是上LCD12864吧;
12864只 ...

确实 买个二手墨水屏标签比这个好玩

zhanyanqiang 发表于 2020-9-11 21:50:32

yy625 发表于 2020-9-11 21:44
当做好后,发现显示的参数就那么几个,于是再加数码管;
又发现不能显示ASCII,于是上LCD12864吧;
12864只 ...

哈哈哈哈哈哈哈,还真是

freshuman 发表于 2020-9-11 21:58:36

不是所用操作都要用电脑,示波器,LCD,杀鸡干吗要用牛刀;

armok. 发表于 2020-9-11 22:00:23

楼主违规了。

不得整段使用大字体。发帖的时候已经有警告。

freshuman 发表于 2020-9-11 22:05:16

armok. 发表于 2020-9-11 22:00
楼主违规了。

不得整段使用大字体。发帖的时候已经有警告。

电脑上显示看小字累人,就显大一点好看一点;

PCBBOY1991 发表于 2020-9-11 22:12:49

新塘也是禄的羊毛吧,哈哈哈

freshuman 发表于 2020-9-11 22:14:20

本帖最后由 freshuman 于 2020-9-11 22:16 编辑

PCBBOY1991 发表于 2020-9-11 22:12
新塘也是禄的羊毛吧,哈哈哈

新唐不是送的,003我17年用到现在也差不多用了100K个了;
新唐的003用起来顺手了,也没有出现什么大BUG,有一个BUG可以避免的,如果你是RS485+003就会碰到的;

maxking 发表于 2020-9-11 22:23:52

什么bug?

freshuman 发表于 2020-9-11 22:27:56

maxking 发表于 2020-9-11 22:23
什么bug?

批量机(几十台上千以台同时工作,像景观亮化的灯具都是上千上万台同时工作)使用的时候,先通电信号,再上电主板,MCU不会启动,像死了一样;

maxking 发表于 2020-9-11 22:31:45

这批量的MCU是独立的还是相互之间通讯的?

freshuman 发表于 2020-9-11 22:36:00

maxking 发表于 2020-9-11 22:31
这批量的MCU是独立的还是相互之间通讯的?

都是从机,在一条或多条主信号线上,都听主控器或电脑视频播放信号;

freshuman 发表于 2020-9-11 22:41:15

新唐003操作IAP 保存数据用,真心没有出现过数据丢失,之前用的STC12,笙泉的片都出现过小概率丢失;

freshuman 发表于 2020-9-11 23:04:47

发一个红外键值解码视频,多爽啊,一目了然;
https://www.iqiyi.com/v_18zha12j97w.html

穿越时空 发表于 2020-9-12 08:59:28

freshuman 发表于 2020-9-11 21:48
就一个调试工具要那么高级吗?
有时候就显示那么几个而以;



显示DMX512地址码,不用RDM手持吗?

lovejp1981 发表于 2020-9-12 09:05:04

不错,但是我都是用lcd来显示,能显示更多信息。

freshuman 发表于 2020-9-12 10:26:58

本帖最后由 freshuman 于 2020-9-12 10:31 编辑

穿越时空 发表于 2020-9-12 08:59
显示DMX512地址码,不用RDM手持吗?

你觉得有多少景观亮化的灯具会用上RDM,RDM用在景观灯具是多余的,又不是舞台灯;
像这样解码红外键值不爽吗?非要电脑串口吗?

haohai 发表于 2020-9-12 11:03:07

能发一下红外解码的程序吗

freshuman 发表于 2020-9-12 11:10:21

haohai 发表于 2020-9-12 11:03
能发一下红外解码的程序吗

论坛一搜大把的,也要自己平时多看看论坛;

freshuman 发表于 2020-10-11 15:30:22


NTC查表温度,003内隙电压
NTC电压ADC值内隙电压对电压的ADC值
NTC电压值   电源电压值

freshuman 发表于 2020-10-11 15:33:19

这个查表NTC温度不受电源电压浮动影响,只受上拉的电阻的精值,同样是3.3V 5.0V电源电压都不会影响温度

moment 发表于 2020-10-31 22:06:37

嘉立创打样,特别适合做这种小工具。用量不多,还便宜啊。

freshuman 发表于 2020-12-15 15:58:19



NTC温度也可以作到+-1度

lnso 发表于 2020-12-26 21:24:27

都在撸嘉立创的羊毛
页: [1]
查看完整版本: 嘉立创每月的福利,弄一个开发单片机参数用的显示板