|
本系統(tǒng)采用MCU(SM8952AC25P)作為主控器件,單片機(jī)應(yīng)用系統(tǒng)由硬件和軟件組成。硬件由單片機(jī)擴(kuò)展的存儲(chǔ)器、輸入/出設(shè)備以及各種實(shí)現(xiàn)單片機(jī)系統(tǒng)控制要求的接口電路和有關(guān)的外圍電路芯片或部件組成;軟件由單片機(jī)應(yīng)用系統(tǒng)實(shí)現(xiàn)其特定控制功能的各種工作程序和管理程序組成。
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
8R$U9MWG5_J24XF52[UUD(A.png (34.13 KB, 下載次數(shù): 52)
下載附件
2020-9-17 19:48 上傳
(B31WHXNIUBQ[}N_GFIJ1U6.png (55.88 KB, 下載次數(shù): 51)
下載附件
2020-9-17 19:48 上傳
部分單片機(jī)代碼:
#include <AT89X55.H>
bit r_flag;
enum eepromtype {M2401,M2402,M2404,M2408,M2416,M2432,M2464,M24128,M24256};
extern bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,
unsigned char ControlByte,enum eepromtype EepromType);
sbit key = P2^0;
bit key_flag;
sbit dog = P0^7;
sbit LED = P0^0;
sbit TELA = P3^6;
sbit TEL = P3^7;
sbit RING = P3^2;
sbit switching =P0^4;
unsigned char mode;
bit passwordflag;
unsigned char password[6];
unsigned char passwordtest[6];
void dlms(unsigned int x);
void reset(void);
void open(void);
//**************************************************************** //
// INT1中斷服務(wù)程序 //
//**************************************************************** //
unsigned char ring_fluctuation;
unsigned char ring_count;
bit ring_flag;
void service_int0() interrupt 0 using 1
{
if(ring_fluctuation<10)
{
ring_fluctuation++;
}
}
//**************************************************************** //
// t1 定時(shí)中斷 //
//**************************************************************** //
unsigned char ring_dlsm;
unsigned char ring_time;
unsigned int ring_reset_time;
unsigned char dlms_time;
void timer1 (void) interrupt 3 using 0
{
TH1=0x3c;
TL1=0xb0;
dlms_time++;
if(ring_fluctuation>5)
{
EX0=0;//INT1_OFF;
ring_dlsm++;
if(ring_dlsm==20)//等待一秒
{
ring_dlsm=0;
EX0=1;//INT1_ON;
ring_fluctuation=0;
ring_count++;//震鈴次數(shù)
if(ring_flag)//有效振鈴
{
if(ring_count==6)
{
ring_count=7;
mode=1;
}
}
else//無效振鈴
{
if(ring_count>2)
{
ring_reset_time=800;
}
}
}
}
if((ring_count==2)|(ring_count==1))
{
ring_time++;
if(ring_time==200)
{
ring_flag=1;
}
}
if((ring_count>0)&(ring_count<6))
{
LED=INT0;
}
|
|