📄 430_contest.c
字号:
#include <msp430x14x.h>
#include <math.h>
#ifndef __FFT_N
#define __FFT_N
#define FFT_N 128 //FFT序列总取样点数
#define FFT_M 7 //使2^FFT_M = FFT_N
#define HARM_M 64 //最高谐波次数
#endif
typedef unsigned char uchar ;
float wave_data[128];
//float temp[128];
#define LCD_EN BIT5
#define LCD_RW BIT4
#define LCD_RS BIT3
#define LCD_CS1 BIT2
#define LCD_CS2 BIT1
#define LCD_RST BIT0
#define Am 1.67
float Bm = 1.5 ;
float fjgz=0;//方均根值
float ave=0;//平均值
unsigned char key_pressed , key_value , key_flag ;
int state ;
int p ;
int step ;
int x1 , x2 , y1 , y2 , dx , dy ;
int px1 , px2 , py1 , py2 ;
int qx1 , qx2 , qy1 , qy2 ;
__no_init float fft_r[FFT_N]; //保存变换后的频域实部
__no_init float fft_i[FFT_N]; //保存变换后的频域虚部
__no_init unsigned int harm[HARM_M+1]; //各次谐波幅值
float SD; // 正弦失真度
float vmax ; // AD采集最大值
//**********设置键盘逻辑键值与程序计算键值的映射*
unsigned char key_map[16] ={
0,4,8,12,1,
5,9,13,2,6,
10,14,3,7,11,
15
};
//***********************************************
//供完成倒位序排列使用的位定义
const unsigned int FFT_BIT[11]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x0100,0x0200,0x0400};
//正弦函数表
const float Sinf[FFT_N]={
0 ,0.0491, 0.0980, 0.1467 , 0.1951, 0.2430, 0.2903, 0.3369 , 0.3827 , 0.4276 , 0.4714, 0.5141,
0.5556 , 0.5957, 0.6344, 0.6716, 0.7071, 0.7410, 0.7730, 0.8032 , 0.8315 , 0.8577 , 0.8819 , 0.9040,
0.9239, 0.9415 , 0.9569, 0.9700, 0.9808, 0.9892 , 0.9952, 0.9988 , 1.0000 , 0.9988 , 0.9952, 0.9892,
0.9808, 0.9700 , 0.9569 , 0.9415 , 0.9239, 0.9040 , 0.8819 , 0.8577 , 0.8315 , 0.8032, 0.7730 , 0.7410,
0.7071 , 0.6716, 0.6344 , 0.5957 , 0.5556 , 0.5141 , 0.4714 , 0.4276 , 0.3827, 0.3369 , 0.2903 , 0.2430,
0.1951 , 0.1467 , 0.0980 , 0.0491 , 0.0000 , -0.0491, -0.0980 , -0.1467 , -0.1951 , -0.2430 , -0.2903, -0.3369,
-0.3827 , -0.4276 , -0.4714 ,-0.5141 ,-0.5556 , -0.5957 , -0.6344 , -0.6716 ,-0.7071 ,-0.7410 , -0.7730 , -0.8032,
-0.8315, -0.8577, -0.8819 , -0.9040 , -0.9239 , -0.9415 , -0.9569 , -0.9700 , -0.9808 , -0.9892 , -0.9952 ,-0.9988,
-1.0000 , -0.9988 , -0.9952 , -0.9892 , -0.9808 , -0.9700 , -0.9569 ,-0.9415 ,-0.9239, -0.9040, -0.8819 , -0.8577,
-0.8315 , -0.8032, -0.7730 , -0.7410 , -0.7071, -0.6716 , -0.6344 , -0.5957 , -0.5556 , -0.5141 , -0.4714 , -0.4276,
-0.3827 , -0.3369, -0.2903, -0.2430 , -0.1951 , -0.1467, -0.0980 , -0.0491
};
//**********点阵字库*****************************
const uchar feng[]={/* 点阵:16x16
提取点阵方向:横向(先上->下, 再左->右)
字节掉转:否
字节方式:C语言 */
0x00,0xF0,0x00,0xFF,0x00,0xF0,0x90,0x88, // 峰
0x4F,0x54,0xA4,0x54,0x4C,0xC4,0x40,0x00,
0x00,0x1F,0x10,0x0F,0x08,0x1F,0x00,0x14,
0x15,0x15,0xFF,0x15,0x15,0x14,0x00,0x00,
};
const uchar zhi[]={
0x80,0x40,0x20,0xF8,0x07,0x04,0xE4,0xA4, // 值
0xA4,0xBF,0xA4,0xA4,0xF6,0x24,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x7F,0x4A,
0x4A,0x4A,0x4A,0x4A,0x7F,0x40,0x40,0x00,
};
const uchar fang[]={0x10,0x10,0x10,0x10,0x10,0xF1,0x92,0x96, // 方
0x90,0x90,0x90,0xD0,0x90,0x18,0x10,0x00,
0x00,0x80,0x40,0x20,0x18,0x07,0x00,0x00,
0x40,0x80,0x40,0x3F,0x00,0x00,0x00,0x00,
};
const uchar jun[]={0x20,0x20,0x20,0xFF,0x20,0x20,0x40,0x30, // 均
0x4F,0x88,0x08,0x08,0x08,0xFC,0x08,0x00,
0x10,0x30,0x10,0x1F,0x08,0x08,0x00,0x08,
0x18,0x04,0x42,0x81,0x40,0x3F,0x00,0x00,
};
const uchar gen[]={0x10,0x10,0xD0,0xFF,0x50,0x90,0x00,0xFE, // 根
0x92,0x92,0x92,0x92,0xFF,0x02,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x01,0x00,0xFF,
0x40,0x23,0x0C,0x14,0x22,0x61,0x20,0x00,
};
const uchar yin[]={/*-- 文字: */
0x00,0xFC,0x84,0x84,0x84,0xFE,0x14,0x10, // 时
0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x00,
0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00,
0x00,0x23,0x40,0x80,0x7F,0x00,0x00,0x00,
} ;
const uchar pin[]={/*-- 文字: --*/
0x10,0x10,0xFF,0x10,0x10,0xC8,0x48,0x48, // 域
0xE8,0x48,0xFF,0x08,0x0A,0x8C,0x08,0x00,
0x08,0x18,0x0F,0x04,0x24,0x27,0x14,0x94,
0x57,0x20,0x13,0x0C,0x32,0x41,0x70,0x00,
} ;
const uchar xin[]={/*-- 文字: --*/
0x40,0x7C,0x40,0xFF,0x48,0x6C,0x4A,0xF2, // 频
0x12,0x1A,0xD6,0x12,0x12,0xFB,0x12,0x00,
0x08,0x87,0x40,0x2F,0x10,0x0F,0x80,0x8F,
0x40,0x20,0x1F,0x20,0x40,0xCF,0x00,0x00,
} ;
const uchar hao[]={/*-- 文字: 号 --*/
0x40,0x40,0x40,0x5F,0xD1,0x51,0x51,0x51,0x51,0x51,0x51,0x5F,0x40,0x40,0x40,0x00,
0x00,0x00,0x00,0x02,0x07,0x02,0x02,0x22,0x42,0x82,0x42,0x3E,0x00,0x00,0x00,0x00
} ;
const uchar fen[]={/*-- 文字: 分 --*/
0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,
0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00
} ;
const uchar xi[]={/*-- 文字: 析 --*/
0x08,0x88,0x68,0xFF,0x48,0x88,0x00,0xFC,0x24,0x24,0x22,0xE2,0x22,0x22,0x20,0x00,
0x02,0x01,0x00,0xFF,0x00,0x41,0x30,0x0F,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00
} ;
const uchar yi[]={/*-- 文字: 仪 --*/
0x40,0x20,0xF0,0x0C,0x03,0x00,0x38,0xC0,0x01,0x0E,0x04,0xE0,0x1C,0x00,0x00,0x00,
0x00,0x00,0xFF,0x00,0x40,0x40,0x20,0x10,0x0B,0x04,0x0B,0x10,0x20,0x60,0x20,0x00
} ;
const uchar nan[]={/*-- 文字: 南 --*/
0x04,0x04,0xE4,0x24,0x24,0x64,0xB4,0x2F,0x24,0xA4,0x64,0x24,0x24,0xE6,0x04,0x00,
0x00,0x00,0x7F,0x04,0x05,0x05,0x05,0x7F,0x05,0x05,0x05,0x25,0x44,0x3F,0x00,0x00
} ;
const uchar jing[]={/*-- 文字: 京 --*/
0x00,0x04,0x04,0xE4,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0xE4,0x06,0x04,0x00,0x00,
0x00,0x20,0x10,0x19,0x0D,0x41,0x81,0x7F,0x01,0x01,0x05,0x0D,0x38,0x10,0x00,0x00
} ;
const uchar hang[]={/*-- 文字: 航 --*/
0x80,0x80,0xFC,0x96,0xA5,0xFC,0x00,0x08,0xE8,0x29,0x2A,0xE8,0x08,0x08,0x00,0x00,
0x80,0x60,0x1F,0x42,0x84,0x7F,0x80,0x60,0x1F,0x00,0x00,0x3F,0x40,0x40,0x70,0x00
} ;
const uchar kong[]={/*-- 文字: 空 --*/
0x10,0x0C,0x84,0x44,0x24,0x14,0x05,0x06,0x04,0x14,0x24,0x44,0x84,0x14,0x0C,0x00,
0x00,0x40,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,0x00
} ;
const uchar tian[]={/*-- 文字: 天 --*/
0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,
0x00,0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x02,0x04,0x08,0x10,0x30,0x60,0x20,0x00
} ;
const uchar da[]={/*-- 文字: 大 --*/
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00
} ;
const uchar xue[]={/*-- 文字: 学 --*/
0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00
} ;
const uchar num[10][16]={/*-- 数字0~9 --*/
/*-- 文字: 0 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: 2 --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字: 3 --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 4 --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*-- 文字: 5 --*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 6 --*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 7 --*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*-- 文字: 8 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 9 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
} ;
const uchar point[]={/*-- 文字: . --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00
} ;
const uchar pu[]={/*-- 文字: 谱 --*/
0x40,0x42,0xDC,0x08,0x44,0x54,0x65,0x7E,0x44,0x44,0x44,0x7E,0x65,0x54,0x44,0x00,
0x00,0x00,0x7F,0x20,0x10,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00
} ;
const uchar gong[]={/*-- 文字: 功 --*/
0x00,0x04,0x04,0x04,0xFC,0x04,0x14,0x14,0x10,0x90,0x7F,0x10,0x10,0xF0,0x00,0x00,
0x04,0x0C,0x04,0x04,0x03,0x42,0x22,0x11,0x0C,0x23,0x20,0x60,0x20,0x1F,0x00,0x00
} ;
const uchar lv[]={/*-- 文字: 率 --*/
0x00,0x0C,0x14,0xA4,0x04,0x64,0x35,0xAE,0x64,0x24,0x14,0xA4,0x14,0x04,0x04,0x00,
0x08,0x0A,0x09,0x08,0x08,0x0A,0x0B,0xFE,0x0A,0x0B,0x0C,0x08,0x09,0x0A,0x08,0x00
} ;
const uchar ce[]={/*-- 文字: 测 --*/
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00
} ;
const uchar liang[]={/*-- 文字: 量 --*/
0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00
} ;
const uchar zhou[]={/*-- 文字: 周 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x02,0x42,0x4A,0x4A,0x7E,0x4A,0x4A,0x42,0x02,0xFE,0x00,0x00,
0x80,0x40,0x30,0x0F,0x00,0x00,0x1F,0x09,0x09,0x09,0x1F,0x40,0x80,0x7F,0x00,0x00
} ;
const uchar qi[]={/*-- 文字: 期 --*/
0x00,0x04,0xFF,0x54,0x54,0x54,0xFF,0x04,0x00,0xFE,0x22,0x22,0x22,0xFE,0x00,0x00,
0x42,0x22,0x1B,0x02,0x02,0x0A,0x33,0x62,0x18,0x07,0x02,0x22,0x42,0x3F,0x00,0x00
} ;
const uchar shi[]={/*-- 文字: 失 --*/
0x00,0x40,0x20,0x18,0x16,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
0x00,0x01,0x81,0x41,0x21,0x11,0x0D,0x03,0x05,0x09,0x31,0x61,0xC1,0x41,0x01,0x00
} ;
const uchar zhen[]={/*-- 文字: 真 --*/
0x00,0x04,0x04,0x04,0xF4,0x54,0x5C,0x57,0x54,0x54,0x54,0xF4,0x04,0x06,0x04,0x00,
0x10,0x90,0x90,0x50,0x5F,0x35,0x15,0x15,0x15,0x35,0x55,0x5F,0x90,0x90,0x10,0x00
} ;
const uchar du[]={/*-- 文字: 度 --*/
0x00,0x00,0xFC,0x04,0x24,0x24,0xFC,0xA5,0xA6,0xA4,0xFC,0x24,0x24,0x24,0x04,0x00,
0x80,0x60,0x1F,0x80,0x80,0x42,0x46,0x2A,0x12,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00
} ;
const uchar fu[]={/*-- 文字: 幅 --*/
0xF8,0x08,0xFF,0x08,0xF8,0x00,0x02,0x7A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7A,0x02,0x00,
0x0F,0x00,0xFF,0x08,0x0F,0x00,0x7F,0x25,0x25,0x25,0x3F,0x25,0x25,0x25,0x7F,0x00
} ;
const uchar H[]={/*-- 文字: H --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20
};
const uchar z[]={/*-- 文字: z --*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00
} ;
const uchar W[]={/*-- 文字: W --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00
} ;
const uchar line[]={/*-- 文字: / --*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00
} ;
const uchar x[]={0x00,0x42,0x66,0x18,0x18,0x66,0x42,0x00} ; // x , 8*8
const uchar y[]={0x00,0x00,0x02,0x86,0xF8,0x86,0x02,0x00} ; // y , 8*8
const uchar num_half[10][8]={//数字 0~9 , 8*8
0x00,0x3C,0x42,0x81,0x81,0x42,0x3C,0x00, // 0
0x00,0x82,0x82,0xFF,0x80,0x80,0x00,0x00, // 1
0x00,0xC6,0xA1,0x91,0x89,0xC6,0x00,0x00, // 2
0x00,0x42,0x81,0x81,0x99,0x66,0x00,0x00, // 3
0x18,0x14,0x12,0x10,0xFF,0x10,0x10,0x00, // 4
0x00,0x00,0x8F,0x89,0x89,0x89,0x71,0x00, // 5
0x00,0x00,0x7E,0x89,0x89,0x89,0x70,0x00, // 6
0x00,0x01,0x01,0xF1,0x09,0x05,0x03,0x00, // 7
0x00,0x60,0x96,0x89,0x89,0x96,0x60,0x00, // 8
0x00,0x00,0x46,0x89,0x89,0x7E,0x00,0x00 // 9
} ;
const uchar col[]={0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00} ; // 冒号 8*8
const uchar delta[]={0x00,0x30,0x28,0x24,0x24,0x28,0x30,0x00} ; // delta 8*8
const uchar cls[]={0} ;
//***********************************************
void delay(int v)
{
while(v!=0)v--;
}
void fft(void)
{
unsigned int i,j,k,L;
unsigned int b,c,p,n;
unsigned int x,xc;
float Gr,Gi,Wr,Wi;
/* 倒位序排列输入序列 */
for(i=0;i<FFT_N;i++)
{
x =i;
xc=0;
for(j=0;j<FFT_M;j++)
{
if((x&0x01)!=0)
{
xc|=FFT_BIT[(FFT_M-1)-j];
}
x>>=1;
}
fft_i[xc]=fft_r[i];
}
for(i=0;i<FFT_N;i++)
{
fft_r[i]=fft_i[i];
fft_i[i]=0;
}
/* FFT变换 */
for(L=1;L<=FFT_M;L++)
{
b=1;
p=FFT_N>>1;
for(i=0;i<L-1;i++)
{
b<<=1; //b=2^(L-1)
p>>=1; //p=N/(2^L)
}
c=b<<1; //c=b*2
for(j=0;j<b;j++)
{
n=p*j;
for(k=j;k<FFT_N;k+=c)
{
Gr = fft_r[k];
Gi = fft_i[k];
Wr = ((Sinf[n+FFT_N/4]*fft_r[k+b])) + ((Sinf[n]*fft_i[k+b]));
Wi = ((Sinf[n+FFT_N/4]*fft_i[k+b])) - ((Sinf[n]*fft_r[k+b]));
fft_r[k] = Gr + Wr;
fft_i[k] = Gi + Wi;
fft_r[k+b] = Gr - Wr;
fft_i[k+b] = Gi - Wi;
}
}
}
}
void Harmonic(void)
{
unsigned int i;
float Fnr,Fni,F_nr,F_ni,temp;
for(i=1;i<=HARM_M;i++) //各次谐波分量
{
Fnr = fft_r[i]/128;
Fni = fft_i[i]/128;
F_nr = fft_r[FFT_N-i]/128;
F_ni = fft_i[FFT_N-i]/128;
temp = sqrt(Fnr*Fnr+Fni*Fni) + sqrt(F_nr*F_nr+F_ni*F_ni);
harm[i] = temp;
}
harm[0] = fft_r[0]/128; //直流分量,因实数序列变换后F(0)的虚部=0
}
float SinDistortion(void)
{
unsigned int i;
float sd;
float tmp;
tmp=0;
for(i=2;i<=HARM_M;i++)
{
tmp += harm[i]*harm[i];
}
sd = sqrt(tmp)*10000u/harm[1];
return sd;
}
//**********延时函数*****************************
void delay_ms(unsigned int k )
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<200;j++);
}
}
//***********************************************
//**********初始化键盘设备***********************
void Init_Keyboard(void)
{
P2DIR &= 0x01 ;
P2DIR |= 0x0F ;
P2OUT |= 0 ;
key_flag = 0 ;
key_pressed = 0 ;
}
//***********************************************
//**********检查按键,确认键值*******************
void Check_Key ( void )
{
unsigned char row , col , tmp1 , tmp2 ;
tmp1 = 0x08 ;
for ( row = 0 ; row < 4 ; row++ )
{
P2OUT |= 0x0F;
P2OUT -= tmp1 ;
tmp1 = tmp1/2 ;
if ( ( P2IN & 0xf0 )< 0xf0 )
{
tmp2 = 0x80 ;
for ( col = 0 ; col < 0x04 ; col++ )
{
if ( ( P2IN & tmp2 ) == 0x00 )
{
key_value = key_map [ row*4 + col ] ;
key_pressed=1;
return ;
}
tmp2 /= 2 ;
}
}
}
}
//***********************************************
//**********检测键盘是否有键按下,如果有获取键值*
void Key_Event(void)
{
unsigned char tmp ;
P2OUT = 0 ;
tmp = P2IN ;
if ( (key_pressed == 0x00 ) &&(( tmp & 0xf0 ) < 0xf0 ))
{
key_pressed = 1 ;
Check_Key() ;
}
/* else if ( ( key_pressed == 1 ) && ( ( tmp & 0xf0 ) == 0xf0 ) )
{
key_pressed = 0 ;
key_flag = 1 ;
}*/
}
//***********************************************
//**********液晶复位*****************************
void lcd_reset()
{
P1OUT &= ~LCD_RST ;
P1OUT |= LCD_RST ;
}
//***********************************************
//***********************************************
void check()
{
uchar tmp;
P5DIR=0x00;
P1OUT |= LCD_RW ;
P1OUT &= ~LCD_RS ;
do
{
P1OUT |= LCD_EN ;
tmp=P5IN ;
P1OUT &= ~LCD_EN ;
}
while(tmp&BIT7) ;
}
//***********************************************
//**********写命令*******************************
void lcd_write_command(uchar command)
{
check();
P5DIR = 0xff;
P1OUT &= ~LCD_RS ;
P1OUT &=~ LCD_RW ;
P5OUT = command ;
P1OUT |= LCD_EN ;
P1OUT &=~ LCD_EN ;
}
//***********************************************
//**********打开液晶*****************************
void lcd_on()
{
P1OUT |= LCD_CS1 ;
P1OUT &=~LCD_CS2 ;
lcd_write_command(0x3f) ;
P1OUT |= LCD_CS2 ;
P1OUT &=~ LCD_CS1 ;
lcd_write_command(0x3f) ;
}
//***********************************************
//**********关闭液晶*****************************
void lcd_off()
{
P1OUT |= LCD_CS1 ;
P1OUT &=~LCD_CS2 ;
lcd_write_command(0x3e) ;
P1OUT |=LCD_CS2 ;
P1OUT &=~ LCD_CS1 ;
lcd_write_command(0x3e) ;
}
//***********************************************
//**********初始化液晶***************************
void lcd_initial()
{
P5DIR=0xff ;
P1DIR=0x3f ;
P1OUT=0 ;
lcd_reset() ;
lcd_on() ;
P1OUT |= LCD_CS1 ;
P1OUT &= ~LCD_CS2 ;
lcd_write_command(0xc0) ;
P1OUT &= ~LCD_CS1 ;
P1OUT |= LCD_CS2 ;
lcd_write_command(0xc0) ;
}
//***********************************************
//**********写数据*******************************
void lcd_write_data(uchar data_buffer)
{
check();
P5DIR = 0XFF ;
P1OUT &= ~LCD_RW ;
P1OUT |= LCD_RS ;
P1OUT |= LCD_EN ;
P5OUT = data_buffer ;
P1OUT &= ~LCD_EN ;
}
//***********************************************
//**********写单个串*****************************
void lcd_write_byte(uchar xpos,uchar ypos,uchar *byte)
{
if(xpos<=63)
{
P1OUT |= LCD_CS1 ;
P1OUT &=~ LCD_CS2 ;
lcd_write_command(xpos+0x40) ;
lcd_write_command(ypos+0xb8) ;
lcd_write_data(*byte) ;
}
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -