📄 1.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define lcd_bus P0
#define key_bus P1
//tlc_5602
sbit sdata=P2^2;
sbit sclk=P2^1;
sbit load=P2^0;
//lcd
/*sbit rs=P2^5;
sbit rw=P2^6;
sbit e=P2^7;
uchar offset=0x80;
//uchar code tab[16]={0x41,0x42,0x43,0x44,0x33,0x36,0x39,0x23,0x32,0x35,0x38,0x30,0x31,0x34,0x37,0x2a};
//uchar code tab1[16]={'*','0','#','D','7','8','9','C','4','5','6','B','1','2','3','A'};
//uchar code tab2[16]={3,2,1,0,7,6,5,4,11,10,9,8,15,14,13,12};
uchar code table1[128] = {
64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,109,111,113,115,117,118,120,121,
123,124,125,126,126,127,127,127,127,127,127,127,126,126,125,124,123,121,120,118,
117,115,113,111,109,106,104,102,99,96,94,91,88,85,82,79,76,73,70,67,64,60,57,54,51,48,
45,42,39,36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,1,0,0,0,0,0,0,0,1,1,2,3,4,6,
7,9,10,12,14,16,18,21,23,25,28,31,33,36,39,42,45,48,51,54,57,60};
uchar code table[15]={0,0x30,0,0x2e,0x37,0x38,0x39,0,0x34,0x35,0x36,0,0x31,0x32,0x33};
uchar code num[11]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar code str1[]="boxingfashengqi";
uchar code str2[]="yunxingzhong";
uchar code str3[]="yunxingzhong:";
uchar code str4[]="A: fangbo"; //电压
uchar code str5[]="B: sanjiaobo"; //温度
uchar code str6[]="C: zhengxianbo"; //标定
uchar code str7[]="D: help";
uchar code str8[]="qingjiance";
uchar code he[]="*:OK #:UP(clear)";*/
/*uchar state=0;
void delay(uchar dy)
{
while(--dy);
} */
/*void delay2(uint t)
{
uint i;
while(t--)
{
/* 对于11.0592M时钟,约延时1ms */
// for (i=0;i<125;i++)
// {}
//}
//}
dac_tlc5620(uchar send_char)
{
uchar i;
load=1;
sclk=1;sdata=0;sclk=0; //
sclk=1;sdata=0;sclk=0; // SDATA选择通道
sclk=1;sdata=1;sclk=0; // SDATA 控制RNG 为1 加倍
for(i=0;i<8;i++)
{
sclk=1;
if(send_char&0x80) sdata=1;
else sdata=0;
sclk=0;
send_char=send_char<<1;
}
load=0;
load=1;
}
/**********判断忙标志,返回的是一个位BF**********/
/*bit lcd_busy(void)
{
uchar bflag;
rs=0;
rw=1;
_nop_();
e=1;
_nop_();
lcd_bus=0xff;
bflag=lcd_bus;
e=0;
return(bit)(bflag&0x80); //BF=1 busy
}*/
/*********写命令,有两个参数,第一个是要写的命令控制字,
第二个是用来控制是否进行忙标志的判断。
busyflag=1:判断;为 0:不判断****************/
/*void lcd_wrcmd(uchar cmd)
{
while(lcd_busy());
lcd_bus=cmd;
rs=0;
rw=0;
_nop_();
e=1;
_nop_();
_nop_();
e=0;
}*/
/************向液晶片写数据***************/
/*void lcd_wrdata( uchar lcddata)
{
while(lcd_busy());
lcd_bus=lcddata;
rs=1;
rw=0;
_nop_();
e=1;
_nop_();
_nop_();
e=0;
}*/
/****************初始化***************/
/*void lcd_ini(void)
{
lcd_wrcmd(0x38);
delay(100);
lcd_wrcmd(0x0c);
delay(100);
lcd_wrcmd(0x06);
delay(100);
lcd_wrcmd(0x01);
delay(100);
}*/
/*****************读按键***************/
/*uchar getkey()
{
uchar keycode=0xff,temp,i;
key_bus=0x0f;
temp=key_bus&0x0f;
if(temp!=0x0f) //有键按下
{
// beep=0;
key_bus=0x7f;
for(i=0;i<4;i++)
{
temp=key_bus&0x0f;
if(temp==0x07)
{
keycode=i*4;
break;
}
else if(temp==0x0b)
{
keycode=i*4+1;
break;
}
else if(temp==0x0d)
{
keycode=i*4+2;
break;
}
else if(temp==0x0e)
{
keycode=i*4+3;
break;
}
key_bus=(key_bus>>1)|0x80;
}
while((key_bus&0x0f)!=0x0f) //等待释放
{
key_bus=0x0f;
}
// beep=1;
}
return keycode;
//return tab2[keycode];
}
welcome()
{
uchar temp,i;
lcd_wrcmd(0x0c);
lcd_wrcmd(0x80);
for(i=0;i<15;i++)
lcd_wrdata(str1[i]);
// lcd_h();
lcd_wrcmd(0xc1);
lcd_wrdata('L'); lcd_wrdata('I');lcd_wrdata('G');lcd_wrdata('A');lcd_wrdata('O');lcd_wrdata('Y');lcd_wrdata('A');
// lcd_wrdata(0);
//lcd_wrdata('0');lcd_wrdata('7');
// lcd_wrdata(1);
while(1)
{
temp=getkey();
if(temp!=0xff) //按任意键跳转
{
state=1;
// lcd_wrcmd(1);
break;
}
}
}
/*
fangbo(uchar height,uchar time1,time2)
{
uchar i,k;
/* uchar i,k; // 假如将cnt定义成全局变量,当退出这个界面时,cnt仍然保存原来的值
lcd_wrcmd(0x80); //会出现光标乱跳的错误
for(i=0;i<15;i++)lcd_wrdata(str2[i]);
lcd_wrcmd(0xc0);
for(i=0;i<10;i++)lcd_wrdata(str8[i]);
while(1) //按键处理
{
i=getkey();
if(i==2)
{
state=1;
break;
}
else
{
while(1)
{ for(k=0;k<time1;i++)
{
dac_tlc5620(height);
delay2(1);
}
for(k=0;k<time2;i++)
{
dac_tlc5620(0);
delay2(1);
}
// }
}
}*/
sanjiao()
{
uchar i;
while(1)
{for(i=0;i<255;i++)
dac_tlc5620(i);
for(i=255;i>0;i--)
dac_tlc5620(i);
}
}
/* sanjiaobo(uchar height,uchar time)
{
uchar i,ii,j;
lcd_wrcmd(1);
lcd_wrcmd(0x0c);
lcd_wrcmd(0x80);
for(i=0;i<15;i++) lcd_wrdata(str2[i]);
lcd_wrcmd(0xc0);
for(i=0;i<12;i++) lcd_wrdata(str8[i]);
while(1)
{
ii=getkey();
if(ii==2)
{
state=1;
break;
}
else
{ for(i=0;i<height;i++)
{ for(j=0;j<time/2;j++)
dac_tlc5620(height);
}
for(i=height;i>0;i--)
{ for(j=0;j<time/2;j++)
dac_tlc5620(height);
}
}
}
}
zhengxianbo(void)
{
uchar i; // 假如将cnt定义成全局变量,当退出这个界面时,cnt仍然保存原来的值
lcd_wrcmd(0x80); //会出现光标乱跳的错误
lcd_wrcmd(0x81);
for(i=0;i<12;i++)lcd_wrdata(str2[i]);
lcd_wrcmd(0x0c);
lcd_wrcmd(0xc0);lcd_wrdata(str8[i]);
while(1) //按键处理
{
i=getkey();
if(i==2)
{
state=1;
break;
}
else
{
for(i=0;i<128;i++)
dac_tlc5620(table1[i]); //table1[i]=64+sin[(2π/128)*i]
delay(200);
}
}
}
////////////////////////////////////////////////////////////////////////////////////
menu()
{
uchar i,ii,cnt=1;
lcd_wrcmd(0x83);
for(i=0;i<10;i++)
lcd_wrdata(str4[i]);
lcd_wrcmd(0xc3);
i=0;
while(str5[i]!='\0')
{
lcd_wrdata(str5[i]);
i++;
}
lcd_wrcmd(0x80);
lcd_wrdata('-');
lcd_wrdata('>');
while(1)
{
ii=getkey();
///////////////////////////翻屏///////////////////////////////
if(ii==2)
{ cnt++;
if(cnt==5) cnt=1;
if(cnt==1)
{
//////////////////////
// ->1: FREQENCY
// 2: PHASE
/////////////////////
lcd_wrcmd(1);//clear
lcd_wrcmd(0x83); //frequency
for(i=0;i<10;i++)
lcd_wrdata(str4[i]);
lcd_wrcmd(0xc3); //phase
i=0;
while(str5[i]!='\0')
{
lcd_wrdata(str5[i]);
i++;
}
lcd_wrcmd(0x80);
lcd_wrdata('-');
lcd_wrdata('>');
}
else if(cnt==2)
{
//////////////////////
// 1: FREQENCY
// ->2: PHASE
/////////////////////
lcd_wrcmd(1);//clear
lcd_wrcmd(0x83); //frequency
for(i=0;i<10;i++)
lcd_wrdata(str4[i]);
lcd_wrcmd(0xc3); //phase
i=0;
while(str5[i]!='\0')
{
lcd_wrdata(str5[i]);
i++;
}
lcd_wrcmd(0xc0);
lcd_wrdata('-');
lcd_wrdata('>');
}
else if(cnt==3)
{
//////////////////////
// 2: PHASE
// -> 3: Amplitude
/////////////////////
lcd_wrcmd(1);
lcd_wrcmd(0xc3); //Amplitude
for(i=0;i<8;i++)
lcd_wrdata(str6[i]);
lcd_wrcmd(0x83);
i=0;
while(str5[i]!='\0') //phase
{
lcd_wrdata(str5[i]);
i++;
}
lcd_wrcmd(0xc0);
lcd_wrdata('-');
lcd_wrdata('>');
}
else if(cnt==4)
{
//////////////////////
// 3: Amplitude
// -> 4: HELP
/////////////////////
lcd_wrcmd(1);
lcd_wrcmd(0x83); //setting
for(i=0;i<8;i++)
lcd_wrdata(str6[i]);
lcd_wrcmd(0xc3);
for(i=0;i<7;i++)
lcd_wrdata(str7[i]); //help
lcd_wrcmd(0xc0);
lcd_wrdata('-');
lcd_wrdata('>');
}
}
/////////////////////////OK进入///////////////////////////////////////
else if(ii==0)
{
if(cnt==1)
{
state=2;
lcd_wrcmd(1);
break;
}
else if(cnt==2)
{
state=3;
lcd_wrcmd(1);
break;
}
else if(cnt==3)
{
state=4;
lcd_wrcmd(1);
break;
}
else if(cnt==4) //help
{
state=5;
lcd_wrcmd(1);
break;
}
}
////////////////////////快捷键///////////////////////////////////////////
else if(ii==15)
{
state=2;
lcd_wrcmd(1);
break;
}
else if(ii==11)
{
state=3;
lcd_wrcmd(1);
break;
}
else if(ii==7)
{
state=4;
lcd_wrcmd(1);
break;
}
else if(ii==3)
{
state=5;
lcd_wrcmd(1);
break;
}
}
}
help()
{
uchar i,ii;
lcd_wrcmd(0x80);
for(i=0;i<16;i++)
{
lcd_wrdata(he[i]);
}
while(1)
{
ii=getkey();
if(ii!=0xff)
{
lcd_wrcmd(1);
state=1;
break;
}
}
}*/
main()
{
/* lcd_bus=0xff;
lcd_ini();*/
sanjiao();
/* while(1)
{
if(state==0)welcome();
else if(state==1)menu();
else if(state==2)
else if(state==3)sanjiaobo(200,20);
else if(state==4)zhengxianbo();
else if(state==5)help();
}*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -