16级灰度护栏灯DMX512控制器程序

发布时间:2022-12-27  

/*硬件资源:

RAM ADDRESS :0000H---7FFFH

CF card ADDRESS:8000H---8FFFH

CPLD ADDRESS:9000H---FFFFH

RAM SIZE :32K FLASH SIZE:8MBYTE = 4K*512PAGE*4PCS

PCB:V10

*/

#include

#include

//#include //字符函数

#include //字符串函数

#include //一般I/O函数

#include //标准函数

//#include //数学函数

#include //绝对地址

#include //内部函数

#include

#define uchar unsigned char

#define uint unsigned int

#define byte unsigned char

#define ulong unsigned long

#define bool bit

#define TRUE 1

#define FALSE 0

#define V_TH0 0xff /* 时间常数高8位 (65536-500)/256 */

#define V_TL0 0xff /* 时间常数低8位 (65536-500)>256 11.0592*/

//#define V_TH0 (65536-1536)/256

//#define V_TL0 (65536-1536)>256

#define V_TMOD 0x01 /* 定时器T0方式控制字 */

#define WriteDeviceAddress 0xa0

#define ReadDviceAddress 0xa1

sfr CHPCON= 0xbf;

sfr CHPENR=0xf6;

sfr PMR= 0xC4;

sfr SBUF1=0xc1;

sfr SCON1=0xc0;

sbit SM01 = SCON1^7; /* alternative SM0_FE_1 */

sbit SM11 = SCON1^6; /* alternative SM1_1 */

sbit SM21 = SCON1^5; /* alternative SM2_1 */

sbit REN1 = SCON1^4; /* alternative REN_1 */

sbit TB81 = SCON1^3; /* alternative TB8_1 */

sbit RB81 = SCON1^2; /* alternative RB8_1 */

sbit TI1 = SCON1^1; /* alternative TI_1 */

sbit RI1 = SCON1^0; /* alternative RI_1 */

sbit ES1 = IE^6;

/* 定义定时器T0的时间常数值和方式控制字 */

#define REGL XBYTE[0x9003] //控制寄存器护栏管的长度

#define FPGH XBYTE[0x9001] //闪存页高位

#define FPGL XBYTE[0x9002] //闪存页低位

//-------- CF CARD REG ADDRESS

#define EVEN_Data XBYTE[0xa400]

#define ODD_Data XBYTE[0xa400]

#define Data_Reg XBYTE[0xa000] //DATA REGISTER(R/W)

#define Error_Reg XBYTE[0xa001] //ERROR REGISTER(READ)

#define Features XBYTE[0xa001] //FEATURE REGISTER(WRITE)

#define Sectr_Cnt XBYTE[0xa002]//SECTOR COUNT REGISTER(R/W)

#define Sectr_No XBYTE[0xa003] //SECTOR NUMBER REGISTER(R/W)

#define Cylinder_Low XBYTE[0xa004] //CYLINDER LOW REGISTER(R/W)

#define Cylinder_Hi XBYTE[0xa005] //CYLINDER HIGH REGISTER(R/W)

#define Drv_Head XBYTE[0xa006] //DIRVE/HEAD REGISTER(R/W)

#define Status XBYTE[0xa007] //STATUS REGISTER(READ)

#define Command XBYTE[0xa007] //COMMAND REGISTER(WRITE)

#define Alt_Status XBYTE[0xa00e] //Alternate Status Regiter(read only)

#define Device_Ctrl XBYTE[0xa00e] //Device Control Register(Write only)

#define Device_Addrs XBYTE[0xa00f] //Drive Address Register(read only).Not used in this demo

#define Config XBYTE[0x8200] //Configuration Option Register

#define Socket XBYTE[0x8206] //Socket and copy Register

//CF card All command code

#define ChkPwr 0xe5

#define Diagnostic 0x90

#define EraseSctr 0xc0

#define Format 0x50

#define Identify 0xec

#define Idle 0xe3

#define Idlelmm 0xe1

#define Initialize 0x91

#define ReadBuf 0xe4

#define ReadLong 0x22

#define ReadMulti 0xc4

#define ReadSctr 0x20

#define ReadVerify 0x40

#define Recalibrate 0x10

#define ReadSense 0x03

#define Seek 0x70

#define SetFeature 0xef

#define SetMulti 0xc6

#define Sleep 0xe6

#define Standby 0xe2

#define Standbylmm 0xe0

#define Translate 0x87

#define WearLevel 0xf5

#define WriteBuf 0xe8

#define WriteLong 0x32

#define WriteMulti 0xc5

#define WriteSctr 0x30

#define WriteVerify 0x3c

#define WrtMwoErase 0xcd

#define WrtSwoErase 0x38

#define debug 1;

//**********************************************

sbit senden=P3^2;

sbit SDA=P3^3;

sbit SCL=P3^5;

sbit wdgclr=P1^7;

//*************************************************

uchar Select;

uchar LBA[6]; //Sets up sector ,CF Card Address

uint zhepe; //帧频

uint ms; //毫秒定时

uchar ADD; //地址

uchar idata iic_buf[96]; //接收缓冲区

uint pointer;

uchar xdata *bufp;

uchar subchk; //接收指针 和校验

uchar paklen; //包长

uint Dcyli; //总柱面

uint Dhead; //总磁头

uint sec_track; //扇区/磁道

uchar bdata flag;

sbit frameok=flag^0; //rece ok

sbit color=flag^1; //0 sing red color 1 red green color

sbit rec_sta=flag^2; //1 进入接状态,不显示

sbit rec_end=flag^3;

sbit timout=flag^4;

//jmp_buf env;

//int retval;

/***************************************************************************/

void I2cDelay(unsigned int number) {

unsigned char temp;

for(;number!=0;number--,wdgclr=!wdgclr) {

for(temp=112;temp!=0;temp--) {

}

}

}

//*******************************

void SomeNOP(void)

{

uchar i;

i=5;

while(i--);

}

/***************************************************************************/

void Start() {

SDA=1;SomeNOP();

SCL=1;SomeNOP();

SDA=0;SomeNOP();

SCL=0;SomeNOP();

}

/***************************************************************************/

void Stop() {

SCL=0;SomeNOP();

SDA=0;SomeNOP();

SCL=1;SomeNOP();

SDA=1;SomeNOP();

}

/***************************************************************************/

void Ack() {

SDA=0;SomeNOP();

SCL=1;SomeNOP();

SCL=0;SomeNOP();

SDA=1;SomeNOP();

}

/***************************************************************************/

void NoAck() {

SDA=1;SomeNOP();

SCL=1;SomeNOP();

SCL=0;SomeNOP();

}

/***************************************************************************/

bit TestAck() {

bit ErrorBit;

SDA=1;SomeNOP();

SCL=1;SomeNOP();

ErrorBit=SDA;

SCL=0;

return(ErrorBit);

}

/***************************************************************************/

Write8Bit(unsigned char input)

{

unsigned char temp;

for(temp=8;temp!=0;temp--) {

SDA=(bit)(input&amt;0x80);

SCL=1;SomeNOP();

SCL=0;SomeNOP();

input=input<<1;

}

}

/***************************************************************************/

void Write24c02(unsigned char xdata *Wdata,unsigned char RomAddress,unsigned char number) {

wdgclr=!wdgclr;

Start();

Write8Bit(WriteDeviceAddress);

TestAck();

Write8Bit(RomAddress);

TestAck();

for(;number!=0;number--) {

Write8Bit(*Wdata);

TestAck();

Wdata++;

}

Stop();

I2cDelay(10);

}

/***************************************************************************/

unsigned char Read8Bit() {

unsigned char temp,rbyte=0;

for(temp=8;temp!=0;temp--) {

SCL=1;

rbyte=rbyte<<1;

rbyte=rbyte|((unsigned char)(SDA));

SCL=0;

}

return(rbyte);

}

/***************************************************************************/

void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {

// unsigned char temp,rbyte;

wdgclr=!wdgclr;

Start();

Write8Bit(WriteDeviceAddress);

TestAck();

Write8Bit(RomAddress);

TestAck();

Start();

Write8Bit(ReadDviceAddress);

TestAck();

while(bytes!=1) {

*RamAddress=Read8Bit();

Ack();

RamAddress++;

bytes--;

}

*RamAddress=Read8Bit();

NoAck();

Stop();

}

/*************************************************

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    AT89C2051单片机对双路路灯照明控制器的设计;通常我们常见的路灯、通道灯、广告灯箱等公共场所用照明灯具往往彻夜通明,或者说在白天不应照明时工作了,造成了电能的浪费。还有些因为采用了定时控制......
    存在蓄电池中供负载使用,它是集太阳能光伏技术、蓄电池技术、照明光源技术于一体的新兴技术。太阳能路灯控制器是应用于太阳能光伏系统中,协调太阳能电池板、蓄电池、负载的工作,使整个太阳能光伏系统高效,安全的运作。 1......
    )系统是一种通过调节电气模块的工作状态,使光伏板能够输出更多电能的电气系统。 1 硬件组成 太阳能路灯控制系统的组成如图1所示。 1.1 Buck电路及其驱动电路 Buck电路......
    光控制器——使用TPT进行测试自动化的标准示例;在PikeTec,我们有一个示例来展示我们的测试自动化工具TPT:灯光控制器。 这些信息正在等着你: 为什么是这样一个简单的例子? 灯控制器......
    风光互补发电的节能LED灯控制系统设计;引言 随着控制技术的迅速发展,越来越多的控制技术被应用于照明工程。目前,高层楼道灯开关控制方法多为“钟控+光控”或“声控+光控”方式。“钟控”不适......
    光控制电路图解(50例); 目录 1.手机照相机闪光灯控制电路 2.数码照相机闪光灯灯控制......
    标准仅能够满足不可调光的3极光控器控制架构。而随着LED技术在路灯中的应用,对于具有更高能效的可调光功能的需求也在不断增长,这就需要新的标准和架构来补位,这个新标准就是ANSI C136.41......
    基于51单片机的智能路灯控制器设计;一.系统概述 系统使用的模块有AT89C51单片机+LCD1602显示屏+ADC0832+按键+小灯。 本次设计的智能路灯控制系统以AT89C51单片机为控制......
    在开启变光开关和大众汽车品牌绝大多数车型一样,灯光控制装置在转向柱的左边,方向盘下面,家家户户这样,毫无尊贵感可言。宝马B48变光开关、转向开关和驾驶辅助系统操作按钮为一体,开关之间通过内部连接线束和转向柱电子控制单元装置相连接。当灯......
    液位控制器控制......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>