|
#include "stc.h"
#include <intrins.h>
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int //宏定義無符號整型
#define NOP() _nop_()
#define EEPROM_START_ADDRESS 0x2000
/********************************************************************
初始定義
*********************************************************************/
uint sec=0; //定義計數(shù)值
uint sec1=0; //定義計數(shù)值
uint tcnt; //脈沖計數(shù)
uint tcnt1; //脈沖計數(shù)
uchar timet=0;
uint t1;
bit write;
uchar sudu;
uchar shuru;
uchar dingshi=1;
uint shi=0;
uchar xiaoshi=0;
uchar baojing=0;
uchar biaozhi=0;
/********************************************************************
I/O定義
*********************************************************************/
sbit P35=P3^5; //脈沖
sbit P36=P3^6; //繼電器
sbit P37=P3^7; //蜂鳴器
/********************************************************************
延時100MS函數(shù)
*********************************************************************/
void Delay100ms(uint t)
{
uint i, j;
_nop_();
i = 100;
j = t;
while (--j);
while (--i);
}
/********************************************************************
蜂鳴器函數(shù)
*********************************************************************/
void fmq()
{
P37=0; Delay100ms(20000);P37=1;
}
/****************************************************
* 函數(shù)名稱: DelayNus
* 輸 入: t 延時時間
* 輸 出: 無
* 功能描述: 微秒級延時
*****************************************************/
void DelayNus(uint t)
{
uint d=0;
d=t;
do
{
NOP();
}while(--d >0);
}
/****************************************************
* 函數(shù)名稱: DelayNms
* 輸 入: t 延時時間
* 輸 出: 無
* 功能描述: 毫秒延時
*****************************************************/
void DelayNms(uint t)
{
do
{
DelayNus(1000);
}while(--t >0);
}
/****************************************************
* 函數(shù)名稱: EEPROMEnable
* 輸 入: 無
* 輸 出: 無
* 功能描述: EEPROM使能
*****************************************************/
void EEPROMEnable(void)
{
ISP_CONTR=0x81;//使能并設(shè)置好等待時間
}
/****************************************************
* 函數(shù)名稱: EEPROMDisable
* 輸 入: 無
* 輸 出: 無
* 功能描述: EEPROM禁用
*****************************************************/
void EEPROMDisable(void)
{
ISP_CONTR=0x00; //禁止EEPROM
ISP_CMD=0x00; //無ISP操作
ISP_TRIG=0x00; //清零
ISP_ADDRH=0x00; //清零
ISP_ADDRL=0x00; //清零
}
/****************************************************
* 函數(shù)名稱: EEPROMSetAddress
* 輸 入: addr 16位地址
* 輸 出: 無
* 功能描述: EEPROM 設(shè)置讀寫地址(相對地址)
*****************************************************/
void EEPROMSetAddress(uint addr)
{
addr+=EEPROM_START_ADDRESS; //初始化地址為0x2000
ISP_ADDRH=(uchar)(addr>>8); //設(shè)置讀寫地址高字節(jié)
ISP_ADDRL=(uchar) addr; //設(shè)置讀寫地址低字節(jié)
}
/****************************************************
* 函數(shù)名稱: EEPROMStart
* 輸 入: 無
* 輸 出: 無
* 功能描述: EEPROM 啟動
*****************************************************/
void EEPROMStart(void)
{
ISP_TRIG=0x46; //首先寫入0x46
ISP_TRIG=0xB9; //然后寫入0xB9
}
/****************************************************
* 函數(shù)名稱: EEPROMReadByte
* 輸 入: addr 16位 地址
* 輸 出: 單個字節(jié)
* 功能描述: EEPROM 讀取單個字節(jié)
*****************************************************/
uchar EEPROMReadByte(uint addr)
{
ISP_DATA=0x00; //清空ISP_DATA
ISP_CMD=0x01; //讀模式
EEPROMEnable(); //EEPROM使能
EEPROMSetAddress(addr); //設(shè)置EEPROM地址
EEPROMStart(); //EEPROM啟動
DelayNus(10); //讀取一個字節(jié)要10us
EEPROMDisable(); //禁止EEPROM
return (ISP_DATA); //返回讀取到的數(shù)據(jù)
}
/****************************************************
* 函數(shù)名稱: EEPROMWriteByte
* 輸 入: addr 16位 地址
byte 單個字節(jié)
* 輸 出: 無
* 功能描述: EEPROM 寫入單個字節(jié)
*****************************************************/
void EEPROMWriteByte(uint addr,uchar byte)
{
EEPROMEnable(); //EERPOM使能
ISP_CMD=0x02; //寫模式
EEPROMSetAddress(addr); //設(shè)置EEPROM地址
ISP_DATA=byte; //寫入數(shù)據(jù)
EEPROMStart(); //EEPROM啟動
DelayNus(60); //寫一個字節(jié)需要60us
EEPROMDisable(); //禁止EEPROM
}
/****************************************************
* 函數(shù)名稱: EEPROMSectorErase
* 輸 入: addr 16位 地址
* 輸 出: 無
* 功能描述: EEPROM 扇區(qū)擦除
*****************************************************/
void EEPROMSectorErase(uint addr)
{
ISP_CMD=0x03; //扇區(qū)擦除模式
EEPROMEnable(); //EEPROM使能
EEPROMSetAddress(addr);//設(shè)置EEPROM地址
EEPROMStart(); //EEPROM啟動
DelayNms(10); //擦除一個扇區(qū)要10ms
EEPROMDisable(); //禁止EEPROM
}
/********************************************************************
按鍵判斷函數(shù)
*********************************************************************/
void KEY()
{
shuru=P1;
switch(shuru)
{
case 0XF8: fmq();P36=0;TR0=0;P35=0;Delay100ms(50000);break;//D
case 0XF2: fmq();sudu++;write=1;if(sudu>=41)sudu=41;Delay100ms(20000);break;//B
case 0XF4: fmq();sudu--;write=1;if(sudu<=1)sudu=1;Delay100ms(20000);break;//C
case 0XF1: fmq();P36=1;TR0=1;P35=1;Delay100ms(50000);break;//A
default:break;
}
switch(sudu)
{
case 1: t1=1;break;//2K
case 2: t1=2;break;//2K
case 3: t1=3;break;//2K
case 4: t1=4;break;//1.6k
case 5: t1=5;break;//1.33k
case 6: t1=6;break;//1.14k
case 7: t1=7;break;//1k
case 8: t1=8;break;// 880
case 9: t1=9;break;// 800
case 10: t1=10;break;// 660
case 11: t1=11;break;// 660
case 12: t1=12;break;// 660
case 13: t1=13;break;// 580
case 14: t1=14;break;// 660
case 15: t1=15;break;// 500
case 16: t1=16;break;// 660
case 17: t1=17;break;// 450
case 18: t1=18;break;// 660
case 19: t1=19;break;// 400
case 20: t1=20;break;// 660
case 21: t1=21;break;// 360
case 22: t1=22;break;// 350
case 23: t1=23;break;// 660
case 24: t1=24;break;// 660
case 25: t1=25;break;// 300
case 26: t1=26;break;// 300
case 27: t1=30;break;// 260
case 28: t1=33;break;// 240
case 29: t1=37;break;// 220
case 30: t1=41;break;// 200
case 31: t1=50;break;// 160
case 32: t1=60;break;// 135
case 33: t1=65;break;// 125
case 34: t1=75;break;// 110
case 35: t1=80;break;// 100
case 36: t1=95;break;// 84
case 37: t1=120;break;//60
case 38: t1=150;break;//50
case 39: t1=300;break;//30
case 40: t1=1000;break;//8
case 41: t1=10000;break;//1
default:break;
}
}
/********************************************************************
定時中斷服務(wù)函數(shù)
*********************************************************************/
void t0(void) interrupt 1 using 0 //定時中斷服務(wù)函數(shù)
{
tcnt1++;
if(tcnt1>=t1)
{
tcnt1=0;
P35=!P35;
}
}
/********************************************************************
主函數(shù)
*********************************************************************/
void main()
{
uchar Q;
TMOD=0x02; //定時器工作在方式2
TH0=0x06; //對TH0 TL0 賦值
TL0=0x06;
TR0=0; //關(guān)定時
ET0=1; //開定時器
EA=1; //開總中斷
P1=0XFF;
P35=0;//脈沖輸出腳
P36=0;//繼電器輸出控制關(guān)
Q=EEPROMReadByte(0); //從EERPOM的相對0地址讀取數(shù)據(jù)
sudu=Q;
while(1)
{
KEY();
if(write==1)
{
EEPROMSectorErase(0); //從EEPROM的相對0地址扇區(qū)擦除
EEPROMWriteByte(0,sudu);//從EEPROM的相對0地址寫入0x88
write=0;
}
}
}
|
-
ALIM0086.JPG
(63.75 KB, 下載次數(shù): 99)
下載附件
2019-11-17 23:58 上傳
-
ALIM0095.JPG
(78.17 KB, 下載次數(shù): 90)
下載附件
2019-11-17 23:58 上傳
-
改裝后接線圖.JPG
(74.61 KB, 下載次數(shù): 110)
下載附件
2019-11-17 23:58 上傳
-
儀表和汽車原接線圖.JPG
(25.89 KB, 下載次數(shù): 97)
下載附件
2019-11-17 23:58 上傳
-
-
原理圖及PCB圖.rar
2019-11-17 23:58 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
173.92 KB, 下載次數(shù): 24, 下載積分: 黑幣 -5
-
-
程序包.rar
2019-11-17 23:59 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
873.03 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5
|