深入学习,由启发。 |
厉害,有器件,但不知道能不能弄成,学习了。 |
请问这个是用keil4还是keil5建立的工程啊??建立工程时选择哪个器件啊?为什么我的keil4 C51里面没有这个stc8g1k08a器件啊??? |
共同学习,共同进步,向大佬学习! |
有时间研究一下 |
//一个简单的在stc8g1ko8A上可以运行的小demo,可以用于简单的AD测量,define修改一下就行了 #define TIME_3S 30000 #define TIME_2S 30000 #define TIME_1MS 100 #define TIME_2MS 200 #define TIME_5MS 500 // 状态机 #define READY_ST 1 #define CAPCHARGE 2 #define MOT_ST 3 #define STOP_ST 4 #define CHARGE_ST 5 #define DELAY_ST 6 // 信号接收 // 状态机 #define keyRun #define keyMot // 数值 #define U500 20 #define U6500 500 #define U8000 700 unsigned int STATUS unsigned int ADS // 计数器 unsigned int keyRunCounter unsigned int keyShutDownCounter unsigned int shortCurrentCounter unsigned int delaySTCounter unsigned int capChargeCounter unsigned int OVMonitCounter_1 unsigned int OVMonitCounter_2 mian() { case Status Run: Gpio.init;//keyRun 为推挽 Mot: Gpio.init2;//keyRun 为input default: Gpio.init;//初始化为Run } void ISR() { /*滤波器*/ /*保护*/ Protect(); /*按键检测*/ keyMonitor(); /*状态与动作*/ switch STATUS: case READY_ST: setGPIO1; case CHARGE_ST: setGPIO1(); case DELAY_ST: setGPIO1(); case MOT_ST: setGPIO1(); case STOP_ST: setGPIO1(); default: } /****************************** *执行保护逻辑 ****************************/ void Protect() { // Short State monitor if (STATUS != READY_ST) && (ADS < U500)//在待机时不检测,其他时段都不放过 { shortCurrentCounter++; } else { shortCurrentCounter = 0; } if (shortCurrentCounter > TIME_1MS) { shortCurrentCounter = 0; STATUS = STOP_ST; return; } // OverVoltage Monitor 1 if (STATUS != READY_ST) && (ADS > U500)// { OVMonitCounter_1++; } else { OVMonitCounter_1 = 0; } if (OVMonitCounter_1 > OVMonitCounter_1Debounce) { OVMonitCounter_1 = 0; STATUS = DELAY_ST; } // OverVoltage Monitor 2 if (STATUS != READY_ST) && (ADS > U7500)// { OVMonitCounter_2++; } else { OVMonitCounter_2 = 0; } if (OVMonitCounter_2 > OVMonitCounter_2Debounce) { OVMonitCounter_2 = 0; STATUS = DELAY_ST; } } /****************************** *按键检测逻辑 ****************************/ void keyMonitor() { //待机状态,长按*秒开机 if (STATUS == READY_ST) && (keyRun == 1)//待机状态,长按3秒开机 { keyRunCounter++; } else { keyRunCounter = 0; } if (keyRunCounter > TIME_3S) { keyRunCounter = 0; STATUS = CHARGE_ST; } //运行状态,信号消失1ms关机 if ((STATUS == CHARGE_ST) || (STATUS == DELAY_ST) || (STATUS == CAPCHARGE) )&& (keyRun == 0) { keyShutDownCounter++; } else { keyShutDownCounter = 0; } if (keyShutDownCounter > TIME_3S) { keyShutDownCounter = 0; STATUS = READY_ST; } /*母线大电容充电2秒,开始工作*/ if (STATUS == CAPCHARGE) { if (capChargeCounter < TIME_2S) { capChargeCounter++; } else { capChargeCounter = 0; STATUS = CHARGE_ST; } } //delay状态,1ms后使能检测 if ((STATUS == DELAY_ST) ) //&& (ADS < U500) delay 之后1ms再次检测,不够再加,够了就再次进入delay { delaySTCounter++; } else { delaySTCounter = 0; } if (delaySTCounter > TIME_2MS) { delaySTCounter = 0; STATUS = CHARGE_ST; } } |
面包板插线,直接下载成功 |
老董 发表于 2021-4-22 18:55 您好,这个时钟是怎么确定的呢? |
kmikmi 发表于 2021-7-5 22:09 谢谢指点 我还不知道有这个方法 所以把reg51.h里面加了很多与8G相关的东西 ![]() |
lin2453676722 发表于 2021-5-2 20:10 把文件头改一下就能编译 #include "reg51.h" #include "intrins.h" #include"main.h" #include<math.h> 改成: #include <STC8G.h> #ifndef __STC8G_H__ #define __STC8G_H__ |
测距精度可以用软件调节 前提就是做着玩的 目的是对示波器和测试仪构思的实践 |
测距精度高不高,有没有精度微调 |
zhike 发表于 2021-5-30 10:00 简易的 都是出于自己对示波器工作原理的理解 频率和精度都不高 主要是出于兴趣玩玩 |
这个能做成示波器吗? |
学到了,有空弄一个 |
keil5好像编译不成功 |
不错,有时间来做一个 |
有意思,下来有时间研究一下 |
谢谢版主帮我整理 忘了告诉大家 单片机下载程序是 时钟选择33.1776MZ |