📄 arm_3310控制.c
字号:
/****************************************************************************
* 文件名:GPIO1.C
* 功能:
* 说明: 硬件连接问题:
1:3310的引脚配置:1,VCC,2,SCLK,3,SDIN,4,DC,5,SCE,6,GND,7,悬空,8,RET(复位端)
2:3310与ARM的连接:1.VCC==VCC,2.SCLK==P0.16,3.SDIN==P0.17,4.DC==P0.18,5.SCE==P0.19
6.GND==GND,7,OEN==100欧姆的电阻==GND,8.RET==VCC.
****************************************************************************/
#include <LPC213x.H> // LPC21xx definitions
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
typedef unsigned char uint8; /* 无符号8位整型变量 */
typedef signed char int8; /* 有符号8位整型变量 */
typedef unsigned short uint16; /* 无符号16位整型变量 */
typedef signed short int16; /* 有符号16位整型变量 */
typedef unsigned int uint32; /* 无符号32位整型变量 */
typedef signed int int32; /* 有符号32位整型变量 */
typedef float fp32; /* 单精度浮点数(32位长度) */
typedef double fp64; /* 双精度浮点数(64位长度) */
/* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
#define Fosc 11059200 //晶振频率
#define Fcclk (Fosc * 4) //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
#define Fcco (Fcclk * 4) //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
#define Fpclk (Fcclk / 4) * 1 //VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍
//========================3310液晶程序============================//
#define sclk 1<<16; //时钟 P0^16
#define sdin 1<<17; //数据 P0^17
#define dc 1<<18; //1写数据,0写指令 P0^18
#define sce 1<<19; //片选 P0^19
//#define res 1<<20; //复位,0复位 P0^20 可接VCC;
uint8 const mask_table[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uint8 const Hzk1212[][24];
void DelayNS(uint32 dly);
void LCMInit(void);
void displayonechar1212(uint8 page, uint8 row, uint8 HZ_num, uint8 dd, uint8 dismode);
// page:页 row:列 HZ_num:显示字数 dd:字符序号 dismode: 0为正常,1为反显//
void displaynum(uint8 page,uint8 row,uint16 dd);
void display_num(uint8 page,uint8 row,uint16 dd);
// page:页 row:列 dd:字符 //
void write_byte(uint8 dd,uint8 abc); //写一字节 0:指令 1:数据
void cls_lcd(); //清屏幕
void cls_lcd_one(uint8 layer,uint8 column,uint8 end); //参数1:第几行,参数2:第几列,参数3:截止位
//==========================================================//
// 函数名称:DelayNS()
// 函数功能:长软件延时
// 入口参数:dly 延时参数,值越大,延时越久
// 出口参数:无
//=========================================================//
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
for(i=0; i<5000; i++);
}
//=======================LCM初始化程序=======================//
void LCMInit(void) //LCM初始化
{
PINSEL1|= 0x00000000;
IO0DIR |= 0x0F << 16;
IO0SET |= 0x0F << 16;
write_byte(0x21,0);//初始化Lcd,功能设定使用扩充指令
write_byte(0xe3,0);//设定液晶偏置电压(高--低)
write_byte(0x20,0);//使用基本指令
write_byte(0x0C,0);//设定显示模式,正常显示
}
//====================写字节==============================//
void write_byte(uint8 dd,uint8 abc)//写一字节 0:指令 1:数据
{
uint8 i;
IO0CLR=sce;
if(abc==0) IO0CLR=dc;
if(abc==1) IO0SET=dc;
IO0CLR = sclk;
for(i=0;i<8;i++)
{
if(dd&mask_table[i])
{
IO0SET=sdin;
}
else IO0CLR=sdin;
IO0CLR=sclk;
IO0SET=sclk;
}
IO0SET=dc;
IO0SET=sce;
IO0SET=sdin;
}
//=========================设定地址============================//
void setadd(uint8 a,uint8 d)//设定地址
{
write_byte((a|0x80),0);
write_byte((d|0x40),0);
}
//==========================清屏==============================//
void cls_lcd()//清屏
{
uint8 t,k;
uint8 d=0;
for(t=0;t<6;t++)
{
for(k=0;k<84;k++)
{
write_byte(0,1);
d=d+1;
}
}
}
//==========================清屏==============================//
void cls_lcd_one(uint8 layer,uint8 column,uint8 end)//参数1:第几行,参数2:第几列,参数3:截止位
{
uint8 i,k;
for(i=0;i<2;i++)
{
setadd(column,layer);// 列,页
for(k=column;k<end;k++)
write_byte(0,1);
layer++;
}
}
//================显示12(宽)*12(高)点阵列汉字==============//
void displayonechar1212(uint8 page, uint8 row, uint8 HZ_num, uint8 dd, uint8 dismode)
// page:页 row:列 HZ_num:显示字数 dd:字符序号 dismode: 0为正常,1为反显//
{
uint8 row_i,xx,num=0,i;
for(i=0;i<HZ_num;i++)
{
for(xx=0;xx<2;xx++)
{
setadd(row,page);// 列,页
for(row_i=num; row_i<num+12;row_i++)
{
if(dismode==0)
write_byte(Hzk1212[dd][row_i],1);
else
write_byte(~(Hzk1212[dd][row_i]),1);
}
num=num+12;page++;
}
row=row+12;dd++;
num=0; page=page-2;
if(row>72)
{
row=0;
page=page+2;
}
}
}
//================显示12(宽)*12(高)点阵列汉字==============//
void displaynum(uint8 page,uint8 row,uint16 dd)
// page:页 row:列 dd:字符 //
{
uint8 row_i,xx,num=0,l,SZ_num,z;
uint16 k,bak;
if(dd>=1)
{SZ_num=1;}
if(dd>=10)
{SZ_num=2;}
if(dd>=100)
{SZ_num=3;}
if(dd>=1000)
{SZ_num=4;}
if(dd>=10000)
{SZ_num=5;}
if(SZ_num==5)
{k=10000;}
if(SZ_num==4)
{k=1000;}
if(SZ_num==3)
{k=100;}
if(SZ_num==2)
{k=10;}
if(SZ_num==1)
{k=1;}
bak=dd/k; z=SZ_num;
for(l=0;l<SZ_num;l++)
{
for(xx=0;xx<2;xx++)
{
setadd(row,page);// 列,页
for(row_i=num; row_i<num+8;row_i++) write_byte(Hzk1212[bak][row_i],1);
num=num+8;page++;
}
num=0; page=page-2;
if(SZ_num!=0)
{
bak=dd%k;
k=k/10;
bak=bak/k;
}
row=row+6;
}
}
void display_num(uint8 page,uint8 row,uint16 dd)
// page:页 row:列 dd:字符 //
{
uint8 row_i,xx,num=0;
for(xx=0;xx<2;xx++)
{
setadd(row,page);// 列,页
for(row_i=num; row_i<num+8;row_i++) write_byte(Hzk1212[dd][row_i],1);
num=num+8;page++;
}
}
//================================主程序===========================//
int main(void)
{
LCMInit(); //初始化LCD
cls_lcd(); //清屏幕
DelayNS(10);
displayonechar1212(0, 0, 10, 10,0) ;
display_num(4,2,2);
display_num(4,8,3);
return 0;
}
//===========================字模表============================//
uint8 const Hzk1212[][24]={
//"0"
{0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x0F,0x10,0x10,0x10,0x0F,0x00},
{0x00,0x00,0x00,0x40,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1F,0x10,0x00,0x00},
{0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x18,0x14,0x12,0x11,0x10,0x00},
{0x00,0x00,0x40,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x08,0x10,0x11,0x11,0x0E,0x00},
{0x00,0x00,0x80,0x40,0xE0,0x00,0x00,0x00,0x00,0x02,0x05,0x04,0x1F,0x14,0x00,0x00},
{0x00,0x00,0xE0,0x20,0x20,0x20,0x20,0x00,0x00,0x00,0x09,0x11,0x11,0x11,0x0E,0x00},
{0x00,0x00,0xC0,0x20,0x20,0x60,0x00,0x00,0x00,0x00,0x0F,0x11,0x11,0x11,0x0E,0x00},
{0x00,0x00,0x60,0x20,0x20,0xE0,0x20,0x00,0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00},
{0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x0E,0x11,0x11,0x11,0x0E,0x00},
{0x00,0x00,0xC0,0x20,0x20,0x20,0xC0,0x00,0x00,0x00,0x01,0x1A,0x12,0x12,0x0F,0x00},
{0xA5,0x96,0xCC,0xBF,0x96,0xA5,0x18,0x67,0x84,0x7C,0x04,0x00,0x04,0x05,0x02,0x02,0x03,0x04,0x04,0x02,0x01,0x02,0x04,0x00},//"数",10
{0x44,0x46,0x4A,0x4A,0x4A,0xEB,0x5A,0x4A,0x4A,0x42,0x46,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00,0x00,0x00},//"字",1
{0x20,0x10,0xFC,0x83,0x80,0x40,0xFF,0x20,0x10,0x0C,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x07,0x00},//"化",2
{0x11,0xF2,0x00,0x21,0xA5,0xBD,0xA7,0xA5,0xBD,0xA1,0x21,0x00,0x00,0x07,0x02,0x01,0x07,0x04,0x04,0x04,0x04,0x07,0x00,0x00},//"语",3
{0x10,0x12,0xD2,0x56,0x5A,0x53,0x5A,0x56,0xD2,0x12,0x10,0x00,0x00,0x00,0x07,0x05,0x05,0x05,0x05,0x05,0x07,0x00,0x00,0x00},//"音",4
{0x82,0x42,0xF2,0x0A,0x4F,0x4A,0x4A,0xEA,0x5A,0x4A,0x42,0x00,0x00,0x00,0x07,0x00,0x00,0x04,0x04,0x07,0x00,0x00,0x00,0x00},//"存",5
{0x10,0xFC,0x13,0xF6,0x00,0x94,0xD4,0x7F,0x54,0xDC,0x12,0x00,0x00,0x07,0x00,0x03,0x02,0x00,0x07,0x05,0x05,0x07,0x00,0x00},//"储",6
{0x80,0x80,0xA0,0xBF,0xA4,0xA4,0xA4,0xA4,0x24,0xF6,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x03,0x00,0x00},//"与",7
{0x00,0xFF,0x01,0xF9,0x49,0x49,0x49,0xF9,0x01,0x01,0xFF,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x07,0x00},//"回",8
{0x04,0xFC,0x15,0x16,0xF4,0x04,0x18,0x67,0x84,0x7C,0x04,0x00,0x06,0x01,0x02,0x02,0x03,0x04,0x02,0x01,0x01,0x02,0x04,0x00},//"放",9
{0x00,0x02,0x4A,0xCA,0x6E,0xDA,0x49,0xC9,0x65,0x41,0x00,0x00,0x04,0x02,0x01,0x04,0x04,0x07,0x00,0x00,0x01,0x02,0x04,0x00},//"系",10
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -