找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 739|回复: 12
打印 上一主题 下一主题
收起左侧

STC15F2K60S2单片机的例程如何获取呢?

[复制链接]
跳转到指定楼层
楼主
闫新净 发表于 2020-8-11 18:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求助!!!谁有LCD1602在STC15F2K60S2单片机上运行的程序 ?我调试两天了没调试出来 ,不知道 什么原因,希望学习一下成功的样例程序。 一定要在STC15F2K60S2单片机上能运行的; 一定要在STC15F2K60S2单片机上能运行的;
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
wulin 发表于 2020-8-11 20:21 | 只看该作者
你的程序只要能在51单片机运行就能在STC15F2K60S2单片机运行,只要把延时函数修改一下满足LCD1602时序要求即可。
回复

使用道具 举报

板凳
bbxyliyang 发表于 2020-8-11 20:38 | 只看该作者
13. 1602显示屏测试 (12MHz).rar (69.36 KB, 下载次数: 17)
回复

使用道具 举报

地板
man1234567 发表于 2020-8-12 07:03 | 只看该作者
1602对单片机没要求的,只要程序对就可以,最多调一下延时或删除延时语句。
回复

使用道具 举报

5#
梁廷明 发表于 2020-8-12 08:36 | 只看该作者
调整一下延时函数,增加数值
回复

使用道具 举报

6#
 楼主| 闫新净 发表于 2020-8-12 09:23 | 只看该作者

把程序改了下端口,下载进去 还是不显示,是为什么
回复

使用道具 举报

7#
 楼主| 闫新净 发表于 2020-8-12 09:25 | 只看该作者
wulin 发表于 2020-8-11 20:21
你的程序只要能在51单片机运行就能在STC15F2K60S2单片机运行,只要把延时函数修改一下满足LCD1602时序要求 ...

就是直接把51上 的程序拿过来改了一下,增加了延时,怎么改就是不行;快没脾气了
回复

使用道具 举报

8#
 楼主| 闫新净 发表于 2020-8-12 09:26 | 只看该作者
man1234567 发表于 2020-8-12 07:03
1602对单片机没要求的,只要程序对就可以,最多调一下延时或删除延时语句。

在哪个地方加延时?延时多少?我调了无数遍 了,快没脾气了
回复

使用道具 举报

9#
csmyldl 发表于 2020-8-12 11:59 | 只看该作者
/********************************************************************************
*  描述:                LCD1602 滚动显示                                       *
* 显示方式:                                                                   *
* 1、从左到右逐字显示,闪动二次,清屏。                                        *
* 2、再从右到左逐字显示,闪动二次,清屏。                                      *
* 3、周期性地重复上述显示方式。                                                *                           
********************************************************************************/
#include "common.h"
//选择单片机
#if MCU_F
  #include <stc15f2k60s2.h>       //STC15单片机
#else
  #include <STC89C5xRC.H>         //STC89C52单片机
#endif

#include "delay.h"

#define LCDdata P0   //数据输出端口

sbit LCD_RS = P2^5;  //寄存器选择(RS=0,命令寄存器;RS=1,数据寄存器)            
sbit LCD_RW = P2^6;         //读写端(RW=1,读;RW=0,写)
sbit LCD_EP = P2^7;         //使能端

#if LCD1602_F
u8 idata dis1[] ="   WELCOME  TO  ";         //显示内容
u8 idata dis2[] ="CHANGSHAMINZHENG";
#endif

/****************查忙函数************************/               
bit lcd_bz()
        {                        
bit result;
        LCD_RS = 0;
        LCD_RW = 1;
        LCD_EP = 1;
        result = (bit)(LCDdata & 0x80);         //检测数据端口最高位是否为1
        LCD_EP = 0;
        return result;//返回查忙结果
        }

/****************写命令函数************************/       
        void lcd_wcmd(u8 cmd)
        {                          // 写入指令数据到LCD
        while(lcd_bz());
        LCD_RS = 0;
        LCD_RW = 0;
        LCD_EP = 0;
        LCDdata = cmd;             //将8位指令通过P0口传给1602
        LCD_EP = 1;                //用于产生一个脉冲宽度
        LCD_EP = 0;  
        }
       
        void lcd_pos(u8 pos)
        {                          //设定显示位置
        lcd_wcmd(pos | 0x80);
        }

/****************写数据函数************************/       
        void lcd_wdat(u8 dat)
        {                   //写入字符显示数据到LCD
        while(lcd_bz());
        LCD_RS = 1;
        LCD_RW = 0;
        LCD_EP = 0;
        LCDdata = dat;  //将8位数据通过P0口传给1602
        LCD_EP = 1;     //用于产生一个脉冲宽度
        LCD_EP = 0;
        }
       
        void lcd_init()
        {                   //LCD初始化设定
        lcd_wcmd(0x38);     //16*2显示,5*7点阵,8位数据
        delay_ms(10);
        lcd_wcmd(0x0c);     //显示开,关光标
        delay_ms(10);
        lcd_wcmd(0x06);     //移动光标
        delay_ms(10);
        lcd_wcmd(0x01);     //清除LCD的显示内容
        delay_ms(10);
        }

//液晶显示
#if LCD1602_F
void LCD1602disp()
{
  u8 i;

         lcd_wcmd(0x06);             //向右移动光标
         lcd_pos(0);                 //设置显示位置为第一行的第1个字符
         i = 0;
         while(dis1[ i ] != '\0')    //显示字符"WLCOME  TO"
          {  
            lcd_wdat(dis1[ i ]);
            i++;
            delay_ms(500);            //控制两字之间显示速度
          }
          lcd_pos(0x40);             //设置显示位置为第二行第1个字符
          i = 0;
          while(dis2[ i ] != '\0')   //显示字符"CHANGSHAMINZHENG"
           {
            lcd_wdat(dis2[ i ]);
            i++;
            delay_ms(500);            //控制两字之间显示速度
           }
          delay_ms(5000);             //控制停留时间
       
          lcd_wcmd(0x01);            //清除LCD的显示内容
          delay_ms(1);
          lcd_wcmd(0x04);            //向左移动光标
             
          lcd_pos(15);               //设置显示位置为第一行的第16个字符
          i = 0;
          while(dis1[ i ] != '\0')
          {                          //显示字符"WLCOME  TO"
           lcd_wdat(dis1[ i ]);
           i++;
           delay_ms(500);             //控制两字之间显示速度
          }
         lcd_pos(0x4F);              //设置显示位置为第二行的第16个字符
         i = 0;
         while(dis2[ i ] != '\0')
          {
           lcd_wdat(dis2[ i ]);      //显示字符" HUANGHUAI  "
           i++;
           delay_ms(500);             //控制两字之间显示速度
          }
         delay_ms(5000);              //控制停留时间
       
         lcd_wcmd(0x01);             //清除LCD的显示内容
         delay_ms(5000);              //控制两屏转换时间
                  
        }       
       
#endif

延时程序用下面提供的
void delay500ms(void)
{
  u8 i,j,k;
  for(i=254;i>0;i--)
    for(j=32;j>0;j--)
    for(k=183;k>0;k--);
}

void delay200ms(void)
{
u8 i,j,k;
for(i=10;i>0;i--)
  for(j=239;j>0;j--)
   for(k=250;k>0;k--);
}

void delay100ms(void)
{
u8 i,j,k;
for(i=246;i>0;i--)
  for(j=12;j>0;j--)
   for(k=100;k>0;k--);
}


void delay10ms(void)
{
u8 i,j,k;
  for(i=30;i>0;i--)
   for(j=80;j>0;j--)
    for(k=10;k>0;k--);
}

void delay2ms(void)       
{
u8 i,j,k;
  for(i=1;i>0;i--)
   for(j=36;j>0;j--)
    for(k=152;k>0;k--);
}

void delay_ms(u8 t)       
{
u8 i,j,k;
  for(i=t;i>0;i--)
   for(j=80;j>0;j--)
    for(k=33;k>0;k--);
}

         
void delay500us(void)
{
u8 i,j,k;
  for(i=1;i>0;i--)
   for(j=52;j>0;j--)
    for(k=25;k>0;k--);
}       
       
void delay30us(void)
{
u8 i,j,k;
  for(i=1;i>0;i--)
   for(j=1;j>0;j--)
    for(k=77;k>0;k--);
}       

void delay_us(u8 t)
{
u8 i,j;
  for(i=t;i>0;i--)
    for(j=11;j>0;j--);
}       

void delay1s(void)
{
u8 i,j,k;
for(i=198;i>0;i--)
  for(j=100;j>0;j--)
  for(k=150;k>0;k--);
}         
         

回复

使用道具 举报

10#
bbxyliyang 发表于 2020-8-12 20:51 | 只看该作者
闫新净 发表于 2020-8-12 09:23
把程序改了下端口,下载进去 还是不显示,是为什么

那估计你硬件有问题吧?
回复

使用道具 举报

11#
天风情 发表于 2020-8-13 18:32 | 只看该作者
调背光试试看,先确认硬件没问题再调试软件
回复

使用道具 举报

12#
 楼主| 闫新净 发表于 2020-8-24 16:14 | 只看该作者
bbxyliyang 发表于 2020-8-12 20:51
那估计你硬件有问题吧?

已经查出来了,确定是硬件问题,谢谢了
回复

使用道具 举报

13#
 楼主| 闫新净 发表于 2020-8-24 16:15 | 只看该作者
天风情 发表于 2020-8-13 18:32
调背光试试看,先确认硬件没问题再调试软件

已经查出来了,是硬件问题,谢谢了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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