找回密码
 立即注册
楼主: tyun1990

实验箱已收到!看冲哥《STC32位8051单片机视频教程》学习记录

[复制链接]

2

主题

21

回帖

108

积分

注册会员

积分
108
发表于 2023-10-27 21:36:16 | 显示全部楼层
学习打卡 第17课 第3部分
出问题了,第0个ADC值不对,程序也跟老师的一样。不解???求助
截图202310272130221840.jpg


截图202310272131557606.jpg

↓ADC.C文件

#include "ADC.H"
#include "INTRINS.H"

void ADC_Init()
{
        P1M0 = 0x00; P1M1 = 0x01; //设置P10为高阻输入
       
        ADCTIM = 0X3F;//时序寄存器,ADCTIM.6.5=0 1  ,ADCTIM.4.3.2.1.0=11111 =选择32个时钟(最慢)
        ADCCFG = 0X2F;//配置寄存器,ADCCFG.5(RESFMT)=1 使用12位右对齐模式;ADCCFG.3.2.1.0=1111,速度越慢转换越稳定
        ADC_POWER = 1;//打开adc电源
}


u16 ADC_Read(u8 no)
{
        u16 adcval;//保存转换成功的ADC值
        ADC_CONTR &= 0xf0;//清空通道
        ADC_CONTR |= no;//选择通道
        ADC_START = 1;//开启ADC转化
        _nop_();
        _nop_();
        while(!ADC_FLAG);//ADC_FLAG是结束转换标志位
        ADC_FLAG = 0;
        adcval = (ADC_RES << 8)+ADC_RES;//高八位加上第八位的值
        return adcval;
}


↓ADC.H文件

#ifndef __ADC_H
#define __ADC_H

#include "COMM/stc.h"                //调用头文件
#include "COMM/usb.h"
//------------------------------变量声明------------------------------

//------------------------------函数声明------------------------------

void ADC_Init();
u16 ADC_Read(u8 no);
#endif


截图202310272133497216.jpg



回复 支持 反对

使用道具 举报 送花

2

主题

21

回帖

108

积分

注册会员

积分
108
发表于 2023-10-29 09:42:17 | 显示全部楼层
第17课打卡

综述:前面发送2个回帖都为由经过实际实验,这一次是经过实验回复了。之前抄程序的时候不仔细,抄错了一个代码导致按键值错误。现在改正回帖
截图202310290940554749.jpg





  1. #include <STC32G.H>
  2. #include <intrins.h>
  3. #include"sys_init.h"
  4. #include"LED_display.h"
  5. unsigned char cnt1ms=0;
  6. unsigned int ad_volume=0;
  7. #define ADC_OFFSET 64
  8. unsigned char KeyCode=0;
  9. void CalculateAdcKey(unsigned int adc);
  10. unsigned int Get_ADC12BitResult(unsigned char channel);
  11. void Timer0Init(void)
  12. {
  13.         AUXR |= 0X7F;
  14.         TMOD &= 0XF0;
  15.         TL0=0X30;
  16.         TH0=0XF8;
  17.         TF0=0;
  18.         TR0=1;
  19. }
  20. void main()
  21. {
  22.         unsigned int j;
  23.         sys_init();
  24.         ADCCFG=ADCCFG | 0X20;
  25.         ADC_POWER = 1;
  26.         P1M1=P1M1 | 0X01;
  27.         Timer0Init();
  28.         ET0 = 1;
  29.         TR0 = 1;
  30.         EA = 1;
  31.         while(1)
  32.         {
  33.                 Dis_buf[4] = ad_volume /1000%10;
  34.                 Dis_buf[5] = ad_volume /100%10;
  35.                 Dis_buf[6] = ad_volume /10%10;
  36.                 Dis_buf[7] = ad_volume %10;
  37.                 Dis_buf[0] = KeyCode /10;
  38.                 Dis_buf[1] = KeyCode %10;
  39.                 LED_display();
  40.                 if(cnt1ms>=10)
  41.                 {
  42.                         cnt1ms=0;
  43.                         j = Get_ADC12BitResult(0);
  44.                         if(((256-ADC_OFFSET)<j) && (j<4096))
  45.                         {
  46.                                 LED_display();
  47.                                 LED_display();
  48.                                 j = Get_ADC12BitResult(0);
  49.                                 if(((256-ADC_OFFSET)<j) && (j<4096))
  50.                                 {
  51.                                         ad_volume = j;
  52.                                         CalculateAdcKey(j);
  53.                                         Dis_buf[4] = ad_volume /1000%10;
  54.                                         Dis_buf[5] = ad_volume /100%10;
  55.                                         Dis_buf[6] = ad_volume /10%10;
  56.                                         Dis_buf[7] = ad_volume %10;
  57.                                         Dis_buf[0] = KeyCode /10;
  58.                                         Dis_buf[1] = KeyCode %10;
  59. L1:                                        j = Get_ADC12BitResult(0);
  60.                                         while(((256-ADC_OFFSET)<j) && (j<4096))
  61.                                         {
  62.                                                 LED_display();
  63.                                                 goto L1;
  64.                                         }
  65.                                 }
  66.                         }
  67.                 }
  68.         }
  69. }
  70. unsigned int Get_ADC12BitResult(unsigned char channel)
  71. {
  72.         ADC_RES = 0;
  73.         ADC_RESL = 0;
  74.         ADC_CONTR = (ADC_CONTR & 0XE0) | 0X40 | channel;
  75.         _nop_();_nop_();
  76.         _nop_();_nop_();
  77.         while((ADC_CONTR & 0X20) == 0);
  78.         ADC_FLAG=0;
  79.         return <font color="#ff0000">(((unsigned int)ADC_RES << 8) | ADC_RESL);</font>
  80. }
  81. void CalculateAdcKey(unsigned int adc)
  82. {
  83.         unsigned char i;
  84.         unsigned int j=256;
  85.         for(i=1;i<=16; i++)
  86.         {
  87.                 if((adc >= (j - ADC_OFFSET)) && (adc <= (j+ADC_OFFSET))) break;
  88.                 j+=256;
  89.         }
  90.         if(i<17) KeyCode = i;
  91. }
  92. void timer0(void) interrupt 1
  93. {
  94.         cnt1ms++;
  95. }
复制代码


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:78
  • 最近打卡:2025-04-29 08:19:44
已绑定手机

4

主题

153

回帖

300

积分

中级会员

积分
300
发表于 2025-1-11 14:30:06 | 显示全部楼层
优秀
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-6 16:35 , Processed in 0.110213 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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