?? ps._c
字號:
//***************************FileName:PS.C*************************//
//***************************ICCAVR6.30編譯************************//
//**************************MMI Firmware 1.0***********************//
//**************************Last Update:2005-3*********************//
#include <io8535v.h> //AT90S8535單片機寄存器定義
#include <macros.h> //宏
#include "Encode.h" //PS/2鍵盤譯碼表
#include "ZIMO.H" //LCD字模表
#define uchar unsigned char //數(shù)據(jù)類型說明
#define uint unsigned int //數(shù)據(jù)類型說明
uchar Row=0; //LCD當前行位置計數(shù)器
uchar Column=0; //LCD當前列位置計數(shù)器
uchar R_flag=0; //LCD換行標志;
uchar Int_Number; //中斷計數(shù)器;
uchar Key_Value; //鍵盤編碼值;
uchar Key_Up; //鍵盤被釋放標志;
uchar Byte_Flag; //鍵盤編碼接收完成標志;
uchar Status=0; //定義系統(tǒng)狀態(tài)0:登陸,1:選擇
uint Voltage_A //定義A點電壓采樣值
uint Voltage_B //定義B點電壓采樣值
uint Voltage_Diff; //定義AB點電壓采樣差之絕對值
uchar V_Flag; //定義AB點電壓差符號標志
uchar A_Data[3]; //定義A點電壓處理值
uchar B_Data[3]; //定義B點電壓處理值
uchar AB_Data[3]; //定義AB點電壓差處理值
uchar RE_Password[6]; //輸入密碼記錄
uchar Password[6]={2,0,0,5,0,3};//系統(tǒng)初試密碼:200503
//***************************延時函數(shù)**********************//
void DelayMs(uint time)
{uint temp;
for(;time!=0;time--)
for(temp=2000;temp!=0;temp--) ;
}
//***************************延時函數(shù)**********************//
void DelayUs(uchar time)
{uchar temp;
for(;time!=0;time--)
NOP();
}
//***************************AT90S8535 I/O口初始化*********//
void Init_IO(void)
{DDRA=0x00;
PORTA=0x00;
DDRB=0xff;
PORTB=0xff;
DDRC=0xff;
PORTC=0xff;
DDRD=0x80;
PORTD=0x80;
}
//***************************A/D轉(zhuǎn)換初始化函數(shù)*************//
void Init_ADC(void)
{ADMUX=0x00;
ADCSR=0xe6;
}
//***************************A/D轉(zhuǎn)換采樣電壓值*************//
//參數(shù)說明:
//Channel:0 A點電壓采樣;1:B點電壓采樣;2:A、B電壓差值
//返回值:電壓采樣值或者A、B點采樣差值
uint ADC_Convert(uchar Channel)
{uint temp1,temp2;
if(Channel!=2)
{ADMUX=Channel;
DelayUs(10);
temp1=(uint)ADCL;
temp2=(uint)ADCH;
temp2=(temp2<<8)+temp1;}
else
if(Voltage_A>Voltage_B)
{V_Flag=1;
temp2=Voltage_A-Voltage_B;}
else
{V_Flag=0;
temp2=Voltage_B-Voltage_A;}
return(temp2);
}
//***************************電壓數(shù)據(jù)處理******************//
//參數(shù)說明:
//temp:A、B點電壓采樣值或差值;
//pt[]:轉(zhuǎn)換數(shù)據(jù)處理,保留兩位小數(shù),如3.51(V)。
void V_Process(uint temp,uchar *pt)
{uint temp1;
temp1=temp*5;
pt[0]=temp1/1023; //電壓整數(shù)值
temp1=temp1%1023;
temp1=temp1*10;
pt[1]=temp1/1023; //電壓第一位小數(shù)值
temp1=temp1%1023;
temp1=temp1*10;
pt[2]=temp1/1023; //電壓第二位小數(shù)值
}
//***************************密碼驗證函數(shù)******************//
//參數(shù)說明:pt[]:輸入密碼;
//返回值:6:密碼正確;其他:密碼錯誤;
uchar Check_Password(uchar *pt)
{uchar i,j=0;
for(i=0;i<6;i++)
if(pt[i]==Password[i]) j++;
return(j);
}
//sbit KEY_CLK=PD^3 //PS/2接口時鐘線
//sbit KEY_DATA=PD^2;//Interrupt
//***************************LCD函數(shù)開始********************//
//sbit DI=PB^0;
void Set_DI(uchar i)
{if(i==1) PORTB=PORTB|0x01;
else PORTB=PORTB&0xfe;}
//sbit RW=PB^1;
void Set_RW(uchar i)
{if(i==1) PORTB=PORTB|0x02;
else PORTB=PORTB&0xfd;}
//sbit ENABLE=PB^2;
void Set_EN(uchar i)
{if(i==1) PORTB=PORTB|0x04;
else PORTB=PORTB&0xfb;}
//sbit CS1=PB^3;
void Set_CS1(uchar i)
{if(i==1) PORTB=PORTB|0x08;
else PORTB=PORTB&0xf7;}
//sbit CS2=PB^4;
void Set_CS2(uchar i)
{if(i==1) PORTB=PORTB|0x10;
else PORTB=PORTB&0xbf;}
//sbit RST=PB^5;
void Set_RST(uchar i)
{if(i==1) PORTB=PORTB|0x40;
else PORTB=PORTB&0x7f;}
//***************************LCD顯示開關(guān)控制命令***********//
//參數(shù)說明:i=0開顯示,i=1關(guān)顯示
void DisplayOnOff(uchar i)
{uchar j;
Set_RW(0); // RW=0;
Set_DI(0); //DI=0;
Set_EN(0); //ENABLE=0;
PORTC=62+i; //P0=0x3e+i;
DelayUs(10); //_DelayUs_();
Set_EN(1); //ENABLE=1;
DelayUs(10); //_DelayUs_();
DelayUs(10); //_DelayUs_();
Set_EN(0); //ENABLE=0;
}
//***************************設(shè)置LCD顯示起始行*************//
//參數(shù)說明:i=0~63
void SetStartLine(uchar i)
{Set_RW(0); //RW=0;
Set_DI(0); //DI=0;
Set_EN(0); //ENABLE=0;
PORTC=0xc0+i; //PORTC=0xc0+i;
DelayUs(10); //_DelayUs_();
Set_EN(1); //ENABLE=1;
DelayUs(10); //_DelayUs_();
DelayUs(10); //_DelayUs_();
Set_EN(0); //ENABLE=0;
}
//***************************設(shè)置頁(行)地址**************//
//參數(shù)說明:i=0~7
void SetX(uchar i)
{Set_RW(0); //RW=0;
Set_DI(0); //DI=0;
Set_EN(0); //ENABLE=0;
PORTC=0xb8+i; //P0=0xb8+i;
DelayUs(10); //_DelayUs_();
Set_EN(1); //ENABLE=1;
DelayUs(100); // _DelayUs_();
DelayUs(100); //_DelayUs_();
Set_EN(0); //ENABLE=0;
}
//***************************設(shè)置Y(列)地址***************//
//參數(shù)說明:i=0~63
void SetY(uchar i)
{Set_RW(0); //RW=0;
Set_DI(0); //DI=0;
Set_EN(0); //ENABLE=0;
PORTC=0x40+i; // P0=0x40+i;
DelayUs(10); //_DelayUs_();
Set_EN(1); //ENABLE=1;
DelayUs(10); //_DelayUs_();
DelayUs(10); //_DelayUs_();
Set_EN(0); //ENABLE=0;
}
//***************************寫顯示數(shù)據(jù)********************//
//參數(shù)說明:i為送DDRAM的數(shù)據(jù)
void WriteByte(uchar i)
{Set_RW(0); //RW=0;
Set_DI(1); //DI=1;
Set_EN(0); //ENABLE=0;
PORTC=i; //P0=i;
DelayUs(10); //_DelayUs_();
Set_EN(1); //ENABLE=1;
DelayUs(10); //_DelayUs_();
DelayUs(10); //_DelayUs_();
Set_EN(0); //ENABLE=0;
}
//***************************LCD復位***********************//
void Reset(void)
{Set_RST(0); //RST=0;
DelayMs(1);
Set_RST(1); //RST=1;
}
//***************************LCD清屏幕*********************//
//參數(shù)說明:LCD從k(0~7)行開始清屏幕
void ClearScreen(uchar k)
{uchar i,j;
Set_CS1(1); //CS1=1;選中右屏幕
Set_CS2(1); //CS2=1;選中左屏幕
for(i=k;i<8;i+=1)
{SetX(i); //設(shè)置起始行
for(j=0;j<64;j++)
WriteByte(0x00); //向DDRAM寫0清屏幕
}
}
//***************************LCD初始化*********************//
void Init_LCD(void)
{Reset(); //LCD復位
DelayMs(1);
ClearScreen(0); //LCD清屏
DisplayOnOff(1); //開啟顯示
SetStartLine(0); //設(shè)置起始行
}
//***************************LCD圖象顯示函數(shù)***************//
//參數(shù)說明:disp[]:圖象數(shù)組名;i:LCD的起始行;j:LCD的結(jié)束行
//函數(shù)功能:從LCD的i行到j(luò)行顯示數(shù)組disp[]所存的圖象
void WritePIC(const uchar *disp,uchar i,uchar j)
{uchar ii=0;
uchar jj=0;
uchar kk=0;
SetX(0);
SetY(0);
for(ii=i;ii<j;ii++)
{for(kk=0;kk<64;kk++)
{Set_CS1(0); //選擇左屏幕
Set_CS2(1);
SetX(ii); //設(shè)置頁地址
SetY(kk); //設(shè)置列地址
WriteByte(*disp); //寫數(shù)據(jù)
disp++;}
for(kk=0;kk<64;kk++)
{Set_CS1(1); //選擇右屏幕
Set_CS2(0);
SetX(ii); //設(shè)置頁地址
SetY(kk); //設(shè)置列地址
WriteByte(*disp); //寫數(shù)據(jù)
disp++;}}
}
//***************************LCD中文漢字顯示函數(shù)***********//
//參數(shù)說明:disp[]:漢字字模數(shù)組名;
//參數(shù)說明:x:LCD的頁地址;y:LCD的列地址
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -