找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

段码屏的显示原理和HT1621驱动方法详解

查看数: 33799 | 评论数: 19 | 收藏 22
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2018-7-7 21:14

正文摘要:

最近一个客户联系到沙鸥,打算对一个市面上现有的测试仪器进行升级改进,电话初步交流了一下,当时一想,仪器无非就是探头加二次电路,应该SO EASY,客户发来产品资料,于是简单调研了一下这个仪器,发现光是这种类 ...

回复

ID:1064915 发表于 2024-3-27 10:05
1.        #include <STC15F2K60S2.H>
2.        #include <intrins.h>
3.       
4.        /*7段数码段对应的8Bit顺序依次为bit7~bit0:abcx_fged
5.              --01--
6.           |            |
7.           10   02     08
8.           |  --20--   |
9.           40   04     08
10.           |            |
11.              --80--      
12.        */
13.       
14.        /*--------------------------------------------------------------
15.        LCD操作相关的宏定义和函数声明
16.        ----------------------------------------------------------------*/
17.        #define  ComMode  0x52    //4COM,1/3bias 偏压比     1000 0101 0010
18.        //#define ComMode  0x50    //4COM,1/2bias          1000 0101 0000
19.        #define  RCosc     0x30    //内部RC振荡器(上电默认)1000 0011 0000
20.        #define  LCD_on    0x06    //打开LCD显示 偏压发生器1000 0000 0110
21.        #define  LCD_off   0x04    //关闭LCD显示(上电默认)
22.        #define  Sys_en     0x02    //系统振荡器开 1000 0000 0010
23.        #define  Ctrl_cmd  0x80    //写控制命令   1000
24.        #define  Data_cmd  0xa0    //写数据命令   1010
25.       
26.        sbit DIPIN    =P3^7;              //LCD液晶屏DI引脚
27.        sbit CLKPIN  =P3^6;             //LCD液晶屏CLK引脚
28.        sbit CSPIN    =P3^5;              //LCD液晶屏CS引脚
29.       
30.        //SMS0707B LCD Drive code
31.        //Write bit data 写位数据
32.        void SendBit_1621(unsigned char sdata,unsigned char cnt)
33.                    //sdata 的高cnt 位写入HT1621,高位在前
34.        {
35.                unsigned char i;
36.                for(i=0;i<cnt;i++)
37.                {
38.                        CLKPIN=0;         
39.                        if(sdata&0x80)
40.                                DIPIN=1;
41.                        else DIPIN=0;
42.                        CLKPIN=1;
43.                        sdata<<=1;
44.                }
45.        }
46.       
47.        /*--------------------------------------------------------------------------------------------------------
48.        Name: SendCmd(送命令)
49.        写入标志码"100"和9位comma命令,由于没有使用到更改时钟输出等命令
50.        为了编程方便直接将command 的最高位写"0"
51.        ----------------------------------------------------------------------------------------------------------*/
52.        void SendCmd_1621(unsigned char command)//写命令
53.        {                   //3位标志码 + 9位命令,共12位
54.                CSPIN=0;      //执行一个下降沿                                       
55.                SendBit_1621(0x80,4);
56.              //写入标志码"100"和9位comma命令的最高1位共4位
57.                SendBit_1621(command,8);
58.              //写入9位comma命令的后8位,组成1000 xxxx xxxx
59.                CSPIN=1;    //送数完成后置高电平
60.        }
61.       
62.        /******-------------------------------------------------------------------------
63.        Name: Write_1621(送命令和数据程序)
64.        写入标志码"101"和6位addr地址码和8位sdata显示数据。
65.        ---------------------------------------------------------------------------*******/
66.        void Write_1621(unsigned char addr,unsigned char sdata,unsigned char len)//写数据
67.        {//3位标志码 + 6位写数据命令 + 8(4)位数据,共17位
68.                addr<<=2;//高6位有效
69.                CSPIN=0; //执行一个下降沿
70.                SendBit_1621(0xa0,3);                //写入标志码"101"    写数据命令101
71.                SendBit_1621(addr,6);                //写入addr 的高6位   写数据命令xxxx xx
72.                SendBit_1621(sdata,len);        //写入8/4位 sdata数据  len=8/4
73.                CSPIN=1;//送数完成后置高电平
74.        }
75.       
76.        /**-------------------------------------------------------------------------
77.        Name: Init_1621(初始化1621)
78.        -------------------------------------------------------------------------******/
79.        void LCD_Init()                       //初始化
80.        {                             //程序输入100 0+8=9位命令
81.                SendCmd_1621(Sys_en); //Sys_en 0x02 系统振荡器开          100 0 0000 0010
82.                SendCmd_1621(RCosc);
83.                             //RCosc 0x30 内部RC振荡器(上电默认) 100 0 0011 0000
84.                SendCmd_1621(ComMode);  //4COM,1/3bias                     100 0 0101 0020
85.                SendCmd_1621(LCD_on);
86.                             //LCD_on 0x06 打开LCD显示 偏压发生器100 0 0000 0110
87.        }
88.       
89.        /*-------------------------------------------------------------------------
90.        Name: lcdwd1(点亮1621全部Seg)
91.        -------------------------------------------------------------------------*/
92.        void LCDWD1(void)
93.        {
94.                unsigned char i;
95.                unsigned char addr=9;//5位显示码寄存器起始地址0x09
96.                for(i=0;i<5;i++)
97.                {
98.                        Write_1621(addr,LCD_Buffer[i+1],8);
99.                             //addr为地址码,l_data为数据,8为8位数据
100.                        addr+=2;  //顺延2个4位地址码
101.                }
102.        }
ID:224580 发表于 2024-3-26 17:50
很高兴你能分享和详细说明1621原理,一直不懂怎么下手编程。
ID:1095925 发表于 2024-1-5 16:18

先看看,应该用的着
ID:1064915 发表于 2023-7-4 09:53
没有设计代码
ID:232791 发表于 2022-1-14 09:27
就需要在COM1-SEG1和SEG2,COM2-SEG1和SEG2, COM3-SEG1和SEG2, COM4-SEG1和SEG2,之间同时施加交流电压
SEG1-COM2、SEG1-COM3
ID:336378 发表于 2021-12-2 08:09
网上有现成的代码,移值过来就行了吧。有时不必什么都懂。有时我们是做产品,不是搞科研,当教授。
ID:845778 发表于 2021-9-10 11:39
请问楼主现在还接51内核的方案吗
ID:313760 发表于 2021-4-13 22:16
这个地址到底是怎么看的
ID:833692 发表于 2020-12-25 16:34
除了两处对应不上,讲得算是比较清楚的了
ID:483991 发表于 2020-4-3 21:17
先看看,后面应该用的着
ID:440637 发表于 2019-10-10 08:53
先顶起!应该是很好的资料
ID:282095 发表于 2019-8-14 19:01
蛮详细的 感谢分享
ID:248740 发表于 2019-8-14 17:11
1元感谢楼主,好懂,谢谢
ID:464883 发表于 2019-7-4 22:27
正在研究1621,楼主讲得简单易懂,学习了。
ID:553946 发表于 2019-6-4 15:06
不错不错!
ID:156220 发表于 2019-2-14 21:35
很好的资料,先收藏了
ID:472325 发表于 2019-2-14 17:06
先顶起!应该是很好的资料

评分

参与人数 1黑币 +10 收起 理由
春风十里吹 + 10

查看全部评分

ID:370779 发表于 2018-9-16 18:58
图6和图7之间那段话应该是COM1-SEG1和COM2-SEG1z,这样才能和图7对应起来,否则会让人产生误解
ID:370779 发表于 2018-9-16 18:40
楼主上面关于点亮第一个“8”的段码有问题 按照图片的显示应该是COM0-SEG1,COM1-SEG0和SEG1, COM2-SEG0和SEG1, COM3-SEG0和SEG1,即1A 1B 1C 1D 1E 1F 1G7个笔段。

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

Powered by 单片机教程网

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