找回密码
 立即注册
楼主: 电子DIY小家

冲哥32位8051视频教程疑问解答贴

 火.. [复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:40
  • 最近打卡:2025-05-11 10:23:56

2

主题

36

回帖

154

积分

注册会员

积分
154
发表于 2025-4-20 08:30:54 | 显示全部楼层
多看看别人的错误,能使自己进步得更快!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:149
  • 最近打卡:2025-06-29 16:17:28
已绑定手机

6

主题

121

回帖

579

积分

高级会员

积分
579
发表于 2025-5-12 23:00:06 | 显示全部楼层
这个好
学习
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:14
  • 最近打卡:2025-06-11 10:21:13
已绑定手机

0

主题

19

回帖

198

积分

注册会员

积分
198
发表于 2025-5-22 14:17:33 | 显示全部楼层
冲哥你好,请教个问题  ,AI8051 的视频   十三课的作业  ,按下矩阵键盘时 LED0亮    ,外部中断时 关闭LED0,LED0 由P00控制,P00在 按键扫描时候  又用作矩阵键盘的列   ,既要矩阵按键扫描   又要控制LED灯   键盘扫描了后好像控制不了灯了,没什么思路 ,希望指导下  给点思路,谢了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-05-29 14:59:53
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-5-29 14:59:53 | 显示全部楼层
#include <STC32G.H>
#include "DELAY.H"

#define BEEP P54//定义BEEP,将BEEP替换为P54
bit Run_start=0;//0表示关机,1表示开机
bit Run_working=0;//表示是否正在工作
unsigned int LEDnum=0;
void main()
{
        
        EAXFR=1;              //扩展寄存器(XFR)访问使能
    CKCON=0x00;        //提高访问XRAM速度
    WTST=0x00;         //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    P4M0 = 0x00; P4M1 = 0x00;
    P6M0 = 0x00; P6M1 = 0x00;
    P5M0 = 0x00; P5M1 = 0x00;
        P40=0;
        while(1)
        {
        //------------------按下P32键,进行开机启动
                if(P32==0)
                {
                        delay(20);
                        while(P32==0);
                        delay(20);
                        if(Run_start==0)        //关机状态下
                        {
                                Run_start=1;        //将模式切换为开机
                                BEEP=0;
                                delay(10);
                                BEEP=1;
                                P6=0x00;
                                delay(200);
                                P6=0xff;
                        }
                        else
                        {
                                Run_start=0;       //模式切换为关机
                                BEEP=0;
                                delay(10);
                                BEEP=1;
                                P6=0xff;
                                LEDnum=0;          //模式清0
                                Run_working=0;     //工作状态清0
                        }
                }
                //-----------------------------按下P33键,进行模式选择
                if(P33==0)     //在开机模式下才可执行下面操作
                {
                        delay(20);
                        while(P33==0);
                        delay(20);
                        if(Run_start==1)      //在开机模式下才可执行下面操作
                        {
                                if(Run_working==0)//在未启动下可调试
                                {
                                        BEEP=0;
                                        delay(10);
                                        BEEP=1;
                                        if(LEDnum>=8)
                                        {
                                                LEDnum=0;
                                        }
                                        LEDnum++;          //模式灯调节切换
                                        P6=~(0x01<<LEDnum-1);
                            }
                        }
                }
                //--------------------按下P34键,启动功能(LED灯持续闪烁且不可执行其他操作)
                if(P34==0)
                {
                        delay(20);
                        while(P34==0);
                        delay(20);
                        if(LEDnum>0)     //有选择模式下方可执行
                        {
                                BEEP=0;
                                delay(10);
                                BEEP=1;
                        }
                        Run_working=~Run_working;      //不启动与启动交替变换                                                                                                                                                                          
                }
                if(Run_working==1)
                {
                        P6=0xff;
                        delay(500);
                        P6=~(0x01<<LEDnum-1);
                        delay(500);
                }
                else
                {
                        P6=~(0x01<<LEDnum-1);
                }
    }
}

我这个在P32没按下的时候,先去按P34键,再按P32键启动程序,之后P33键就没反应。长按P33也不行,冲哥帮忙看一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-06-29 09:18:01
已绑定手机

2

主题

51

回帖

228

积分

中级会员

积分
228
发表于 2025-6-17 21:07:36 | 显示全部楼层
冲哥好,我有个ADC数模转换的问题请教一下,我是一边看冲哥的视频一边根据手册上的示例程序,虽然把ADC值读了出来,但是读出来的ADC值偏差太大,不知道是什么原因,我用的芯片是stc15F2k60s2芯片,用面包板搭建的电路,P10口通过1K电阻接到按键上,按键另一端再接到四个10K电阻串联在5V电源和地之间的电路上,在1/2电源的位置读出来的值应该是512,我的是460左右,读出来的电压是2.25V,不知道那是有问题了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-06-29 09:18:01
已绑定手机

2

主题

51

回帖

228

积分

中级会员

积分
228
发表于 2025-6-17 21:14:08 | 显示全部楼层
曹*** 发表于 2025-6-17 21:07
冲哥好,我有个ADC数模转换的问题请教一下,我是一边看冲哥的视频一边根据手册上的示例程序,虽然把ADC值读 ...

测的电源电压是4.96v,不知道是程序有问题还是电路上有问题,还请指教。感谢!感谢!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-06-29 09:18:01
已绑定手机

2

主题

51

回帖

228

积分

中级会员

积分
228
发表于 2025-6-17 21:17:22 | 显示全部楼层
曹*** 发表于 2025-6-17 21:14
测的电源电压是4.96v,不知道是程序有问题还是电路上有问题,还请指教。感谢!感谢! ...

这里把程序贴出来帮忙分析分析。

void Delay1us(unsigned char Xus)        //@11.0592MHz
{
        while(Xus--)
        {
                _nop_();
                _nop_();
                _nop_();
        }
}
/***---ADC初始化函数---***/
void ADC_Init()
{
        P1M0 = 0x00;                //设置P10,P11为高阻输入
        P1M1 = 0x03;
        P1ASF = 0xFF;                //设置P1口为AD使用
        ADC_RES = 0;
        ADC_RESL = 0;
        ADC_CONTR = ADC_POWER|ADC_SPEEDLL;//ADC_CONTR,ADC控制寄存器不可位寻址
       
        Delay1us(2);
}
/***---ADC读取函数---***/
unsigned int ADC_Read(unsigned char ch)
{
        unsigned int Adc_Value;
        ADC_CONTR = ADC_POWER|ADC_START|ADC_SPEEDLL| ch;
        Delay1us(5);
        while(!(ADC_CONTR&ADC_FLAG))
       
        Adc_Value = ADC_RES << 2 | ADC_RESL;
        ADC_CONTR &= ~ADC_FLAG;
        Delay1us(5);
        return Adc_Value;
}
/***---ADC电压转换函数---***/
unsigned int ShowResult(int num)
{
        return (num*5.0/1024)*1000;
       
}
/***---ADC温度转换函数---***/
int ADC_Temp(unsigned int adc)
{
        unsigned char i;
        float temp;
        if(adc>ADC_table[0])
                return -32768;
        else if(adc<ADC_table[190])
                return 32767;
        else
        {
                for(i=0;i<190;i++)
                {
                        if(adc==ADC_table)
                                return (i-40)*10;
                        else if(adc<ADC_table)
                        {
                       
                        }
                        else
                        {
                                i = i-1;
                                temp = ADC_table-adc;
                                temp = temp*10/(ADC_table-ADC_table[i+1]);
                                temp += (i-40)*10;
                                return temp;
                        }
                }

        }
}

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:517
  • 最近打卡:2025-06-29 09:53:03

23

主题

184

回帖

1753

积分

金牌会员

积分
1753
发表于 2025-6-18 10:43:16 | 显示全部楼层
冲哥你好,看了你的"定时器周期性调度任务"视频,想请教一下,几个LED灯闪烁函数可不可以不用状态变量State1/State2/State3?直接用端口取反?像这样:
void LED0_Blink(void)
{
//        State1 = !State1;
//        P00 = State1;
        P00=!P00;
}

void LED1_Blink(void)
{
//        State2 = !State2;
//        P01 = State2;
                P01=!P01;
}

void LED2_Blink(void)
{
//        State3 = !State3;
//        P02 = State3;
                P02=!P02;
}

从效果上看是一样的,但请教冲哥,用了状态变量与不用有什么区别呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:26
  • 最近打卡:2025-06-29 09:18:01
已绑定手机

2

主题

51

回帖

228

积分

中级会员

积分
228
发表于 2025-6-20 19:15:41 | 显示全部楼层
教学视频已经在学,老师辛苦!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-24 17:27:03
已绑定手机

0

主题

24

回帖

150

积分

注册会员

积分
150
发表于 2025-6-22 16:29:21 | 显示全部楼层
今天才看到这个好地方,加油!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-30 06:59 , Processed in 0.136999 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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