📄 kongwen.c
字号:
lcd_en1_lach=1;
delay_time(10);
P7=0x04; //7 6 5 4
delay_time(10);
lcd_en1_lach=0;
}
void set_point_cmd(unsigned char id,unsigned char s)
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=4+id*2+s; //7 6 5 4
delay_time(10);
lcd_en1_lach=0;
}
void lcd_swich(unsigned char d,unsigned char c,unsigned char b)//D=1;整体显示ON C=1;游标ON B=1;游标位置ON 后3位
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(2);
P7=8+d*4+c*2+b;
delay_time(10);
lcd_en1_lach=0;
}
void lcd_cursor_dis(unsigned char sc,unsigned char rl)//设定游标的移动与显示的移位控制位元;这个指令并不改变DDRAM的内容
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=16+sc*8+rl*4; //8 4 0
delay_time(10);
lcd_en1_lach=0;
}
void cmd_set(unsigned char aa)//功能:DL=1(必须设为1) RE=1;扩充指令集动作 RE=0:基本指令集动作
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
if(aa)
{
P7=0x34;
}
else
{
P7=0x30;
}
delay_time(10);
lcd_en1_lach=0;
}
void set_cgram(unsigned char address)//功能:设定CGRAM位址到位址计数器(AC)
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=(64+address);
delay_time(10);
lcd_en1_lach=0;
}
void set_ddram(unsigned char address)//设定DDRAM地址到地址计数器(AC)
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=address;
delay_time(10);
lcd_en1_lach=0;
}
unsigned char read_busy_flag(void)//功能:读取忙碌状态(BF)可以确认内部动作是否完成
{
unsigned char temp=0;
lcd_data1_cmd=0; //command rs
lcd_r1w=1; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
temp=P7;
delay_time(10);
lcd_en1_lach=0;
if((temp&0x80)==0x80)//功能:读取忙碌状态(BF)可以确认内部动作是否完成,
{
return 1;
}
else
{
return 0;
}
}
unsigned char read_add_count(void)//读取同时可以读出位址计数器(AC)的值
{
unsigned char temp=0;
lcd_data1_cmd=0; //command rs
lcd_r1w=1; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
temp=P7;
delay_time(10);
lcd_en1_lach=0;
temp=temp&0x7f;
return temp;
}
void write_ram(unsigned char temp_data)//写入资料到内部的RAM(DDRAM/CGRAM/IRAM/GDRAM)
{
lcd_data1_cmd=1; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=temp_data;
delay_time(10);
lcd_en1_lach=0;
}
unsigned char read_ram(void)//从内部RAM读取资料(DDRAM/CGRAM/IRAM/GDRAM)
{
unsigned char temp_data=0;
lcd_data1_cmd=1; //command rs
lcd_r1w=1; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
temp_data=P7;
delay_time(10);
lcd_en1_lach=0;
return temp_data;
}
void wait_order(void) //将DDRAM填满"20H",并且设定DDRAM的地址计数器(AC)到"00H"
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=0x01;
delay_time(10);
lcd_en1_lach=0;
}
void irram_curl(unsigned char temp)//SR=1:SR=0:
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
if(temp)//功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出位址计数器(AC)的值
{
P7=0x03; //允许输入垂直卷动地址
}
else
{
P7=0x02; //允许输入IRAM地址
}
delay_time(10);
lcd_en1_lach=0;
}
void reverse_video(unsigned char row)//选择4行中的任一行作反白显示,并可决定反白与否
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=(4+row);
delay_time(10);
lcd_en1_lach=0;
}
void set_shutdowm(unsigned char aa)//SL=1:脱离睡眠模式SL=0:进入睡眠模式
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
if(aa)//
{
P7=0x0c; //
}
else
{
P7=0x08; //
}
delay_time(10);
lcd_en1_lach=0;
}
void expend_cmd(unsigned char re,unsigned char g)//RE=1: 扩充指令集动作RE=0: 基本指令集动作
{
//G=1 :绘图显示ON G=0 :绘图显示OFF
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=48+4*re+g*2; //
delay_time(10);
lcd_en1_lach=0;
}
void set_irram_address(unsigned char address)//SR=1:AC5-AC0为垂直卷动地址SR=0:AC3-AC0为ICON IRAM地址
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=64+address; //
delay_time(10);
lcd_en1_lach=0;
}
void set_plot_address(unsigned char address)//设定CGRAM地址到地址计数器(AC)
{
lcd_data1_cmd=0; //command rs
lcd_r1w=0; //data write rw
delay_time(10);
lcd_en1_lach=1;
delay_time(10);
P7=128+address; //
delay_time(10);
lcd_en1_lach=0;
}
void lcd_init(void)
{
cmd_set(0); //选择基本指令
lcd_clear();
lcd_bit_add_reset();
set_point_cmd(1,0);
lcd_swich(1,1,1);//D=1;整体显示ON C=1;游标ON B=1;游标位置ON 后3位
}
void FLASH_ByteWrite (FLADDR addr, char byte, bit SFLE)
{
bit EA_SAVE = EA; // preserve EA
char xdata * data pwrite; // FLASH write pointer
EA = 0; // disable interrupts
pwrite = (char xdata *) addr;
FLSCL |= 0x01; // enable FLASH writes/erases
PSCTL |= 0x01; // PSWE = 1
if (SFLE) {
PSCTL |= 0x04; // set SFLE
}
*pwrite = byte; // write the byte
if (SFLE) {
PSCTL &= ~0x04; // clear SFLE
}
PSCTL &= ~0x01; // PSWE = 0
FLSCL &= ~0x01; // disable FLASH writes/erases
EA = EA_SAVE; // restore interrupts
}
//-----------------------------------------------------------------------------
// FLASH_ByteRead
//-----------------------------------------------------------------------------
//
// This routine reads a <byte> from the linear FLASH address <addr>.
//
unsigned char FLASH_ByteRead (FLADDR addr, bit SFLE)
{
bit EA_SAVE = EA; // preserve EA
char code * data pread; // FLASH read pointer
unsigned char byte;
EA = 0; // disable interrupts
pread = (char code *) addr;
if (SFLE) {
PSCTL |= 0x04; // set SFLE
}
byte = *pread; // read the byte
if (SFLE) {
PSCTL &= ~0x04; // clear SFLE
}
EA = EA_SAVE; // restore interrupts
return byte;
}
//-----------------------------------------------------------------------------
// FLASH_PageErase
//-----------------------------------------------------------------------------
//
// This routine erases the FLASH page containing the linear FLASH address
// <addr>.
//
void FLASH_PageErase (FLADDR addr, bit SFLE)
{
bit EA_SAVE = EA; // preserve EA
char xdata * data pwrite; // FLASH write pointer
EA = 0; // disable interrupts
pwrite = (char xdata *) addr;
FLSCL |= 0x01; // enable FLASH writes/erases
PSCTL |= 0x03; // PSWE = 1; PSEE = 1
if (SFLE) {
PSCTL |= 0x04; // set SFLE
}
*pwrite = 0; // initiate page erase
if (SFLE) {
PSCTL &= ~0x04; // clear SFLE
}
PSCTL &= ~0x03; // PSWE = 0; PSEE = 0
FLSCL &= ~0x01; // disable FLASH writes/erases
EA = EA_SAVE; // restore interrupts
}
float get_real_value(unsigned char temp)
{
unsigned char i=0;
for(i=0;i<temp;i++)
{
real_value[0]=get_voltage();
real_value[1]=real_value[1]+real_value[0]/(temp);
}
}
float get_real_res(unsigned char temp)
{
unsigned char i=0;
for(i=0;i<temp;i++)
{
real_value[0]=get_bo_res();
real_value[1]=real_value[1]+real_value[0]/(temp);
}
return real_value[1];
}
float get_real_res_value(unsigned int temp)
{
unsigned char i=0;
float xdata res1=0.0,res2=0.0;
for(i=0;i<temp;i++)
{
res1=get_bo_res();
res2=res2+res1;
}
res2=res2/temp;
return res2;
}
void lcd_display(unsigned char page)
{
switch(page)
{
case 1:
{
lcd_clear();
set_ddram(0x80);
data_tx=" 欢迎使用";
send_lcd_data(data_tx);
set_ddram(0x90);
data_tx=" 科德威平轧机";
send_lcd_data(data_tx);
set_ddram(0x88);
data_tx=" 客服电话";
send_lcd_data(data_tx);
set_ddram(0x98);
data_tx=" 13904616864";
send_lcd_data(data_tx);
lcd_swich(1,0,0); //D=1;整体显示ON C=1;游标ON B=1;游标位置ON 后3位
}
break;
case 2:
{
lcd_clear();
set_ddram(0x80);
data_tx=" 当前控制参数";
send_lcd_data(data_tx);
set_ddram(0x88);
data_tx=" 钳口1:200.0 度";
send_lcd_data(data_tx);
set_ddram(0x98);
data_tx=" 钳口2:200.0 度";
send_lcd_data(data_tx);
lcd_swich(1,0,0); //D=1;整体显示ON C=1;游标ON B=1;游标位置ON 后3位
}
break;
}
}
void set_v_out(unsigned int voltage)
{
unsigned long temp_data=0;
unsigned int temp_dac=0;
if(voltage<2300)
{
temp_data=(unsigned long)voltage*836/1000;
}
else if(voltage<=3200)
{
temp_data=(unsigned long)voltage*1195/1000-812;
}
else
{
temp_data=(unsigned long)voltage*836/1000;
}
DAC0=(temp_data<<4);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -