|
基于51單片機的8通道舞臺電腦燈控臺硬件進行研究。系統采用AT89C51單片機作為控制器,
用ADC0809作為主要芯片設計A/D轉換電路,并利用差分收發芯片75176BP進行通信口設計。
//本示例在Keil開發環境下請選擇Intel的8058芯片型號進行編譯
//若無特別說明,工作頻率一般為11.0592MHz
#include "reg51.h"
#define CYCLE 0x1000L //定義PWM周期(最大值為32767)
#define PWMC (*(unsigned int volatile xdata *)0xfff0)
#define PWMCH (*(unsigned char volatile xdata *)0xfff0)
#define PWMCL (*(unsigned char volatile xdata *)0xfff1)
#define PWMCKS (*(unsigned char volatile xdata *)0xfff2)
#define PWM2T1 (*(unsigned int volatile xdata *)0xff00)
#define PWM2T1H (*(unsigned char volatile xdata *)0xff00)
#define PWM2T1L (*(unsigned char volatile xdata *)0xff01)
#define PWM2T2 (*(unsigned int volatile xdata *)0xff02)
#define PWM2T2H (*(unsigned char volatile xdata *)0xff02)
#define PWM2T2L (*(unsigned char volatile xdata *)0xff03)
#define PWM2CR (*(unsigned char volatile xdata *)0xff04)
#define PWM3T1 (*(unsigned int volatile xdata *)0xff10)
#define PWM3T1H (*(unsigned char volatile xdata *)0xff10)
#define PWM3T1L (*(unsigned char volatile xdata *)0xff11)
#define PWM3T2 (*(unsigned int volatile xdata *)0xff12)
#define PWM3T2H (*(unsigned char volatile xdata *)0xff12)
#define PWM3T2L (*(unsigned char volatile xdata *)0xff13)
#define PWM3CR (*(unsigned char volatile xdata *)0xff14)
#define PWM4T1 (*(unsigned int volatile xdata *)0xff20)
#define PWM4T1H (*(unsigned char volatile xdata *)0xff20)
#define PWM4T1L (*(unsigned char volatile xdata *)0xff21)
#define PWM4T2 (*(unsigned int volatile xdata *)0xff22)
#define PWM4T2H (*(unsigned char volatile xdata *)0xff22)
#define PWM4T2L (*(unsigned char volatile xdata *)0xff23)
#define PWM4CR (*(unsigned char volatile xdata *)0xff24)
#define PWM5T1 (*(unsigned int volatile xdata *)0xff30)
#define PWM5T1H (*(unsigned char volatile xdata *)0xff30)
#define PWM5T1L (*(unsigned char volatile xdata *)0xff31)
#define PWM5T2 (*(unsigned int volatile xdata *)0xff32)
#define PWM5T2H (*(unsigned char volatile xdata *)0xff32)
#define PWM5T2L (*(unsigned char volatile xdata *)0xff33)
#define PWM5CR (*(unsigned char volatile xdata *)0xff34)
#define PWM6T1 (*(unsigned int volatile xdata *)0xff40)
#define PWM6T1H (*(unsigned char volatile xdata *)0xff40)
#define PWM6T1L (*(unsigned char volatile xdata *)0xff41)
#define PWM6T2 (*(unsigned int volatile xdata *)0xff42)
#define PWM6T2H (*(unsigned char volatile xdata *)0xff42)
#define PWM6T2L (*(unsigned char volatile xdata *)0xff43)
#define PWM6CR (*(unsigned char volatile xdata *)0xff44)
#define PWM7T1 (*(unsigned int volatile xdata *)0xff50)
#define PWM7T1H (*(unsigned char volatile xdata *)0xff50)
#define PWM7T1L (*(unsigned char volatile xdata *)0xff51)
#define PWM7T2 (*(unsigned int volatile xdata *)0xff52)
#define PWM7T2H (*(unsigned char volatile xdata *)0xff52)
#define PWM7T2L (*(unsigned char volatile xdata *)0xff53)
#define PWM7CR (*(unsigned char volatile xdata *)0xff54)
sfr P_SW2 = 0xba;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr PWMCFG = 0xf1;
sfr PWMCR = 0xf5;
sfr PWMIF = 0xf6;
sfr PWMFDCR = 0xf7;
sbit PWM2 = P3^7;
sbit PWM3 = P2^1;
sbit PWM4 = P2^2;
sbit PWM5 = P2^3;
sbit PWM6 = P0^7;
sbit PWM7 = P0^6;
void PWM_config(void);
void PWM2_SetPwmWide(unsigned short Wide);
void PWM3_SetPwmWide(unsigned short Wide);
void PWM4_SetPwmWide(unsigned short Wide);
void PWM5_SetPwmWide(unsigned short Wide);
void PWM6_SetPwmWide(unsigned short Wide);
void PWM7_SetPwmWide(unsigned short Wide);
void main()
{
PWM_config();
PWM2_SetPwmWide(0); //輸出全低電平
PWM3_SetPwmWide(1); //輸出1/2550高電平
PWM4_SetPwmWide(CYCLE); //輸出全高電平
PWM5_SetPwmWide(CYCLE-1); //輸出2549/2550低電平
PWM6_SetPwmWide(CYCLE/2); //輸出1/2高電平
PWM7_SetPwmWide(CYCLE/3); //輸出1/3高電平
while (1);
}
void PWM_config(void)
{
P0M0 &= ~0xc0;
P0M1 &= ~0xc0;
P0 &= ~0xc0; //設置P0.6/.P0.7電平
P2M0 &= ~0x0e;
P2M1 &= ~0x0e;
P2 &= ~0x0e; //設置P2.1/P2.2/P2.3電平
P3M0 &= ~0x80;
P3M1 &= ~0x80;
P3 &= ~0x80; //設置P3.7電平
P_SW2 |= 0x80;
PWMCKS = 0x00;
PWMC = CYCLE; //設置PWM周期
PWM2T1 = 1;
PWM2T2 = 0;
PWM2CR = 0x00; //PWM2輸出到P3.7
PWM3T1 = 1;
PWM3T2 = 0;
PWM3CR = 0x00; //PWM3輸出到P2.1
PWM4T1 = 1;
PWM4T2 = 0;
PWM4CR = 0x00; //PWM4輸出到P2.2
PWM5T1 = 1;
PWM5T2 = 0;
PWM5CR = 0x00; //PWM5輸出到P2.3
PWM6T1 = 1;
PWM6T2 = 0;
PWM6CR = 0x08; //PWM6輸出到P0.7
PWM7T1 = 1;
PWM7T2 = 0;
PWM7CR = 0x08; //PWM7輸出到P0.6
PWMCFG = 0x00; //配置PWM的輸出初始電平
PWMCR = 0x3f; //使能PWM信號輸出
PWMCR |= 0x80; //使能PWM模塊
P_SW2 &= ~0x80;
}
void PWM2_SetPwmWide(unsigned short Wide)
{
if (Wide == 0)
{
PWMCR &= ~0x01;
PWM2 = 0;
}
else if (Wide == CYCLE)
{
PWMCR &= ~0x01;
PWM2 = 1;
}
else
{
P_SW2 |= 0x80;
PWM2T1 = Wide;
P_SW2 &= ~0x80;
PWMCR |= 0x01;
}
}
void PWM3_SetPwmWide(unsigned short Wide)
{
if (Wide == 0)
{
PWMCR &= ~0x02;
PWM3 = 0;
}
else if (Wide == CYCLE)
{
PWMCR &= ~0x02;
PWM3 = 1;
}
else
{
P_SW2 |= 0x80;
PWM3T1 = Wide;
P_SW2 &= ~0x80;
PWMCR |= 0x02;
}
}
void PWM4_SetPwmWide(unsigned short Wide)
{
if (Wide == 0)
{
PWMCR &= ~0x04;
PWM4 = 0;
}
else if (Wide == CYCLE)
{
PWMCR &= ~0x04;
PWM4 = 1;
}
else
{
P_SW2 |= 0x80;
PWM4T1 = Wide;
P_SW2 &= ~0x80;
PWMCR |= 0x04;
}
}
void PWM5_SetPwmWide(unsigned short Wide)
{
if (Wide == 0)
{
PWMCR &= ~0x08;
PWM5 = 0;
}
else if (Wide == CYCLE)
{
PWMCR &= ~0x08;
PWM5 = 1;
}
else
{
P_SW2 |= 0x80;
PWM5T1 = Wide;
P_SW2 &= ~0x80;
PWMCR |= 0x08;
}
}
void PWM6_SetPwmWide(unsigned short Wide)
{
if (Wide == 0)
{
PWMCR &= ~0x10;
PWM6 = 0;
}
else if (Wide == CYCLE)
{
PWMCR &= ~0x10;
PWM6 = 1;
}
else
{
P_SW2 |= 0x80;
PWM6T1 = Wide;
P_SW2 &= ~0x80;
PWMCR |= 0x10;
}
}
void PWM7_SetPwmWide(unsigned short Wide)
{
if (Wide == 0)
{
PWMCR &= ~0x20;
PWM7 = 0;
}
else if (Wide == CYCLE)
{
PWMCR &= ~0x20;
PWM7 = 1;
}
else
{
P_SW2 |= 0x80;
PWM7T1 = Wide;
P_SW2 &= ~0x80;
PWMCR |= 0x20;
}
}
|
-
-
實現舞臺燈控制效果.zip
2019-1-4 09:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
13.61 KB, 下載次數: 30, 下載積分: 黑幣 -5
評分
-
查看全部評分
|