//***************************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 //数据类型说明
#define uint unsigned int //数据类型说明
uchar Row=0; //LCD当前行位置计数器
uchar Column=0; //LCD当前列位置计数器
uchar R_flag=0; //LCD换行标志;
uchar Int_Number; //中断计数器;
uchar Key_Value; //键盘编码值;
uchar Key_Up; //键盘被释放标志;
uchar Byte_Flag; //键盘编码接收完成标志;
uchar Status=0; //定义系统状态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};//系统初试密码:200503
//***************************延时函数**********************//
void DelayMs(uint time)
{uint temp;
for(;time!=0;time--)
for(temp=2000;temp!=0;temp--) ;
}
//***************************延时函数**********************//
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转换初始化函数*************//
void Init_ADC(void)
{ADMUX=0x00;
ADCSR=0xe6;
}
//***************************A/D转换采样电压值*************//
//参数说明:
//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);
}
//***************************电压数据处理******************//
//参数说明:
//temp:A、B点电压采样值或差值;
//pt[]:转换数据处理,保留两位小数,如3.51(V)。
void V_Process(uint temp,uchar *pt)
{uint temp1;
temp1=temp*5;
pt[0]=temp1/1023; //电压整数值
temp1=temp1%1023;
temp1=temp1*10;
pt[1]=temp1/1023; //电压第一位小数值
temp1=temp1%1023;
temp1=temp1*10;
pt[2]=temp1/1023; //电压第二位小数值
}
//***************************密码验证函数******************//
//参数说明: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函数开始********************//
//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显示开关控制命令***********//
//参数说明:i=0开显示,i=1关显示
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;
}
//***************************设置LCD显示起始行*************//
//参数说明: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;
}
//***************************设置页(行)地址**************//
//参数说明: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;
}
//***************************设置Y(列)地址***************//
//参数说明: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;
}
//***************************写显示数据********************//
//参数说明:i为送DDRAM的数据
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清屏幕*********************//
//参数说明: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); //设置起始行
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); //设置起始行
}
//***************************LCD图象显示函数***************//
//参数说明:disp[]:图象数组名;i:LCD的起始行;j:LCD的结束行
//函数功能:从LCD的i行到j行显示数组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); //设置页地址
SetY(kk); //设置列地址
WriteByte(*disp); //写数据
disp++;}
for(kk=0;kk<64;kk++)
{Set_CS1(1); //选择右屏幕
Set_CS2(0);
SetX(ii);
weixin_42651887
- 粉丝: 102
- 资源: 1万+
最新资源
- screenrecorder-20241221-204839.mp4
- Screenshot_20241221-204051.png
- 自考计算机网络原理04741真题及答案2018-2020
- YOLO算法-垃圾箱检测数据集-214张图像带标签-垃圾桶.zip
- Hive存储压缩与Hive3性能优化-必看文档
- YOLO算法-施工管理数据集-7164张图像带标签-安全帽-装载机-挖掘机-平地机-移动式起重机-反光背心-工人-推土机-滚筒-哑巴卡车.zip
- YOLO算法-俯视视角草原绵羊检测数据集-4133张图像带标签-羊.zip
- YOLO算法-挖掘机数据集-2656张图像带标签-自卸卡车-挖掘机-轮式装载机.zip
- YOLO算法-火车-轨道-手推车数据集-3793张图像带标签-火车-轨道-手推车.zip
- YOLO算法-垃圾数据集-6561张图像带标签-纸张-混合的-餐厅快餐.zip
- 技术报告:大型语言模型在压力下战略欺骗用户的行为研究
- YOLO算法-水泥路面裂纹检测数据集-5005张图像带标签-裂纹.zip
- YOLO算法-垃圾数据集-568张图像带标签-纸张-纸箱-瓶子.zip
- YOLO算法-施工设备数据集-2000张图像带标签-装载机-挖掘机-平地机-移动式起重机-推土机-滚筒-哑巴卡车.zip
- 防火墙系统项目源代码全套技术资料.zip
- 西门子V90效率倍增-伺服驱动功能库详解-循环通信库 DRIVELib.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0