当前位置:首页 > 单片机 > 单片机
[导读] 此例程设置了按键可以调整100-1000hz的不同频率(100的倍数)的方波,另外还加入了串口通信,可以通过串口发送来的数字来设置相对应的频率;#include #include"uart.h" sbit PWMOUT = P1^0; sbit led

此例程设置了按键可以调整100-1000hz的不同频率(100的倍数)的方波,另外还加入了串口通信,可以通过串口发送来的数字来设置相对应的频率;

#include

#include"uart.h"

sbit PWMOUT = P1^0;

sbit led = P2^2;

sbit KEY1 = P1^2;

sbit KEY2 = P3^3;

unsigned char HighRH = 0; //高电平重载值的高字节

unsigned char HighRL = 0; //高电平重载值的低字节

unsigned char LowRH = 0; //低电平重载值的高字节

unsigned char LowRL = 0; //低电平重载值的低字节

unsigned int fr;

unsigned int k=0,t,i;

unsigned int s= 100;

unsigned char a[3];

unsigned int b=0;

void ConfigPWM(unsigned int fr, unsigned char dc);

void ConfigUART(unsigned int baud);

void delay(unsigned int n){ while (n--);}

void main()

{

bit backup1 = 1;

bit backup2 = 1;

bit keybuf1 = 1; //按键值暂存,临时保存按键的扫描值

bit keybuf2 = 1; //按键值暂存,临时保存按键的扫描值

//keybuf1 = KEY1; //把当前扫描值暂存

EA=1;

led = 0;

ConfigUART(9600); //配置波特率为9600

ConfigPWM(100,50);

//Timer1Init();

while (1)

{

if(k==1)

{

k=0;

ConfigPWM(s,50);

led = ~led;delay(2000);

}

keybuf1 = KEY1; //把当前扫描值暂存

if (keybuf1 != backup1) //当前值与前次值不相等说明此时按键有动作

{

delay(1000); //延时大约10ms

if (keybuf1 == KEY1) //判断扫描值有没有发生改变,即按键抖动

{

if (backup1 == 0) //如果前次值为0,则说明当前是弹起动作

{

s = s-50;

}

backup1 = keybuf1; //更新备份为当前值,以备进行下次比较

}

ConfigPWM(s,50);

}

keybuf2 = KEY2; //把当前扫描值暂存

if (keybuf2 != backup2) //当前值与前次值不相等说明此时按键有动作

{

delay(1000); //延时大约10ms

if (keybuf2 == KEY2) //判断扫描值有没有发生改变,即按键抖动

{

if (backup2 == 0) //如果前次值为0,则说明当前是弹起动作

{

s = s+50;

}

backup2 = keybuf2; //更新备份为当前值,以备进行下次比较

}

ConfigPWM(s,50);

}

}

}

void ConfigUART(unsigned int baud)

{

SCON = 0x50; //配置串口为模式1

TMOD &= 0x0F; //清零T1的控制位

TMOD |= 0x20; //配置T1为模式2

TH1 = 256 - (11059200/12/32)/baud; //计算T1重载值

TL1 = TH1; //初值等于重载值

ET1 = 0; //中断T1

ES = 1; //串口中断

TR1 = 1; //启动T1

}

void ConfigPWM(unsigned int fr, unsigned char dc)

{

unsigned int high, low;

unsigned long tmp;

tmp = (11059200/12)/fr; //计算一个周期所需的计数值

high = (tmp*dc) / 100; //计算高电平所需的计数值

low = tmp - high; //计算低电平所需的计数值

high = 65536 - high + 12; //计算高电平的重载值并补偿中断延时

low = 65536 - low + 12; //计算低电平的重载值并补偿中断延时

HighRH = (unsigned char)(high>>8); //高电平重载值拆分为高低字节

HighRL = (unsigned char)high;

LowRH = (unsigned char)(low>>8); //低电平重载值拆分为高低字节

LowRL = (unsigned char)low;

TMOD &= 0xF0; //清零 T0 的控制位

TMOD |= 0x01; //配置 T0 为模式 1

TH0 = HighRH; //加载 T0 重载值

TL0 = HighRL;

ET0 = 1; //使能 T0 中断

TR0 = 1; //启动 T0

PWMOUT = 1; //输出高电平

}

void InterruptTimer0() interrupt 1

{

if (PWMOUT == 1) //当前输出为高电平时,装载低电平值并输出低电平

{

TH0 = LowRH;

TL0 = LowRL;

PWMOUT = 0;

}

else //当前输出为低电平时,装载高电平值并输出高电平

{

TH0 = HighRH;

TL0 = HighRL;

PWMOUT = 1;

}

}

/*void Timer1Init()

{

TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。

TH1=0XFC; //给定时器赋初值,定时1ms

TL1=0X18;

ET1=1;//打开定时器1中断允许

EA=1;//打开总中断

TR1=1;//打开定时器

}

void Timer1() interrupt 3

{

static u16;

TH1=0XFC; //给定时器赋初值,定时1ms

TL1=0X18;

i++;

if(i==1000)

{

i=0;

t++;

if(t%2==0)

{

SBUF=t/10;

SBUF=t%10;

}

}

}*/

void ComINT() interrupt 4 //中断接收程序

{

if(RI) //判断是否接收完,接收完成后,由硬件置RI位

{

RI=0;

//SBUF=SBUF;

a[b]=SBUF;

b++;

if(b==3)

{

/*if(a[0]=='a'&&a[1]=='b'&&a[2]=='c')

{led = 0;delay(2000);}

else

{led = 1;}*/

b=0;s=(a[0]-0x30)*100+(a[1]-0x30)*10+(a[2]-0x30);

k=1;

//SBUF = 'T';

}

}

if(TI)

{

TI=0;

}

}



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

当地时间 9 月 8 日,SpaceX 与 EchoStar 正式达成一项价值 170 亿美元的频谱交易,SpaceX 将收购 EchoStar 旗下 AWS-4 频段(2GHz 频段)及 H 频段的频谱许可证,此举引发...

关键字: SpaceX EchoStar 星链 通信

8位单片机在嵌入式设计领域已经成为半个多世纪以来的主流选择。尽管嵌入式系统市场日益复杂,8位单片机依然不断发展,积极应对新的挑战和系统需求。如今,Microchip推出的8位PIC®和AVR®单片机系列,配备了先进的独立...

关键字: 单片机 嵌入式 CPU

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

本文中,小编将对单片机予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 单片机 开发板 Keil

随着单片机系统越来越广泛地应用于消费类电子、医疗、工业自动化、智能化仪器仪表、航空航天等各领域,单片机系统面临着电磁干扰(EMI)日益严重的威胁。电磁兼容性(EMC)包含系统的发射和敏感度两方面的问题。

关键字: 单片机 电磁兼容

以下内容中,小编将对单片机的相关内容进行着重介绍和阐述,希望本文能帮您增进对单片机的了解,和小编一起来看看吧。

关键字: 单片机 复位电路

在这篇文章中,小编将为大家带来单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 单片机 异常复位

今天,小编将在这篇文章中为大家带来单片机的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 仿真器

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot
关闭