📄 usermain.c
字号:
// design by jeffery chen
#include "FS7805.h"
#include "FS7805Regs.h"
#include "user_main.h"
#include "intrins.h"
#include "math.h"
#define da_sclk P1_5
#define da_sync P1_7
#define da_din P1_6
#define uchar unsigned char
#define nop _nop_()
#define uint unsigned int
#define ulong unsigned long
#define DB0_DB7 P3
void delay100us(unsigned);
void delay10ms(int count);
void write_LCD_command(unsigned);
void write_LCD_data(unsigned);
void init_LCD(void);
void clear_LCD(void);
void gotoxy(unsigned,unsigned);
void displaylcd(char *p);
void welcome();
void mainmenu();
void set_zx_t();
void set_zx_v();
int flagbx=0;
void da_write(unsigned int data_buf);
void delay2ms();
void runzx();
void da_sin(double V,ulong T);
void da_fansin(double V,ulong T);
void da_juchi(double V,ulong T);
void da_tri(double V,ulong T);
void da_sqr(double V,ulong T);
sbit RS=P2^2;
sbit RW=P2^1;
sbit E=P2^0;
uchar code tablewelcome[]={"Designed by Xie Yingjie SHNU"};
uchar code tablemainmenu[]={"zx:1 bzx:2 sj:3 jc:4 fb:5"};
uchar table_zx_t[]={"0000000 T/us set V:A return:B"};
uchar table_zx_v[]={"0000 V/mv run:A return:B"};
void usermain()
{
init_LCD();
clear_LCD();
welcome();
}
void delay100us(unsigned n)
{
unsigned char i, j;
for(i=0; i<n; i++)
for(j=0; j<124; j++)
;
}
void delay10ms(int count)
{
int i,j,k;
for(i=0;i<count;i++)
for(j=0;j<10;j++)
for(k=0;k<70;k++)
;
}
void write_LCD_command(unsigned command)
{
RS=0;
RW=0;
E=1;
DB0_DB7=command;
delay100us(20);
E=0;
}
void write_LCD_data(unsigned LCDdata)
{
RS=1;
RW=0;
E=1;
DB0_DB7=LCDdata;
delay100us(20);
E=0;
}
void init_LCD(void)
{
write_LCD_command(0x38);//0x38
write_LCD_command(0x0c);//0x0c
write_LCD_command(0x06);//0x06
}
void clear_LCD()
{
write_LCD_command(0x01);//clear the port
write_LCD_command(0x02);
}
void gotoxy(unsigned x,unsigned y)
{
if(x==1)
write_LCD_command(128+y);
else
write_LCD_command(192+y);
}
void displaylcd(char *p)
{
int i=0;
// p=tablef2[];
while(*p)
{
// if(i<=16)
// {
write_LCD_data(*p);
p++;
i++;
if(i==16)
{
gotoxy(2,0);
}
// }
}
}
//==============================================================================================================================================
void welcome()
{
uchar j=1;
char key=0x00;
char key1=0x00;
flagbx=0;
clear_LCD();
displaylcd(tablewelcome);
write_LCD_command(0x02);
write_LCD_command(0x0c);
while(1)
{
delay10ms(10);
P0=0xF0;
key=P0;
delay10ms(10);
P0=0x0F;
key1=P0;
delay10ms(10);
key=key|key1;
delay10ms(10);
while(j)
{
if(P0==0xf0||P0==0x0f)
{
j=0;
}
}
j=1;
// if(key!=0x00)
// {
switch(key)
{
case 0xBB:
mainmenu(); //A
break;
default:
break;
}
// key=0x00;
delay10ms(50);
// }
}
}
void mainmenu()
{
uchar j=1;
char key=0x00;
char key1=0x00;
flagbx=0;
clear_LCD();
displaylcd(tablemainmenu);
write_LCD_command(0x02);
write_LCD_command(0x0c);
while(1)
{
P0=0xF0;
key=P0;
delay10ms(10);
P0=0x0F;
key1=P0;
delay10ms(10);
key=key|key1;
delay10ms(10);
while(j)
{
if(P0==0xf0||P0==0x0f)
{
j=0;
}
}
j=1;
// if(key!=0xff)
// {
switch(key)
{
case 0xED: //1
flagbx=1;
set_zx_t();
break;
case 0xEB: //2
flagbx=2;
set_zx_t();
break;
case 0xE7: //3
flagbx=3;
set_zx_t();
break;
case 0xDE: //4
flagbx=4;
set_zx_t();
break;
case 0xDD: //5
flagbx=5;
set_zx_t();
break;
default:
break;
}
// key=0x00;
delay10ms(50);
// }
}
}
void set_zx_t()
{
bit k=0;
bit allow=1;
uchar count=0;
uchar number=0;
bit j=1;
char key=0x00;
char key1=0x00;
clear_LCD();
displaylcd(table_zx_t);
write_LCD_command(0x02);
write_LCD_command(0x0f);
while(1)
{
delay10ms(10);
P0=0xF0;
key=P0;
delay10ms(10);
P0=0x0F;
key1=P0;
delay10ms(10);
key=key|key1;
delay10ms(10);
while(j)
{
if(P0==0xf0||P0==0x0f)
{
j=0;
}
}
j=1;
switch(key)
{
case 0xEE: //0
number='0';
k=1;
break;
case 0xED: //1
number='1';
k=1;
break;
case 0xEB: //2
number='2';
k=1;
break;
case 0xE7: //3
number='3';
k=1;
break;
case 0xDE: //4
number='4';
k=1;
break;
case 0xDD: //5
number='5';
k=1;
break;
case 0xDB: //6
number='6';
k=1;
break;
case 0xD7: //7
number='7';
k=1;
break;
case 0xBE: //8
number='8';
k=1;
break;
case 0xBD: //9
number='9';
k=1;
break;
case 0xBB:
set_zx_v(); //A
break;
case 0xB7: //B
mainmenu();
break;
case 0x7E:
set_zx_t(); //C
break;
case 0x7D: //d
break;
case 0x7B: //E
break;
case 0x77: //F
break;
default:
break;
}
if(k==1)
{
if(allow==1)
{
table_zx_t[count]=number;
write_LCD_data(table_zx_t[count]);
count++;
if(count>6)
{
allow=0;
write_LCD_command(0x0C);
}
}
k=0;
}
delay10ms(50);
}
}
void set_zx_v()
{
bit k=0;
bit allow=1;
bit j=1;
char key=0x00;
char key1=0x00;
uchar count=0;
uchar number=0;
clear_LCD();
displaylcd(table_zx_v);
write_LCD_command(0x02);
write_LCD_command(0x0f);
while(1)
{
delay10ms(10);
P0=0xF0;
key=P0;
delay10ms(10);
P0=0x0F;
key1=P0;
delay10ms(10);
key=key|key1;
delay10ms(10);
while(j)
{
if(P0==0xf0||P0==0x0f)
{
j=0;
}
}
j=1;
switch(key)
{
case 0xEE: //0
number='0';
k=1;
break;
case 0xED: //1
number='1';
k=1;
break;
case 0xEB: //2
number='2';
k=1;
break;
case 0xE7: //3
number='3';
k=1;
break;
case 0xDE: //4
number='4';
k=1;
break;
case 0xDD: //5
number='5';
k=1;
break;
case 0xDB: //6
number='6';
k=1;
break;
case 0xD7: //7
number='7';
k=1;
break;
case 0xBE: //8
number='8';
k=1;
break;
case 0xBD: //9
number='9';
k=1;
break;
case 0xBB:
runzx(); //A
break;
case 0xB7: //B
mainmenu();
break;
case 0x7E:
set_zx_v(); //C
break;
case 0x7D: //d
break;
case 0x7B: //E
break;
case 0x77: //F
break;
default:
break;
}
if(k==1)
{
if(allow==1)
{
table_zx_v[count]=number;
write_LCD_data(table_zx_v[count]);
count++;
if(count>3)
{
allow=0;
write_LCD_command(0x0C);
}
}
k=0;
}
delay10ms(50);
}
}
//==============================================================================================================================================
void da_write(uint data_buf)
{
unsigned char i=0x0;
da_sync=1;
delay2ms();
da_sync=0;
for(i=0;i<16;i++)
{
if (data_buf&0x8000) //数据及通道选择字节
{
da_din=1;
}
else
{
da_din=0;
}
data_buf=data_buf<<1;
da_sclk=0;
da_sclk=1;
}
da_sync=1;
}
void delay2ms()
{
BYTE i=240;
while(i)
{
i--;
}
}
void runzx()
{
double V;
ulong T;
T=((ulong)(table_zx_t[0]-0x30))*1000000+((ulong)(table_zx_t[1]-0x30))*100000+((ulong)(table_zx_t[2]-0x30))*10000+((ulong)(table_zx_t[3]-0x30))*1000+((ulong)(table_zx_t[4]-0x30))*100+((ulong)(table_zx_t[5]-0x30))*10+((ulong)(table_zx_t[6]-0x30));
V=((double)(table_zx_v[0]-0x30))+((double)(table_zx_v[1]-0x30))*0.1+((double)(table_zx_v[2]-0x30))*0.01+((double)(table_zx_v[3]-0x30))*0.001;
switch(flagbx)
{
case 1:
da_sin(V,T);
break;
case 2:
da_fansin(V,T);
break;
case 3:
da_tri(V,T);
break;
case 4:
da_juchi(V,T);
break;
case 5:
da_sqr(V,T);
break;
default:
break;
}
}
void da_sin(double V,ulong T) //V=0~2.5 T的单位:us
{
uint ii=0;
double datanow;
uint tnow=(4*T*5)/(3000*5.4);
// flagsin=1;
while(1)
{
datanow=V*sin(ii*6.28/tnow)+V;
datanow=datanow*4096/5;
da_write(datanow);
ii++;
if(ii>tnow)
{
ii=0;
}
}
}
void da_fansin(double V,ulong T) //V=0~5
{
uint ii=0;
// double tnow=2*T;
double datanow;
uint tnow=(2*4*T*5)/(2900*5.4);
// flagfansin=1;
while(1)
{
if(ii<tnow/2)//&&count1!=count)
{
datanow=V*sin(ii*6.28/tnow);
datanow=datanow*4096/5;
da_write(datanow);
ii++;
}
if(ii>=tnow/2)//&&count1!=count)
{
datanow=V*sin(ii*6.28/tnow+3.14);
datanow=datanow*4096/5;
da_write(datanow);
ii++;
}
if(ii>tnow/2)
{
ii=0;
}
}
}
void da_juchi(double V,ulong T)
{
ulong ii=0;
int vnow;
int tnow=(T*14*4)/(350*13*5);
while(1)
{
if(ii<tnow)
{
vnow=(V*4096.00)/(tnow*5.00);
da_write((ii*vnow));
ii++;
}
if(ii>=tnow)
{
ii=0;
}
}
}
void da_tri(double V,ulong T)
{
uchar flag=0;
ulong ii=0;
int vnow;
int tnow=(T*7*5)/(350*13*6);
while(1)
{
while(flag==0)
{
vnow=(V*4096.00)/(tnow*5.00);
da_write((ii*vnow));
ii++;
if(ii>=tnow)
{
flag=1;
}
}
while(flag==1)
{
vnow=(V*4096.00)/(tnow*5.00);
da_write((ii*vnow));
ii--;
if(ii==0)
{
flag=0;
}
}
}
}
void da_sqr(double V,ulong T)
{
double vnow;
long tnow;
uchar flag=0;
uint ii=0;
vnow=V/5*4096;
tnow=(T*4*10)/(49*22);
// flagsqr=1;
while(1)
{
while(flag==0)
{
while(ii<tnow)
{
ii++;
}
da_write(vnow);
if(ii>=tnow)
{
ii=0;
flag=1;
}
}
// da_write(vnow);
while(flag==1)
{
while(ii<tnow)
{
ii++;
}
da_write(0);
if(ii>=tnow)
{
ii=0;
flag=0;
}
}
// da_write(vnow);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -