找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5417|回复: 10
收起左侧

使用STC8A8K64S4A12单片机遇到的问题,请大家帮助!

[复制链接]
ID:388477 发表于 2020-8-5 21:34 | 显示全部楼层 |阅读模式
本帖最后由 zhang1314hong 于 2020-8-5 22:14 编辑

在网上买的这个STC8A8K64S4A12,可以直接插到开发板上,引脚兼容普通51,用这个驱动1602液晶,整了好久也没有显示出来,因为速度比普通51快,所以延时我也调整了,还是没任何显示,下面这是普通51的程序可以显示,请高手帮忙看下,能不能修改让其在STC8A8K64S4A12显示出来,非常感谢!
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;

#define uchar unsigned char
#define uint unsigned int

#define LCD1602_DATAPINS P0

sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;


u8 Disp[]=" Pechin Science ";

/*******************************************************************************
* 函 数 名         : Lcd1602_Delay1ms
* 函数功能                   : 延时函数,延时1ms
* 输    入         : c
* 输    出         : 无
* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/

void Lcd1602_Delay1ms(uint c)   //误差 0us
{
    uchar a,b;
        for (; c>0; c--)
        {
                 for (b=199;b>0;b--)
                 {
                          for(a=1;a>0;a--);
                 }      
        }
            
}

void LcdWriteCom(uchar com)          //写入命令
{
        LCD1602_E = 0;     //使能
        LCD1602_RS = 0;           //选择发送命令
        LCD1602_RW = 0;           //选择写入
        
        LCD1602_DATAPINS = com;     //放入命令
        Lcd1602_Delay1ms(1);                //等待数据稳定

        LCD1602_E = 1;                  //写入时序
        Lcd1602_Delay1ms(5);          //保持时间
        LCD1602_E = 0;
}

/*******************************************************************************
* 函 数 名         : LcdWriteData
* 函数功能                   : 向LCD写入一个字节的数据
* 输    入         : dat
* 输    出         : 无
*******************************************************************************/                  

void LcdWriteData(uchar dat)                        //写入数据
{
        LCD1602_E = 0;        //使能清零
        LCD1602_RS = 1;        //选择输入数据
        LCD1602_RW = 0;        //选择写入

        LCD1602_DATAPINS = dat; //写入数据
        Lcd1602_Delay1ms(1);

        LCD1602_E = 1;   //写入时序
        Lcd1602_Delay1ms(5);   //保持时间
        LCD1602_E = 0;
}


void LcdInit()                                                  //LCD初始化子程序
{
        LcdWriteCom(0x38);  //开显示
        LcdWriteCom(0x0c);  //开显示不显示光标
        LcdWriteCom(0x06);  //写一个指针加1
        LcdWriteCom(0x01);  //清屏
        LcdWriteCom(0x80);  //设置数据指针起点
}

void main(void)
{
        u8 i;
        LcdInit();
        for(i=0;i<16;i++)
        {
                LcdWriteData(Disp);        
        }
        while(1);                                
}



c0e14f4fa09d5fcf668b645fb50f2d5.jpg
1.PNG
回复

使用道具 举报

ID:155507 发表于 2020-8-6 06:04 | 显示全部楼层
给你改了一下试试。

/*******************************************************************************
* 函 数 名         : Lcd1602_Delay1ms
* 函数功能                   : 延时函数,延时1ms
* 输    入         : c
* 输    出         : 无
* 说    名         : 该函数是在12MHZ晶振下,12分频单片机的延时。
*******************************************************************************/

void Lcd1602_Delay1ms(uint c)   //误差 0us
{
    uchar a,b;
        for (; c>0; c--)
        {
                 for (b=16;b>0;b--)
                 {
                          for(a=147;a>0;a--);
                 }      
        }
            
}
回复

使用道具 举报

ID:213173 发表于 2020-8-6 07:41 | 显示全部楼层
STC8A8K64S4A12是1T单片机,速度比STC89C52许多,延时函数要根据时钟频率修改数据。

/**1ms延时程序(11.0592MHz 1T)****/
void Lcd1602_Delay1ms(uint k)
{
        uint i,j;
        for(i=k;i>0;i--)
                for(j=1150;j>0;j--);
}
回复

使用道具 举报

ID:388477 发表于 2020-8-6 08:07 | 显示全部楼层
angmall 发表于 2020-8-6 06:04
给你改了一下试试。

/***************************************************************************** ...

谢谢,我试了一下,还是没有显示,我想是不是小板有问题
回复

使用道具 举报

ID:388477 发表于 2020-8-6 08:08 | 显示全部楼层
wulin 发表于 2020-8-6 07:41
STC8A8K64S4A12是1T单片机,速度比STC89C52许多,延时函数要根据时钟频率修改数据。

/**1ms延时程序(11. ...

谢谢!
回复

使用道具 举报

ID:388477 发表于 2020-8-6 08:52 | 显示全部楼层
问题解决了,是小板的问题,我把P0口和P2口测试了一下,发现P2^7无法输出高电平,所以我改变了引脚,因为两个开发板都是P2^7,没办法,用面包板改为P2^4,就ok了

回复

使用道具 举报

ID:804115 发表于 2020-8-6 08:54 来自手机 | 显示全部楼层
你确定板子跑起来程序了吗?调通串口打印数据试试,或者控制一个io口翻转试试?弄好了最小系统再调LCD
回复

使用道具 举报

ID:146782 发表于 2020-8-6 09:04 | 显示全部楼层
先确认一下板子有没有问题。
回复

使用道具 举报

ID:388477 发表于 2020-8-6 09:07 | 显示全部楼层
aayon1979 发表于 2020-8-6 09:04
先确认一下板子有没有问题。

板子问题,P2^7引脚没焊接好,谢谢
回复

使用道具 举报

ID:388477 发表于 2020-8-6 09:07 | 显示全部楼层
1692483014 发表于 2020-8-6 08:54
你确定板子跑起来程序了吗?调通串口打印数据试试,或者控制一个io口翻转试试?弄好了最小系统再调LCD

嗯嗯,搞定了
回复

使用道具 举报

ID:382454 发表于 2020-8-6 11:49 | 显示全部楼层
这个只能全部重写了,包括延时。延时用用官方的精确延时来算最好。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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