#include"stdio.h"
#include"absacc.h"
#include"reg51.h"
#include "intrins.h"
#include"lcd11.h"
#define EEPROM_ADDR 0xa0
unsigned long parameter_data[110];
unsigned char menuid;
sbit SDA=P3^6;
sbit SCL=P3^7;
bit ack;
void Start_I2c();
void Stop_I2c();
void SendByte(unsigned char c);
unsigned char RcvByte();
void Ack_I2c(bit a);
bit ISendByte(unsigned char sla,unsigned char c);
bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);
bit ISendStrBYTE(unsigned char sla,unsigned char suba,unsigned char s);
bit IRcvByte(unsigned char sla,unsigned char *c);
bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no);
bit IRcvStrBYTE(unsigned char sla,unsigned char suba,unsigned char *s);
bit parameter_write(unsigned char i2c_addr,unsigned char menuid_num);
bit parameter_read(unsigned char i2c_addr,unsigned char menuid_num);
struct KEY_DATA_STRUCT Key_scan_struct;
void delay(unsigned char ms)
{
while(ms--);
}
void Trans_74hc164(unsigned char key_value)
{
unsigned char temp;
unsigned char j;
temp=key_value;
for(j=0;j<8;j++)
{
if(temp&0x01)
{
VRXD=1;
VTXD=0;
VTXD=1;
}
else{
VRXD=0;
VTXD=0;
VTXD=1;
}
temp=temp>>1;
}
}
void key_scan_init(void)
{
unsigned char i;
for(i=0;i<4;i++)
{
Key_scan_struct.key_data[i]=0;
}
Key_scan_struct.key_num=0;
for(i=0;i<24;i++)
{
Key_scan_struct.key_flag[i].up_down_flag=0;
Key_scan_struct.key_flag[i].zhixing_flag=0;
}
}
void key_flag_update(unsigned char key_num,unsigned char flag) //当检测到键按下时把键值的按下和执行标志更新。
{
unsigned char temp;
temp=flag;
if(temp!=0) //如果按下了。
{ switch(Key_scan_struct.key_flag[key_num].up_down_flag)
{
case 0:
Key_scan_struct.key_flag[key_num].up_down_flag=1; //如果上次检测没按下,这次检测到按下,标志设置为消抖阶段。
break;
case 1:
Key_scan_struct.key_flag[key_num].up_down_flag=2; //如果上次检测到按下但为消抖阶段,这次检测到按下,标志设置为按下并且执行标志清0。
Key_scan_struct.key_flag[key_num].zhixing_flag=0;
break;
case 2:
Key_scan_struct.key_flag[key_num].up_down_flag=2; //如果上次检测到按下,这次检测到按下,标志还设置为按下。
break;
default:
break;
}
}else{ //没按下
Key_scan_struct.key_flag[key_num].up_down_flag=0;
Key_scan_struct.key_flag[key_num].zhixing_flag=0;
}
}
unsigned char find_key(void) //程序里查找健值的函数,如果键值数量大于4,返回错误标志0,正常返回1。
{ unsigned char m;
unsigned char n=0;
Key_scan_struct.key_num=0;
for(m=0;m<24;m++)
{
if((Key_scan_struct.key_flag[m].up_down_flag==2)&&(Key_scan_struct.key_flag[m].zhixing_flag==0))
{
if(Key_scan_struct.key_num>=4)
break;
Key_scan_struct.key_data[n++]=m;
Key_scan_struct.key_num++; //键值数量增加1;
}
}
return(Key_scan_struct.key_num); //返回键盘 数量;
}
void LCD_Command(unsigned char nCommand)
{
unsigned char i;
A0=0;
RW=0;
E1=1;
DATA=nCommand;
i=TIME;
while(--i);
E1=0;
i=TIME;
while(--i);
A0=0;
RW=0;
E2=1;
DATA=nCommand;
i=TIME;
while(--i);
E2=0;
i=TIME;
while(--i);
}
void LCD_SetRam(unsigned char bChip,unsigned char ndata)
{
unsigned char i;
A0=1;
RW=0;
if(bChip==1)
{
E1=1;
DATA=ndata;
i=TIME;
while(--i);
E1=0;
i=TIME;
while(--i);
}
else
{
E2=1;
DATA=ndata;
i=TIME;
while(--i);
E2=0;
i=TIME;
while(--i);
}
}
void LCD_Init()
{
LCD_Reset();
LCD_ON();
LCD_Select32();
LCD_StaticOFF();
LCD_SetStartLine(0);
LCD_ADC(0);
LCD_SetPage(0);
LCD_SetColumn(0);
LCD_EndRW();
}
void LCD_ZM_Out(unsigned char chip,unsigned char row,unsigned char col,unsigned char *hz_font)
{
unsigned char i;
switch(row)
{
case 1:
LCD_SetColumn(col);
LCD_SetPage(0);
for(i=0;i<8;i++)
{
LCD_SetRam(chip,hz_font[i]);
}
LCD_SetColumn(col);
LCD_SetPage(1);
for(i=0;i<8;i++)
{
LCD_SetRam(chip,hz_font[i+8]);
}
break;
case 2:
LCD_SetColumn(col);
LCD_SetPage(2);
for(i=0;i<8;i++)
{
LCD_SetRam(chip,hz_font[i]);
}
LCD_SetColumn(col);
LCD_SetPage(3);
for(i=0;i<8;i++)
{
LCD_SetRam(chip,hz_font[i+8]);
}
break;
default:
break;
}
}
unsigned char *GetTextFont(unsigned char index)
{
static unsigned char Font[16];
unsigned char i;
for(i=0;i<16;i++)
Font[i]=ASCII[index][i];
return Font;
}
unsigned char GetIndex(unsigned char szText)
{
unsigned char code TAB[]={
'0','1','2','3','4','5','6','7','8','9',' ','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x','y','z',
'=','!','@','#','$','%','^','&','*','(',')',
'[',']','{','}',':','<','>','?'
};
unsigned char i;
for(i=0;;i++) if(szText==TAB[i]) return i;
return 0x00;
}
void LCD_number_out(unsigned char chip,unsigned char row,unsigned char col,unsigned long number)
{
unsigned char *Text,col_temp;
unsigned char i,flag,num_buf[4]; /* num_buf[]依次存放千,百,十,个? */
col_temp=col;
flag=0;
num_buf[0]=number/1000;
num_buf[1]=(number%1000)/100;
num_buf[2]=((number%1000)%100)/10;
num_buf[3]=((number%1000)%100)%10;
for(i=0;i<4;i++)
{
if(num_buf[i]==0)
if(flag==0)
{
Text=GetTextFont(10); /*第10项士崭瘛?*/
LCD_ZM_Out(chip,row,col_temp,Text);
col_temp+=8;
}
else
{
Text=GetTextFont(0);
LCD_ZM_Out(chip,row,col_temp,Text);
col_temp+=8;
}
else
{
Text=GetTextFont(num_buf[i]);
LCD_ZM_Out(chip,row,col_temp,Text);
col_temp+=8;
flag=1;
}
}
}
void LCD_number_only_out(unsigned char chip,unsigned char row,unsigned char col,unsigned long number)
{
unsigned char *Text;
if((number>=0)&(number<=9))
{
Text=GetTextFont(number);
LCD_ZM_Out(chip,row,col,Text);
}
}
void LCD_number_only_clr(unsigned char chip,unsigned char row,unsigned char col)
{
unsigned char *Text;
Text=GetTextFont(10);
LCD_ZM_Out(chip,row,col,Text);
}
void Printf(unsigned char chip,unsigned char row,unsigned char col,unsigned char *szText)
{
unsigned char *Text;
while(*szText)
{
Text=GetTextFont(GetIndex(*szText));
LCD_ZM_Out(chip,row,col,Text);
szText++;
col+=8;
}
}
void LCD_HZ_Out(unsigned char chip,unsigned char row,unsigned char col,unsigned char *hz_font)//汉字显示
{
unsigned char i;
//row:共分两行,1为 第一行,2为二行,col:为这行个譥font:h这个字的32个//字//
unsigned char chip_select;
chip_select=chip;
switch(row)
{
case 1:
LCD_SetColumn(col);
LCD_SetPage(0);
for(i=0;i<12;i++)
{
LCD_SetRam(chip_select,hz_font[i]);
}
LCD_SetColumn(col);
LCD_SetPage(1);
for(i=0;i<12;i++)
{
key-eeprom-lcd.rar_EEPROM LCD_LCD key_pdff
版权申诉
57 浏览量
2022-09-24
12:46:28
上传
评论
收藏 9KB RAR 举报
局外狗
- 粉丝: 67
- 资源: 1万+
最新资源
- 基于Java和Javascript的工程建设综合管理系统材料管理模块设计源码 - material
- c51_2_2.c
- ASCII American Standard Code for Information Interchange
- 一个chm格式的 SQL 函数手册-SQL语言手册文档
- 计算当前月份的天数和剩余天数
- 基于ARM的指令调度和延迟分支
- 基于Vue和TypeScript的极简聊天应用设计源码 - HasChat
- 基于Vue2全家桶和Zcool数据的图片收集网站设计源码 - cool-picture
- 基于C和C++的二维绘制工具设计源码 - DrawPro
- Object.defineProperty 的 IE 补丁object-defineproperty-ie-master.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈