📄 mcu2.c
字号:
#include<mega32.h>
#include<delay.h> //头文件
#include<stdio.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define lcd_bus PORTD
#define LCD_BL PORTC.0
#define _WR PORTC.1
#define _RD PORTC.2
#define _CS PORTC.3
#define RS PORTC.4
#define _RST PORTC.5 //端口设置
#define FIFO_R PORTB.2
#define RES_FIFO PORTB.1
#define EN_FIFO PORTB.0
#define FIFO_bus PINA
//----------------------------
unsigned char lcd_buffer[240],cdd[242],add[500];
unsigned char e,qqq,trigs[16]={0x00,0x00,0x0E,0x08,0x08,0x08,0x1C,0x2A,0x08,0x08,0x08,0x08,0x08,0x78,0x00,0x00};
unsigned char trigs2[16]={0x00,0x00,0x78,0x08,0x08,0x08,0x08,0x2A,0x1C,0x08,0x08,0x08,0x08,0x0E,0x00,0x00};
unsigned int c,ee;
unsigned char i[9],j,eep,tri,hold,holdb,biao,zhi;
unsigned long m,freq;
//----------------------------
//写入寄存器地址或参数
//----------------------------
interrupt[SPI_STC] void spi_isr(void)
{
if(j!=9)
{
i[j]=SPDR;
j++;
}
}
void SdCmd(uchar command)
{
lcd_bus = command;
_CS = 0;
RS = 0;
_WR = 0;
_WR = 1;
RS = 1;
_CS = 1;
}
//----------------------------
//写入数据
//----------------------------
void SdData(uchar ddata)
{
lcd_bus = ddata;
_CS = 0;
RS = 1;
_WR = 0;
_WR = 1;
RS = 0;
_CS = 1;
}
//----------------------------
//显示文本
//----------------------------
void ShowText(uchar *text)
{
while(*text>0)
{
SdData(*text);
text++;
delay_us(150);
}
}
//----------------------------
//初始化
//----------------------------
void Init()
{
_RST = 0;
delay_ms(600);
_RST = 1;
delay_ms(100);
SdCmd(0x00);SdCmd(0xc5); //设置WLCR 寄存器
SdCmd(0x11);SdCmd(0x00); //设置DWLR 寄存器
SdCmd(0x81);SdCmd(0x40); //设置FRCA 寄存器
SdCmd(0xf0);SdCmd(0b10100000); //设置FNCR 寄存器
SdCmd(0x01);SdCmd(0xf0); //设置MISC 寄存
SdCmd(0x90);SdCmd(0x04); //设置SCCR 寄存器
SdCmd(0x20);SdCmd(0x27); //设置工作视窗
SdCmd(0x30);SdCmd(0xef);
SdCmd(0x40);SdCmd(0x00);
SdCmd(0x50);SdCmd(0x00);
SdCmd(0x21);SdCmd(0x27); //设置显示视窗
SdCmd(0x31);SdCmd(0xef);
SdCmd(0x41);SdCmd(0x00);
SdCmd(0x51);SdCmd(0x00);
SdCmd(0x10);SdCmd(0b00100000);
}
//----------------------------
//清屏
//----------------------------
void CleanScreen()
{
uchar i,j;
for(i=0;i<40;i++)
{
for(j=0;j<240;j++)
{
SdCmd(0x60);SdCmd(i);
SdCmd(0x70);SdCmd(j);
SdData(0x00);
}
}
}
void line()
{
unsigned char i,k;
for(i=0;i<240;i++)
{
SdCmd(0x60);SdCmd(0);
SdCmd(0x70);SdCmd(i);
SdData(0x80);
}
for(i=0;i<240;i+=2)
{
SdCmd(0x60);SdCmd(3);
SdCmd(0x70);SdCmd(i);
SdData(0x02);
}
for(i=0;i<240;i+=2)
{
SdCmd(0x60);SdCmd(7);
SdCmd(0x70);SdCmd(i);
SdData(0x08);
}
for(i=0;i<240;i+=2)
{
SdCmd(0x60);SdCmd(11);
SdCmd(0x70);SdCmd(i);
SdData(0x20);
}
for(i=0;i<240;i++)
{
SdCmd(0x60);SdCmd(15);
SdCmd(0x70);SdCmd(i);
SdData(0x80);
}
for(i=0;i<240;i+=2)
{
SdCmd(0x60);SdCmd(18);
SdCmd(0x70);SdCmd(i);
SdData(0x02);
}
for(i=0;i<240;i+=2)
{
SdCmd(0x60);SdCmd(22);
SdCmd(0x70);SdCmd(i);
SdData(0x08);
}
for(i=0;i<240;i+=2)
{
SdCmd(0x60);SdCmd(26);
SdCmd(0x70);SdCmd(i);
SdData(0x20);
}
for(i=0;i<240;i++)
{
SdCmd(0x60);SdCmd(30);
SdCmd(0x70);SdCmd(i);
SdData(0x80);
}
for(k=0;k<240;k+=30)
{
for(i=0;i<30;i++)
{
SdCmd(0x60);SdCmd(i);
SdCmd(0x70);SdCmd(k);
if(k==0||k==120)
{
SdData(0xff);
}
else
{
SdData(0xaa);
}
}
}
for(i=0;i<30;i++)
{
SdCmd(0x60);SdCmd(i);
SdCmd(0x70);SdCmd(239);
SdData(0xff);
}
}
void disp_volt()
{
SdCmd(0x00);SdCmd(0xcd); //设置WLCR 寄存器
SdCmd(0xf1);SdCmd(0x1f); //字型水平、垂直方向各放大2 倍
SdCmd(0x60);SdCmd(30);
SdCmd(0x70);SdCmd(50);
c=c*0.667;
switch(biao)//计算键值
{
case 0:c=c*25;break;
case 1:c=c*10;break;
case 2:c=c*5;break;
case 3:c=c*2.5;break;
case 4:;break;
case 5:c=c*0.5;break;
case 6:c=c*0.25;break;
case 7:c=c*0.1;break;
case 8:c=c*0.05;break;
default:break;
}
sprintf(lcd_buffer,"%3d.%02dVpp",c/100,c%100);
ShowText(lcd_buffer);
SdCmd(0xf1);SdCmd(0x0f); //字型水平、垂直方向各放大2 倍
SdCmd(0x00);SdCmd(0xc5); //设置WLCR 寄存器
}
void trig()
{
unsigned char i;
SdCmd(0x10);SdCmd(0x59); //字体反显示
for(i=0;i<16;i++)
{
SdCmd(0x60);SdCmd(33);
SdCmd(0x70);SdCmd(180+i);
if(tri==0)
{
SdData(trigs[i]);
}
else
{
SdData(trigs2[i]);
}
}
SdCmd(0x10);SdCmd(0x79);
}
void can()
{
SdCmd(0x00);SdCmd(0xcd); //设置WLCR 寄存器
SdCmd(0x60);SdCmd(33);
SdCmd(0x70);SdCmd(150);
SdCmd(0x10);SdCmd(0x59); //字体反显示
sprintf(lcd_buffer," HOLD ");
ShowText(lcd_buffer);
SdCmd(0x10);SdCmd(0x79);
SdCmd(0x60);SdCmd(32);
SdCmd(0x70);SdCmd(200);
SdCmd(0xf1);SdCmd(0x1f); //字型水平、垂直方向各放大2 倍
sprintf(lcd_buffer,"Agilent");
ShowText(lcd_buffer);
SdCmd(0xf1);SdCmd(0x0f); //字型水平、垂直方向各放大2 倍
SdCmd(0x00);SdCmd(0xc5); //设置WLCR 寄存器
}
void clr_hold()
{
SdCmd(0x00);SdCmd(0xcd); //设置WLCR 寄存器
SdCmd(0x60);SdCmd(33);
SdCmd(0x70);SdCmd(150);
SdCmd(0x10);SdCmd(0x69); //字体反显示
sprintf(lcd_buffer," ");
ShowText(lcd_buffer);
SdCmd(0x10);SdCmd(0x79);
SdCmd(0x60);SdCmd(31);
SdCmd(0x70);SdCmd(200);
SdCmd(0xf1);SdCmd(0x1f); //字型水平、垂直方向各放大2 倍
sprintf(lcd_buffer,"By Weikun");
ShowText(lcd_buffer);
SdCmd(0xf1);SdCmd(0x0f); //字型水平、垂直方向各放大2 倍
SdCmd(0x00);SdCmd(0xc5); //设置WLCR 寄存器
}
void display()
{
unsigned int i,j,k,q=0;
unsigned char m,h,a,b=127;
EN_FIFO=0;
read:
for(i=0;i<500;i++) //从FIFO存储器中读500个数据
{
FIFO_R=0;
add[i]=FIFO_bus;
FIFO_R=1;
}
while(!(add[q]<=128&&add[q+1]>=128)) //满足幅度为m且为上升沿则触发
{
q+=1;
if(q>=260) //若存储数据不足则重新读数据
goto read;
}
RES_FIFO=0;
delay_us(5);
RES_FIFO=1;
EN_FIFO=1;
for(i=0;i<240;i++) //取数据中的最大值与最小值
{
if(add[q+i]>a)
{
a=add[q+i];
}
else if(add[q+i]<b)
{
b=add[q+i];
}
} //取得最大值存于a中,最小值存于b中
c=a-b; //取差值存入c中
if(e>10) //避免频繁换数据
{
disp_volt();
e=0;
}
e++;
if(qqq==1)
{
for(i=0;i<121;i++)
{
cdd[i*2]=add[i+q];
cdd[i*2+1]=add[i+q]/2+add[i+q+1]/2;
}
for(j=0;j<30;j++)
{
m=128;
for(i=j*8;i<(j+1)*8;i++)
{
k=cdd[i];
lcd_buffer[k]=(lcd_buffer[k]|m);
lcd_buffer[k+1]=(lcd_buffer[k+1]|m);
if(cdd[i]<cdd[i+1])
{
for(k=cdd[i];k<cdd[i+1];k++)
{
lcd_buffer[k]=(lcd_buffer[k]|m);
}
}
else
{
for(k=cdd[i];k>cdd[i+1];k--)
{
lcd_buffer[k]=(lcd_buffer[k]|m);
}
}
m>>=1;
}
for(h=0;h<240;h++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -