|
[STM32F401-DISCO开发板]实验一、STM32F401 DISCO开发板介绍,点亮LED9 [% _, W6 z/ ^" c# \ [STM32F401-DISCO开发板]实验三、2路ADC采样+2路PWM输出实验 # v/ P$ ~ Z: k" u1 y6 e6 c8 @) R 这款显示器是黑白的,横向65点阵纵向102点阵,采用8X6点阵非标ASCII码,一行可以显示17个英文X8行,基本够用了。( p. \; T4 b* p1 j/ J" U( B) g 首先在项目目录中创建一个incs文件夹,将6903.h文档拷贝进去;而后在IAR项目中创建1个文件夹,命名为incs,并且将incs文件夹中的6903.h加进去。: v, [( j4 I- e9 r) t, j 6903.h代码如下:& q% {/ I+ W% P. d1 B9 [+ v DigitalOut sdat(PE_15); DigitalOut sclk(PE_13);6 ]% ?1 G7 F9 l9 y5 O$ b0 F) A- q DigitalOut sreg(PE_11); DigitalOut sres(PE_9); extern int k;* n% m. m; Y; u" P+ s //6903 102X65LCD7 k0 W2 n& ?" |0 O, O8 l* |4 b5 C const unsigned char asc2[][6]={//8x6 Dots 32-126[0-94] {0x00,0x3E,0x45,0x49,0x51,0x3E},//0 U% q, P* { ^% u" i {0x00,0x00,0x21,0x7F,0x01,0x00},//1 {0x00,0x31,0x43,0x45,0x49,0x31},//2; f. T9 j1 L! ]( w+ u' W {0x00,0x22,0x49,0x49,0x49,0x36},//3% g5 J1 A; i1 T5 w& w& f: z {0x00,0x04,0x0C,0x14,0x7F,0x04},//4 {0x00,0x72,0x51,0x51,0x51,0x4E},//5-5- D# e) \" d5 f/ s% v% i! S {0x00,0x3E,0x49,0x49,0x49,0x06},//6 {0x00,0x40,0x43,0x4C,0x50,0x60},//7 {0x00,0x36,0x49,0x49,0x49,0x36},//8 {0x00,0x30,0x48,0x48,0x48,0x3F},//90 @: T! s) ]* y- @* [+ B {0x00,0x1F,0x24,0x64,0x24,0x1F},//A-10. a- j2 C1 Y ?# K3 F! R' T {0x00,0x41,0x7F,0x49,0x49,0x36},//B( t' p" X4 [) i+ X5 T1 s& ] {0x00,0x3E,0x41,0x41,0x41,0x22},//C: v7 l$ O) n& l4 Z0 R7 x {0x00,0x41,0x7F,0x41,0x41,0x3E},//D* P% m: j7 g- A {0x00,0x41,0x7F,0x49,0x49,0x63},//E" c* @) }' r& F8 Y; G {0x00,0x41,0x7F,0x49,0x5C,0x60},//F-15 {0x00,0x3E,0x41,0x45,0x47,0x24},//G' e, @, q/ n. u3 H7 \6 } {0x41,0x7F,0x08,0x08,0x08,0x7F},//H {0x00,0x00,0x41,0x7F,0x41,0x00},//I {0x00,0x42,0x41,0x7F,0x40,0x40},//J6 Q R- a. q6 K; |2 c {0x00,0x41,0x7F,0x59,0x24,0x43},//K-204 \/ r6 v/ ~, D# D/ I& k {0x00,0x40,0x7F,0x41,0x01,0x03},//L9 v8 l$ r0 @" r0 K- Y, b9 j% k {0x00,0x7F,0x20,0x1E,0x20,0x7F},//M. r. k" J3 Q$ K/ `0 ] {0x00,0x7F,0x30,0x18,0x06,0x7F},//N {0x00,0x3E,0x41,0x41,0x41,0x3E},//O {0x00,0x41,0x7F,0x49,0x48,0x30},//P-25 {0x00,0x3E,0x41,0x47,0x42,0x3D},//Q {0x00,0x41,0x7F,0x49,0x4C,0x33},//R, D% r+ W% D0 j+ J% r {0x00,0x32,0x49,0x49,0x49,0x26},//S {0x00,0x60,0x41,0x7F,0x41,0x60},//T {0x00,0x7E,0x01,0x01,0x01,0x7E},//U-306 H, K- n* }; R$ ]* u; C: H! V {0x00,0x7C,0x02,0x01,0x02,0x7C},//V; Q O4 o" ` h; d {0x00,0x7C,0x03,0x3C,0x03,0x7C},//W$ \- X. s- y9 o( y {0x00,0x43,0x24,0x18,0x24,0x43},//X {0x00,0x60,0x18,0x07,0x18,0x60},//Y2 t# H, g6 h, U( a! u {0x00,0x63,0x45,0x49,0x51,0x63},//Z-35 ^7 \( s$ O" \$ {# y! v+ s3 B {0x00,0x00,0x00,0x01,0x00,0x00},//. {0x00,0x14,0x14,0x14,0x14,0x14},//=( f- E4 x2 b7 B r5 B8 z {0x00,0x08,0x08,0x3E,0x08,0x08},//+ {0x00,0x08,0x08,0x08,0x08,0x08},//-2 ?( u0 R' {8 l {0x00,0x00,0x00,0x24,0x00,0x00},//:-40: u2 F* c+ z2 M+ k3 G2 U9 J }; //Write Plus! x$ z {9 K3 o* O; ^8 }( S- p6 V void wri(void){sclk=0;sclk=1;}+ }7 n8 w: @) B* o4 P: } //Write a byte to lcd dt=data,com=reg/data* Y1 K1 {9 f0 j2 l) Y0 v* B void b2l(unsigned char dt,unsigned char com){& l& n) s) c% \! V/ p unsigned char i;" T: g% U8 N* R6 |1 v if(com)sreg=1;else sreg=0; for(i=0;i<8;i++){6 p0 g% Y- q4 S; x5 _0 W if(dt&0x80){sdat=1;}else{sdat=0;}; dt=dt<<1; wri();8 C& h/ S+ w4 O4 ]0 |- O } }' z7 h e, E8 d7 T //Set lcd display X,Y void setXY(unsigned char X,unsigned char Y){ b2l(0x40 | Y,0);//column6 J$ P1 [( G+ X* z) m b2l(0x80 | X,0);//row }; {6 S) v- s" S" M //lcd Clear. `! K) T% _2 V void lcdClear(void){5 ~4 x' i4 x9 z8 y0 V9 ^0 ]1 ]% e unsigned char t,k;9 u( _8 g0 S( h! o7 p$ n setXY(0,0);/ w6 S: K, G( P; u4 U- v for(t=0;t<9;t++){for(k=0;k<102;k++){b2l(0x00,1);}} L$ @) q4 E4 g9 f }$ w3 l# S0 T, u% v T5 k //display a ASCII code/ X. @) s7 S& D+ M void c2l(unsigned char x,unsigned char y,unsigned char c){# N+ R S. D1 b# Z unsigned char line; setXY(x*6,y); 3 s& ^2 j# K" Y0 l) Z0 b* ^ for (line=0;line<6;line++) b2l(asc2[c][line],1);: b3 q- o4 j& Z% g }' R0 i) V: {( s9 C* { //LCD6903 Initial 102x647 e% @( D; {# W7 X% P void lcdInit(void){ wait(0.20);4 t% k( `- g0 z7 x: A1 @7 o, F | sres=0;4 b6 i* p9 o v0 o, ? wait(0.20); sres=1;+ y0 _+ q5 b6 m* ^ wait(0.20); - ?" |& P2 n$ U. A b2l(0x25,0);//00100 PD=1dcOn|=0Dcoff V=0Up|=1Left H==1 wait(0.005); b2l(0x14,0);//Plus width L000~111=1/6-1/7-1/8-1/9//14=1/7 wait(0.005); b2l(0xB4,0);//SET VOP~8.96V wait(0.005); b2l(0x20,0);//PD=0,H=0,V=0 b2l(0x0C,0);//Set off8 |) P, b# D3 K( s& i: G/ }/ }% N wait(0.005);0 _5 L! H; d. Q( b+ v! y# ~5 N }) Z/ h' R+ ?' A4 M //Display ASCII Test) _# ]5 a7 q, W0 j! H0 V, y void dispAsc(void){( p0 T# O9 i9 E int i,j; for(i=0;i<8;i++){ for(j=0;j<17;j++){9 Y+ J9 K2 l4 x: ^+ f' k c2l(j,i,k); if(k>39){k=0;}else{k++;} }) N5 @& Y% @1 r" G4 K# M# { }/ ?' `+ {9 r3 b Q ~7 l } //END Files// L5 y1 M( k1 F1 f9 } main.cpp的前边加上: #include "6903.h"0 [- w1 J# f8 B' M/ Q, U* I 接着加上:3 ]8 E, m7 p5 `) }/ @ Serial lptOut(USBTX, USBRX);//由PinNames.h定义的串口:PA_2,PA_3) A3 O) r M1 p/ K DigitalOut myled(PD_12);//定义PD_12绿的的LED: p+ h& K4 G' o0 U" u' _: E0 L 接着定义一个公共变量: int k=0; main主函数如下: int main(){ lcdInit();/ b' S$ _" }9 D; w' g) v1 [7 o; a' m lcdClear(); `* G9 a+ k/ w, ?. Y! s! r/ m lptOut.printf("LCD6903 Test !\n\r"); while(1){ dispAsc();7 C4 r& x8 ] ?4 ~+ U myled = !myled; lptOut.printf("LCD6903 Test ! \n\r");1 }( i. t! s& k$ }3 W6 \ wait(0.5f); lcdClear();: A v2 x3 a6 u+ O& S } }" @3 s) S1 ~- U" V 串口速率设置在mbed_config.h文件中。 编译下载后程序运行为:在PA_2——串口RX,PA_3——串口TX,输出“LCD6903 Text !”。照片21为LCD6903以及虚拟串口硬件连接,照片22是LCD6903 轮显刷屏ASCII码,截图23是串口输出的显示数据。 |
21
22
23
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
SPI 高温读错最后一位?STM32F42xx 官方根治方案
微信公众号
手机版
谢谢