HL-D793G七位蓝色+PT6311驱动
作者:互联网
和之前那块一起买的。又画了这个屏幕驱动,还画了灯丝电源驱动,和以前画的stm8核心板在JLC拼板。
亚光黑颜色,不单独收钱!
切好水洗吹干!
忘记给排针加丝印,手写代之。
焊接的时候,脑子发热,以为把层搞错了,结果就掰PT6311引脚,然后反向焊接。焊接好通电电流一下子上1A,检查半天发现没反!
调PT6311程序时顺便发现上次pcb画错了grid和segment,233.当时死活想不通芯片为什么这样设计,原来是自己搞反了。
1 #include "pt6311.h" 2 #include "stdio.h" 3 #include <string.h> 4 #include <intrins.h> 5 //auth:katachi 6 //time:2017-12-30 7 //func:driver for pt6311 8 //transplant to stm8 time:2018-1-14 17: 9 //modify for 51 :2019年4月21日22:30:57 10 //auto addr sequence: 11 /* 12 OpenStrobe_PT6311(); 13 WriteByte_PT6311(CMD_ModeSetting|0x00);//8grid 20seg 14 15 OpenStrobe_PT6311(); 16 WriteByte_PT6311(CMD_DataSetting|0x00); ////autoAdd addr 17 18 OpenStrobe_PT6311(); 19 WriteByte_PT6311(CMD_AddressSetting|0x00); //start addr 0x00 20 WriteByte_PT6311(0x7e); //seg0-seg7 21 WriteByte_PT6311(0x18); //seg8-seg15 22 WriteByte_PT6311(0x2); //seg16-seg23 23 24 OpenStrobe_PT6311(); 25 WriteByte_PT6311(CMD_DisplaySetting|0x0f);//on 14/16 26 STB=1; 27 */ 28 // 29 sbit DI =P3^5; 30 sbit DO =P1^2; 31 sbit CK =P3^4; 32 sbit STB =P3^3; 33 void Delay1us() //@12.000MHz 34 { 35 _nop_(); 36 _nop_(); 37 _nop_(); 38 _nop_(); 39 } 40 void Delay1ms() //@12.000MHz 41 { 42 unsigned char i, j; 43 44 i = 12; 45 j = 169; 46 do 47 { 48 while (--j); 49 } while (--i); 50 } 51 void delay_us(u8 n){ 52 while(n--)Delay1us(); 53 } 54 void delay_ms(u32 n){ 55 while(n--)Delay1ms(); 56 } 57 const u8 ADDR[]={ 58 0x00,0x01,//digit 1 59 0x03,0x04,//digit 2 60 0x06,0x07,//digit 3 61 0x09,0x0a,//digit 4 62 0x0c,0x0d,//digit 5 63 0x0f,0x10,//digit 6 64 0x12,0x13,//digit 7 65 0x15,0x16,//digit 8 66 0x18,0x19,//digit 9 67 0x1B,0x1C,//digit 10 68 0x1E,0x1F,//digit 11 69 0x21,0x22,//digit 12 70 0x24,0x25,//digit 13 71 0x27,0x28,//digit 14 72 0x2a,0x2b};//digit 15 73 const u16 font[44]={ 74 0x187e,0xc,0x1b6,0x19e,0x1cc,0x1da,0x1fa,0x1802,0x1fe,0x1de,//0-9 75 0x1ee,0x251e,0x72,0x241e,0x1f2,0x1e2,0x17a,0x1ec,0x2412,0x1c,0x48e0,0x70,0x2a6c,0x426c,0x7e,0x1e6, 76 0x407e,0x41e6,0x31a,0x2402,0x7c,0x1860,0x546c,0x5a00,0x2a00,0x1812,//a-z 77 0x2580,0x180,0x7f80,0x1800,0x2400,0x4200,0x10,0x8000,};//+-*/|\_. 78 /* 79 //ascii code : 80 0:48 81 A:65 82 for number: 83 dspseg[i]=dspseg[i]-48; 84 for alphabet: 85 dspseg[i]=dspseg[i]-65+10; 86 */ 87 u8 dspbuf[24]; //bytes to send 88 u8 dspseg[8]; //character to dis 89 unsigned int Pow2(u8 y) 90 { 91 u16 x=1; 92 if (y) 93 { 94 while (y--) 95 x*=2; 96 } 97 else 98 x=1; 99 return x; 100 } 101 void OpenStrobe_PT6311(void) 102 { 103 STB=1; 104 delay_us(1); 105 STB=0; 106 } 107 void Init_PT6311(void) 108 { 109 u8 i; 110 111 OpenStrobe_PT6311(); 112 WriteByte_PT6311(CMD_ModeSetting|0x00);//8grid 20seg 113 114 OpenStrobe_PT6311(); 115 WriteByte_PT6311(CMD_DataSetting|0x00); ////autoAdd addr 116 117 OpenStrobe_PT6311(); 118 WriteByte_PT6311(CMD_DisplaySetting|0x8|4);//0x80:on 14/16 119 120 //all on 121 OpenStrobe_PT6311(); 122 WriteByte_PT6311(CMD_AddressSetting|0x00); 123 for (i=0;i<24;i++){ 124 WriteByte_PT6311(0xff); 125 } 126 delay_ms(1000); 127 //all clr 128 OpenStrobe_PT6311(); 129 WriteByte_PT6311(CMD_AddressSetting|0x00); 130 for (i=0;i<24;i++){ 131 WriteByte_PT6311(0); 132 } 133 delay_ms(1000); 134 //show number 135 strcpy(dspseg,"12345678"); 136 for (i=0;i<8;i++)dspseg[i]=dspseg[i]-48; 137 OpenStrobe_PT6311(); 138 WriteByte_PT6311(CMD_AddressSetting|0x00); 139 140 for (i=7;i!=0xff;i--){ 141 WriteByte_PT6311(font[dspseg[i]]);//low byte 142 WriteByte_PT6311(font[dspseg[i]]>>8);//high byte 143 WriteByte_PT6311((font[dspseg[i]]&0x8)?0x2:0x0);//replace grid4 with grid18:low byte ----,grid4--- grid4&0x8 to get the segment 144 } 145 delay_ms(1000); 146 //show aplhabet 147 strcpy(dspseg," HELLOOO"); 148 for (i=0;i<8;i++)dspseg[i]=dspseg[i]-55; 149 OpenStrobe_PT6311(); 150 WriteByte_PT6311(CMD_AddressSetting|0x00); 151 for (i=7;i!=0xff;i--){//0xff:for overflow 152 WriteByte_PT6311(font[dspseg[i]]);//low byte 153 WriteByte_PT6311(font[dspseg[i]]>>8);//high byte 154 WriteByte_PT6311((font[dspseg[i]]&0x8)?0x2:0x0);//replace grid4 with grid18:low byte ----,grid4--- grid4&0x8 to get the segment 155 } 156 } 157 void WriteByte_PT6311(u8 dat) 158 { 159 u8 i; 160 161 CK=1;//de-pulldown 162 for (i=0;i<8;i++) 163 { 164 CK=0; //>>200ns 165 DI=dat&0x01; //send a bit to pt6311's data in pin 166 dat>>=1; //lsb first 167 CK=1; 168 } 169 } 170 u8 ReadByte_PT6311(void) 171 { 172 u8 dat,i; 173 CK=1; 174 delay_us(2); 175 for (i=0;i<8;i++) 176 { 177 CK=0;//while (j++<10); 178 delay_us(1);//tplz tpzl 179 dat>>=1; //lsb first 180 if (DO) 181 dat|=0x80; //catch a bit from pt6311's data out pin 182 CK=1; 183 } 184 delay_us(1);//tclk stb 185 return dat; 186 }View Code
这个芯片亮品率低,总是有的脚不能输出,这里的grid4通到引脚了但是还是没输出。
飞线到grid18,程序里加判断然后追加赋值解决。
取模绝对不会像上次那样自己算,本来想qt写个小软件。网上一找发现不少米字屏取模软件,PT6311选共阴。然后这个屏0-8的1是a段,再写段小程序左移一位得到字库。
标签:digit,D793G,PT6311,void,HL,OpenStrobe,WriteByte,u8 来源: https://www.cnblogs.com/katachi/p/10749654.html