📄 12864_main.c
字号:
//--------------------------------------------------------------
//--管脚的分配关系:
//****************P27------LCD__RS------第4脚,并行的数据命令选择信号
//****************P26------LCD__RW------ 第5脚,并行的读写选择信号
//****************P25------LCD__E ------ 第6脚,并行的使能信号
//****************P24------LCD__PSB ---- 第15脚,并行接口选择信号
//****************P23------LCD__RST ---- 第17脚,复位信号
//****************P1^6-----I2C_SDA------ eeprom data line
//****************P1^7-----I2C_SDA------ eeprom clock line
/*2009年1月13日,eeprom 的时序完全好,不可修改 程序已经优化
*********************************************************************************
*********************************************************************************
*********************************************************************************
********************************************************************************/
#include "reg52.h"
#include "declare.h"
#include "stdio.h" //-----该函数中有把整数和字符连接在一起的函数
#include "key.h"
#include "communicate.h"
//----------------------------------------------------库函数定义
unsigned char xdata str1[20];
unsigned char xdata str2[20];
unsigned char xdata str3[20];
unsigned char xdata str4[20];
char set[]="设置";
char clr_set[] =" ";
char key_flag=0; //是否向eeprom里面写数据的判断条件
extern char select_t=0; //键盘功能选择
//extern unsigned int xdata RxBuf[30];
unsigned char total_t[4]={2,50,2,50};
unsigned char prodata[4]={0,0,0,0};
unsigned int bai[4]={0,0,0,0};
unsigned int shi[4]={0,0,0,0};
unsigned char cnt=20;//--------------------定时器计数-----------------
unsigned char a=0;
unsigned char send_flag=1;
//unsigned char ok1[]='S'; // use for test
//--------------------------------------------------------------------
//char count=0;
//extern uchar receive[6]={0};
void T0Initial();//------------------------T0定时初始化中断函数
void velocity_show(); //-----------------------显示设置参数
void read_eeprom();
void write_eeprom();
extern void process_data();
void evaluate();
//--------------------------------------------------------------------
sbit key_set=P1^2;
sbit key_add=P1^0;
sbit key_dec=P1^1;
sbit key_ok=P1^3; //-----------------------确定按键,同时也是串口发送数据标志
void main()
{
//char j;
//********************************************************************
init_timer1(); //串口初始化
LCD_init(); //lcd初始化
LCD_write_char( 0x01, 0 ); //LCD清屏
delay_nms(100);
PHOTO_DISP(TU_TAB1); //-------显示图形我的电脑
delay_nms(1000); //延迟--------一段时间
LCD_write_char( 0x01, 0 ); //清屏
delay_nms(100);
PHOTO_DISP(BIRD); //显示图形--自己画的
delay_nms(1300);
LCD_write_char( 0x01, 0 ); //清屏
T0Initial(); //--------------------------初始化T0-----------------
while(1)
{
Key_read (); //键盘扫描
process_data();
if(key_ok==0) //---确定
{
select_t=0; //----擦掉显示
//write_eeprom(); //写进eeprom
//TI=1; //----发送数据
send_flag=1;
}
switch(select_t)
{
case 1:
LCD_write_string(6,0,set);
LCD_write_string(6,1,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
break;
case 2:
LCD_write_string(6,1,set);
LCD_write_string(6,0,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
break;
case 3:
LCD_write_string(14,0,set);
LCD_write_string(6,0,clr_set);
LCD_write_string(6,1,clr_set);
LCD_write_string(14,1,clr_set);
break;
case 4:
LCD_write_string(14,1,set);
LCD_write_string(6,0,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(6,1,clr_set);
break;
case 0:
LCD_write_string(6,0,clr_set);
LCD_write_string(6,1,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
break;
default:
break;
}
//------------------------------------
velocity_show(); //LCD show function
//---------------------------------------------------------------------------------
}
}
//----------------LCD SHOW FUNCTION--------------------------------
void velocity_show()
{
//---Warning !!the data type of readI2C is very important ,
//----otherwise showing result is wrong, such as ,1 is like to be 256
// int i,j;
// i=
process_data();
sprintf(str1,"数据N1=%d%dms",(RxBuf[0]-0x30),(RxBuf[1]-0x30)); //串口传递的是ASCALL码,需要转换
// sprintf(str2,"t2延时=%d%dms",bai[1],shi[1]);
sprintf(str2,"数据N2=%d%dms",(RxBuf[2]-0x30),(RxBuf[3]-0x30));
// sprintf(str3,"t3进棉=%d%dms",bai[2],shi[2]);
sprintf(str3,"数据N3=%d%dms",(RxBuf[4]-0x30),(RxBuf[5]-0x30));
// sprintf(str4,"t4延时=%d%dms",bai[3],shi[3]);
sprintf(str4,"数据N4=%d%dms",(RxBuf[6]-0x30),(RxBuf[7]-0x30));
LCD_write_string(0,0,str1);
LCD_write_string(0,1,str2);
LCD_write_string(0,2,str3);
LCD_write_string(0,3,str4);
}
//---------------处理数据子函数-----------------------------------
extern void process_data()
{
unsigned char i;
for(i=0;i<4;i++)
{
//prodata[i]=(int)readI2c(i);
prodata[i]=total_t[i];
bai[i]=prodata[i]/10;
shi[i]=prodata[i]%10;
}
}
//----------------键盘程序----------------------------------
///---------------P1.0做加法-------------------
//----------------P1.1做减法-------------------
//----------------P1.2用求余的方法来选择T1,T2,T3,T4----------*/
void Key_read ()
{
P1=0XFF;
//delay_nms(10);
if(key_set==0) //------------选择T判断条件-----
{
//LCD_write_string(14,1,set);
select_t++;
delay_nms(10);
if(select_t>4) select_t=1;
}
//-------t1,t2,3,t4,递增条件P1=0XFE----------------------------------
if((key_add==0)&&(select_t==1))
{/*
LCD_write_string(6,1,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
delay_nus(5);*/
// LCD_write_string(6,0,set);
//delay_nus(5);
// total_t[0]++;
RxBuf[0]++;
//readI2c(0)++;
key_flag=1;
}
else if ((key_add==0)&&(select_t==2))
{/*
LCD_write_string(6,0,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
delay_nus(5);*/
// LCD_write_string(6,1,set);
//delay_nus(5);
// total_t[1]=50;
RxBuf[2]++;
key_flag=1;
}
else if ((key_add==0)&&(select_t==3))
{/*
LCD_write_string(6,0,clr_set);
LCD_write_string(6,1,clr_set);
LCD_write_string(14,1,clr_set);
delay_nus(5);*/
// LCD_write_string(14,0,set);
//delay_nus(5);
// total_t[2]++;
RxBuf[4]++;
key_flag=1;
}
else if ((key_add==0)&&(select_t==4))
{ /*
LCD_write_string(6,0,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(6,1,clr_set);
delay_nus(5);*/
// LCD_write_string(14,1,set);
//delay_nus(5);
// total_t[3]=50;
RxBuf[6]++;
key_flag=1;
}
//-------t1,t2,3,t4,递减条件P1=0XFE----------------------------------
if((key_dec==0)&&(select_t==1))
{/*
LCD_write_string(6,1,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
delay_nus(5); */
// LCD_write_string(6,0,set);
//delay_nus(5);
// total_t[0]--;
RxBuf[0]--;
key_flag=1;
}
else if ((key_dec==0)&&(select_t==2))
{ /*
LCD_write_string(6,0,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(14,1,clr_set);
delay_nus(5);*/
// LCD_write_string(6,1,set);
//delay_nus(5);
// total_t[1]=50;
RxBuf[2]--;
key_flag=1;
}
else if ((key_dec==0)&&(select_t%5==3))
{ /*
LCD_write_string(6,0,clr_set);
LCD_write_string(6,1,clr_set);
LCD_write_string(14,1,clr_set);
delay_nus(5);*/
// LCD_write_string(14,0,set);
//delay_nus(5);
// total_t[2]--;
RxBuf[4]--;
key_flag=1;
}
else if ((key_dec==0)&&(select_t%5==4))
{ /*
LCD_write_string(6,0,clr_set);
LCD_write_string(14,0,clr_set);
LCD_write_string(6,1,clr_set);
delay_nus(5); */
// LCD_write_string(14,1,set);
//delay_nus(5);
// total_t[3]=50;
RxBuf[6]--;
key_flag=1;
}
}
//------------------------T0定时器初始化函数-----------------------------
void T0Initial ()
{
TMOD |= 0x01;
TH0=0x3c;
TL0=0xb0;
IE |= 0x82;
TR0=1;
}
//-------------------------T0定时中断服务子函数---------------------------
void to_int() interrupt 1 using 0
{
TH0=0x3c;
TL0=0xb0;
cnt--;
if(cnt==0)
{
// cnt=20; //--1s
cnt=100; //--每5秒发送一次数据
if(send_flag==1)
{
TI=1; //----发送数据
a++;
//-----------------------------------------------------------------------------------
if(a>10) //----发送数据的次数,根据实际情况修改
//------------------------------------------------------------------------------------
{
a=0;
/* TI=0; --如果需要发送有限次,可在此处修改
send_flag=0;
*/
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -