找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 487|回复: 21
收起左侧

STC8H8K64u设P45控制lcd A为什么预设30秒时间让lcd息屏,到达预设时间P45没有给出低...

  [复制链接]
回帖奖励 100 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:1108299 发表于 2024-3-26 22:56 | 显示全部楼层 |阅读模式
#include <TypeDef.h>
#include <delay.h>
#include <1602.h>
#include <eeprom.h>
#include <ads1110.h>
#include <stdio.h>

sbit LCD_BACKLIGHT      = P4^5;
#define LCD_ON          LCD_BACKLIGHT = 1;
#define LCD_OFF         LCD_BACKLIGHT = 0;
#define LCD_OFF_JUDGE   (LCD_BACKLIGHT == 0)
u16 power_saving_timer  = 0;//节电模式计时器

void main(void)
{
    LCD_ON;
    P0M0 = 0;       P0M1 = 0;
    P1M0 = 0;       P1M1 = 0;
    P2M0 = 0;       P2M1 = 0;
    P3M0 = 0;       P3M1 = 0;
    P4M0 = 0x20;    P4M1 = 0;
    P5M0 = 0;       P5M1 = 0;
        P37=0;

    Delay_ms(100);
    Zero_Coeff_Init();
    lcd_system_reset();
    ads_initial();
    Delay_ms(100);
    string_write(0, 0, " 20200115138 ");
    string_write(0, 1, "                ");
    Delay_ms(3500);
    string_write(0, 0, "Range:10mV      ");
    string_write(0, 1, "Volt:0.000mVDC  ");
    ads_convert();

    while (1)
    {
        Delay_ms(100);
        //熄屏省电判断
         if(++power_saving_timer > 299){//30秒熄屏
             LCD_OFF;
         }}
这是一小段,程序没有错误。在我原先设计的焊接板上能熄灭lcd。但是下载到新的STC8H8K64U的最小系统里检测,5分钟再测P45引脚,也还是高电平。没有想象中输出低电平是什么原因。


回复

使用道具 举报

ID:213173 发表于 2024-3-27 06:28 | 显示全部楼层
多了分号
#define LCD_ON          LCD_BACKLIGHT = 1;
#define LCD_OFF         LCD_BACKLIGHT = 0;
回复

使用道具 举报

ID:1109793 发表于 2024-3-27 07:20 | 显示全部楼层
计时居然用主循环的delay?
回复

使用道具 举报

ID:1109793 发表于 2024-3-27 07:28 | 显示全部楼层
wulin 发表于 2024-3-27 06:28
多了分号
#define LCD_ON          LCD_BACKLIGHT = 1;
#define LCD_OFF         LCD_BACKLIGHT = 0;

多个分号好像没有啥问题啊,看了下编译后的汇编,没有影响到输出结果。
回复

使用道具 举报

ID:236035 发表于 2024-3-27 08:08 | 显示全部楼层
多个分号没有问题。问题是power_saving_timer这个变量有没有变化。
回复

使用道具 举报

ID:1004920 发表于 2024-3-27 08:21 | 显示全部楼层
不知道你完整的while里有没有LCD显示程序,你可以把power_saving_timer这个变量放在LCD里看看有没有变化
回复

使用道具 举报

ID:65956 发表于 2024-3-27 08:35 | 显示全部楼层
5分钟?这么长时间没喂狗?单片机早就复位多少次了,一起时复位不就是初始状态吗
回复

使用道具 举报

ID:854496 发表于 2024-3-27 08:42 | 显示全部楼层
既然你都说程序没问题,那问题只能在硬件上找了
回复

使用道具 举报

ID:961114 发表于 2024-3-27 08:52 | 显示全部楼层
要吃透范例程序
回复

使用道具 举报

ID:192020 发表于 2024-3-27 09:17 | 显示全部楼层
STC-ISP烧录配置里看下看门狗开了没,频率是不是和之前的一样。keil里面的代码优化等级是不是和之前一样?
回复

使用道具 举报

ID:829223 发表于 2024-3-27 10:22 | 显示全部楼层
排查硬件
回复

使用道具 举报

ID:300155 发表于 2024-3-27 15:14 | 显示全部楼层

这是啥乱码?
回复

使用道具 举报

ID:965189 发表于 2024-3-27 19:45 | 显示全部楼层




while (1)
    {
       Delay_ms(100);
        //熄屏省电判断
         if(++power_saving_timer > 299){//30秒熄屏
            P4M0=0x20;P4M1=0x20;
             LCD_OFF;
         }}

这样试试
回复

使用道具 举报

ID:1108299 发表于 2024-3-27 23:02 | 显示全部楼层
君工创 发表于 2024-3-27 19:45
while (1)
    {
       Delay_ms(100);

不得,这和io口没多大关系吧,我前面都设置它为推挽输出工作模式了
回复

使用道具 举报

ID:1108299 发表于 2024-3-27 23:04 | 显示全部楼层

大哥,我只是个小白,你发的天书我真看不懂
回复

使用道具 举报

ID:965189 发表于 2024-3-28 09:29 | 显示全部楼层
@GS 发表于 2024-3-27 23:02
不得,这和io口没多大关系吧,我前面都设置它为推挽输出工作模式了

看来不走过弯路的人,对端口设置的认识是模糊的。
回复

使用道具 举报

ID:1034262 发表于 2024-3-28 09:49 | 显示全部楼层
首先,你要确认Delay_ms(100);是否是100ms。
回复

使用道具 举报

ID:1010435 发表于 2024-3-28 13:35 | 显示全部楼层
Delay_ms(100);
        //熄屏省电判断
         if(++power_saving_timer > 299){//30秒熄屏
             LCD_OFF;

这是300个100ms吗?
回复

使用道具 举报

ID:1108299 发表于 2024-3-28 14:07 | 显示全部楼层
coody_sz 发表于 2024-3-28 09:49
首先,你要确认Delay_ms(100);是否是100ms。

  void Delay_ms(unsigned int n)
{
  unsigned char data i, j;
   
    while(n--){
        i = 15;
        j = 90;
        do
        {
            while (--j);
        } while (--i);
    }

是啊
回复

使用道具 举报

ID:1108299 发表于 2024-3-28 14:12 | 显示全部楼层
mtt661 发表于 2024-3-28 13:35
Delay_ms(100);
        //熄屏省电判断
         if(++power_saving_timer > 299){//30秒熄屏

我的下载到我焊STC8H8K64U—40引脚的板是可以实现30s后息屏,但是下载到新买STC8H8K64U—60引脚的最小系统就一直亮。
回复

使用道具 举报

ID:993578 发表于 2024-3-29 10:50 | 显示全部楼层
首先,你要确认Delay_ms(100);是否是100ms。
回复

使用道具 举报

ID:79094 发表于 2024-3-30 21:55 | 显示全部楼层
小白 路过  是不是引脚上有别的什么负载
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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