|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 yjtj30xe 于 2020-8-10 16:03 编辑 ; M$ |/ f; i O( t* |+ U# _% V- O
) @" s6 i- Y* Y) K9 |; [# o
在网上买的这个STC8A8K64S4A12,可以直接插到开发板上,引脚兼容普通51,用这个驱动1602液晶,整了好久也没有显示出来,因为速度比普通51快,所以延时我也调整了,还是没任何显示,下面这是普通51的程序可以显示,请高手帮忙看下,能不能修改让其在STC8A8K64S4A12显示出来,非常感谢!
) ]1 f6 T: _) a( R8 {#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
7 ^* ^1 T7 j& _+ O0 s: J
( f8 F: L4 w: ~- {1 s: c* r0 k7 otypedef unsigned int u16; //对数据类型进行声明定义
. L: r G" m, h( ftypedef unsigned char u8;
: L b# \" M; s# A8 ~
" n0 W! Q/ W0 }1 N0 g @9 k I4 b#define uchar unsigned char6 E% X2 ]- d; m6 @3 p, u' l
#define uint unsigned int0 Q' \( z: Y9 b2 U$ n) N
a7 d2 E: V4 }) t* m9 s
#define LCD1602_DATAPINS P00 y: L+ G" O8 ^8 K/ }* O) P& r! o
8 B! v& l6 P/ k. C3 o) A$ Bsbit LCD1602_E=P2^7;" Q" L$ I1 N2 s+ J- z" S
sbit LCD1602_RW=P2^5;
9 V! m) Q X ksbit LCD1602_RS=P2^6;
- z9 X+ q$ G1 S1 Y9 \) J9 T, ^ U/ J* v. `8 g1 m
9 `/ u: ~4 t: ~3 ~- o3 q" S
u8 Disp[]=" Pechin Science ";
& t: Z2 T X' Y6 t8 @; S. @% o8 H$ G) W7 `5 k6 i) f/ q `
/*******************************************************************************9 ^8 G0 R9 W8 o& H. g
* 函 数 名 : Lcd1602_Delay1ms
2 j, u$ q* E0 }4 g3 ^& N" y* 函数功能 : 延时函数,延时1ms
. `, f: k3 c+ @" @7 {: M0 F* 输 入 : c$ K' D7 X" j8 d( w5 ^, r
* 输 出 : 无
# W! k8 H+ }3 n/ i& l. {. E* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。' `) n/ i A2 o9 f# s3 i3 S6 g
*******************************************************************************/
" _* v0 a1 Q8 k' E+ I+ ~2 K3 @$ x7 E( I' |6 ^$ s! t
void Lcd1602_Delay1ms(uint c) //误差 0us* t, G# N2 L3 d* o! r! Y' T
{
8 v. n* X) J7 {9 T P" b uchar a,b;) W8 W( B0 T4 F+ p
for (; c>0; c--)# v: i3 @# r) ^- h8 A8 e
{
3 _ D8 `: G6 r, `: B* F& I for (b=199;b>0;b--)$ B8 Z" w: I" z% W9 c j
{
* i6 j+ j M% S# Y |" q- b for(a=1;a>0;a--);0 ^* J1 Y, E. |* b. q
} / X0 F$ H7 f3 Q
}$ `1 I& W- P* k" V1 i5 w2 U
% b0 h J$ U3 t3 K}
+ K1 f: \* a2 Y n$ X5 u! s- v+ `. g4 z* j- X! e9 G% X8 E- g' J: ?6 u, p* F
void LcdWriteCom(uchar com) //写入命令5 h3 g5 [% M4 j! V
{: o' V( O' b5 V# J' n& [
LCD1602_E = 0; //使能
5 U/ K% u9 O* Q* K$ | LCD1602_RS = 0; //选择发送命令) Q8 u u4 a; \+ W, r0 c
LCD1602_RW = 0; //选择写入! T4 I* l1 \& V' i
$ u9 I7 H; B, @# c# z2 S" U- } LCD1602_DATAPINS = com; //放入命令
% S, ?* b$ v( f! V8 k% L- | Lcd1602_Delay1ms(1); //等待数据稳定: d$ O- J* U- a0 ~2 V7 c2 V
) U6 Y9 N' O N. O
LCD1602_E = 1; //写入时序) {1 C1 V) Z( H+ H$ C
Lcd1602_Delay1ms(5); //保持时间/ x9 E I% |3 j4 b: V
LCD1602_E = 0;1 E- U( K! z! E( B3 O+ j
}* k; v) F% H* {. z" B
/ b; D1 f/ s9 d1 A# r/ k1 Y
/*******************************************************************************# J% Y" u. K0 ~( x6 r# I
* 函 数 名 : LcdWriteData- |) C- H7 x5 r. F) O, R
* 函数功能 : 向LCD写入一个字节的数据
7 C7 G% W/ B' a7 |- g& `% l* 输 入 : dat& @! ?% b- g7 ~. o
* 输 出 : 无8 D/ E. C' i* @, p7 Y
*******************************************************************************/
! V/ k5 X5 W# d$ F% X
$ o9 k- i2 X% y( h3 n! y8 Rvoid LcdWriteData(uchar dat) //写入数据
. `+ }; ?5 t: s' x( j, z# u{$ O4 Q3 e8 Q2 m% E9 h& I
LCD1602_E = 0; //使能清零) F v# e: l" e, g7 E6 [# P
LCD1602_RS = 1; //选择输入数据
Z8 u2 Q: J6 ^/ a# ^* A LCD1602_RW = 0; //选择写入5 ]- W3 _, J$ |0 ]
# k2 g. u+ \" S9 X+ M
LCD1602_DATAPINS = dat; //写入数据 g( g6 {/ D' s# i
Lcd1602_Delay1ms(1);
& o7 e4 K/ L# ~; F @
! \) \8 B5 m7 f$ }# F: O: Q" X. P LCD1602_E = 1; //写入时序0 L0 Y1 G( d& [ X1 V `% I
Lcd1602_Delay1ms(5); //保持时间
$ [ h, F2 p3 S, v4 n0 m/ H LCD1602_E = 0;# ? C" @8 e; |# \% _0 y8 U$ W' c
}
/ K; I) ?, H/ r4 c& k. U1 L4 @6 \7 t# u/ z i$ Q. j% c
7 Z$ E0 }7 A4 [
void LcdInit() //LCD初始化子程序4 _5 z6 B% @8 e+ D
{, D1 Z5 T. I* y& i* N" U+ K# f; L
LcdWriteCom(0x38); //开显示: @' g3 T# T, U; l. Q. F
LcdWriteCom(0x0c); //开显示不显示光标7 T& n' T8 S- J6 R3 K5 I
LcdWriteCom(0x06); //写一个指针加1
$ K! Y5 r: M8 y9 k8 `2 m LcdWriteCom(0x01); //清屏4 s) `) L9 m, D- O. f/ o
LcdWriteCom(0x80); //设置数据指针起点
5 q# B0 }! A6 R! b& d8 U}6 e" \& x' T' O, q8 x4 D
8 ?* ?1 Q! d; ]void main(void)) y, V& L# @) j* m' y0 H( l
{
' C& M5 A/ ~& _& C: |& t u8 i;* v1 _- X o/ b6 |. ^
LcdInit();' I0 E8 E z2 A0 N( O& C
for(i=0;i<16;i++)
# `1 s- g6 q7 {$ B4 }# o7 A {, X, r* B* \" K: D7 g
LcdWriteData(Disp);
9 @5 V! w( h r: x }
# W0 [ [/ H: o/ N+ K# S/ y0 s' M t while(1); ( N6 G1 I' C, u3 {
}
& v+ W- }) @" g9 Y0 L0 E" y: }
|
|