cyy2100
发表于 2020-12-23 12:04:47
感谢老大的无私奉献,学习中
airwolf001
发表于 2020-12-29 11:43:59
#include<reg51.h>
sfr P5=0xC8; //声明P5引脚寄存器
sfr P1ASF=0x9D; //声明 P1口模拟功能寄存器
sfr ADC_RES=0xBD;//声明 ADC转换结果寄存器
sfr ADC_CONTR=0xBC;//声明 ADC控制寄存器
sbit OUT=P5^5;//定义一个输出引脚
unsigned int L; //定义一个数据
unsigned int adc; //AD转换计算
void Delay10us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();//调整过
i = 24;
while (--i);
}
void delay_n_10us(unsigned int n)//延时n个10us的函数
{
while(n)
{
Delay10us();
n=n-1;//每循环一次n减小1
}
}
void main()
{
L=150;//1.5ms高电平,舵机摆到中间
P1ASF=0x02;//设置P1.7引脚0x80为模拟功能
while(1)
{
OUT=1;
delay_n_10us(L);//输出高电平
OUT=0;
delay_n_10us(1900);//19ms左右低电平
ADC_CONTR=0x88+1;//开始P1.7引脚转换
delay_n_10us(5); //等待50us,AD转换完成
adc=ADC_RES;//读取转换结果
L=adc; //转动旋钮,adc的值0~255变化
//L的变化范围是100~200,所以进行一下限制
if(L>200)L=200; //高电平时间不能超过2ms
if(L<100)L=100; //高电平时间不能低于1ms
}
}
airwolf001
发表于 2021-1-9 17:27:11
//STC15W408AS 11.0592MHz QQ:1149268555
#include<reg52.h>
#include<intrins.h>
#define U8 unsigned char
#define U16 unsigned int
#define U32 unsigned long
sfr P1M0 = 0x92;
sfr P1M1 = 0x91;
sfr P2M0 = 0x96;
sfr P2M1 = 0x95;
sfr P3M0 = 0xb2;
sfr P3M1 = 0xb1;
sfr P5 = 0xC8;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_LOW2 = 0xBE;
sfr P1ASF = 0x9D;
sfr AUXR = 0x8e;
sfr T2H = 0xD6;
sfr T2L = 0xD7;
sbit led = P3^2;
sbit OUT1 = P1^2;
sbit OUT2 = P1^3;
sbit OUT3 = P1^4;
sbit OUT4 = P1^5;
bit flagTxd =0;
U8 cntRxd=0;
U8 flagRxd=0;
U8 pdata bufRxd;
U8 pdata Data;
U8 num;
U8 ch=2;
U8 ms;
void Delay05ms()//@11.0592MHz 0.5
{
unsigned char i, j;
i = 6;
j = 100;
do
{
while (--j);
} while (--i);
}
void Delay(U16 t)
{do
{ Delay05ms();
} while (--t);
}
void Delay4us()//@11.0592MHz
{
unsigned char i;
i = 14;
while (--i);
}
void delays(U8 i)
{
while(i--)
Delay4us();
}
U8 GetADC(U8 ch)
{
ADC_CONTR=0x80|0x00|ch|0x08;
_nop_();
_nop_();
_nop_();
_nop_();
while (!(ADC_CONTR&0x10));
ADC_CONTR&=~0x10;
return ADC_RES;
}
void InitADC()
{
P1ASF=0x02;
ADC_RES=0;
ADC_CONTR=0x80|0x00;
Delay(100);
}
void UartInit(void)
{
SCON = 0x50;
AUXR |= 0x01;
AUXR |= 0x04;
T2L = 0xe8;
T2H = 0xFf;
AUXR |= 0x10;
ES = 1;
EA = 1;
}
void Timer0Init(void)//2ms @11.0592MHz
{
IP=0x10;
ET0=1;
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0x66;
TH0 = 0x7e;
TF0 = 0;
TR0 = 1;
}
void UartWrite(U8 *buf, U8 len)
{
while (len--)
{
flagTxd = 0;
SBUF = *buf++;
while (!flagTxd);
}
Delay(1);
}
main()
{
InitADC();
Timer0Init();
UartInit();
while(1)
{
Data=GetADC(1);
if(flagRxd==1)
{
Delay05ms();
led=~led;
Data=bufRxd;
Data=bufRxd;
Data=bufRxd;
UartWrite(Data,1);
flagRxd=0;
cntRxd=0;
}
}
}
void Time0()interrupt 1
{
ms++;
if(ms==12)ms=0;
switch(ms)
{
case 0:OUT1=1,Delay05ms(),delays(255-Data),OUT1=0;break;
case 1:OUT2=1,Delay05ms(),delays(Data),OUT2=0;break;
case 2:OUT3=1,Delay05ms(),delays(Data),OUT3=0;break;
case 3:OUT4=1,Delay05ms(),delays(Data),OUT4=0;break;
}
}
void InterruptUART() interrupt 4
{
if (RI)
{
RI = 0;
flagRxd=1;
if (cntRxd < sizeof(bufRxd))
{
bufRxd = SBUF;
}
}
if (TI)
{
TI = 0;
flagTxd = 1;
}
}
龙飞凤
发表于 2021-4-9 18:12:57
楼主,辛苦了。
pcsms_YGZXen4V
发表于 2021-4-17 16:54:42
顶顶,好帖好人
hzm19640731
发表于 2021-6-8 18:35:40
支持萝莉大神大神辛苦了
wszyz
发表于 2021-6-18 15:20:55
感谢老大的无私奉献,学习中。
htlkj2020
发表于 2021-6-25 15:39:55
顶,有一个新项目。{:1_20:}
15153003473
发表于 2021-11-19 07:20:08
菜鸟路过,学习一下
ggssccmyzb
发表于 2022-4-6 15:15:47
舵机测试仪,学习到了!!
zh68a11
发表于 2023-3-23 12:57:33
跟着楼主学单片机.
gaodaf16
发表于 2023-3-27 09:32:06
学习了
gaodaf16
发表于 2023-3-27 09:46:44
学习了
wv1124
发表于 2024-1-11 08:56:58
你所在组无法查看是啥原因