//***************************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);
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
rjjm.rar (55个子文件)
www.pudn.com.txt 218B
人机界面系统设计
WSTLCD.dp2 267B
RTC.lis 50KB
PS2ICC.mak 590B
PS2ICC.mp 5KB
PS2ICC.dbg 13KB
PS2ICC.prj 886B
RTC._h 6KB
PS2.o 22KB
PS2.lis 78KB
PS.o 52KB
PS2-ICC.mp 4KB
PS2ICC.lst 72KB
Encode.h 931B
WSTLCD.o 24KB
Encode._h 4KB
WSTLCD.i 0B
PS2-ICC.cof 11KB
Rtc._c 7KB
PS.lis 188KB
WSTLCD.lis 82KB
Ps._c 19KB
PS2-ICC.lst 27KB
Ps2-icc.src 74B
Ps.c 19KB
Ps2icc.c 379B
main.dp2 110B
PS2ICC.o 24KB
PS.dp2 162B
PS2ICC.lis 82KB
PS2.s 33KB
RTC.s 6KB
PS2ICC.hex 18KB
PS2ICC.cof 20KB
PS2.dp2 114B
PS2-ICC.mak 238B
Zimo._h 19KB
RTC.dp2 57B
PS2ICC.i 0B
PS2.i 0B
Ps2icc.src 57B
PS2ICC.dp2 267B
Zimo.h 20KB
RTC.i 6KB
PS.s 81KB
PS2ICC.s 32KB
Lcd._h 4KB
PS2-ICC.lk 6B
PS2ICC.lk 7B
main.i 0B
Lcd.h 4KB
WSTLCD.s 32KB
Ps2._c 7KB
Wstlcd._c 667B
PS2-ICC.dbg 8KB
共 55 条
- 1
weixin_42651887
- 粉丝: 94
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Lgtaxian - 副本.mac
- ubuntu-22.04.5-desktop-amd64.iso.torrent
- 软考软件设计师考试笔记改进版
- 华硕主板BIOS关闭secure boot安全启动设置方法
- Kylin-Server-V10-SP3-General-Release-2303-ARM64.iso
- I219-V网卡驱动windows server适用
- php期末作业php+mysql+html期末作业聊天网站聊天室系统
- H3C驱动FocalTech-FocalFP-A02-v2.0.3.83-0-30005-0
- windows字体Fonts
- win11字体包,误删除字体的可以直接拷贝安装
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0