📄 ledhex.c
字号:
/****************************************************************************
* 文件名:LEDHEX.C
* 功能:LED数码管显示0-F字符,同时控制LED1、LED2、LED3、LED4显示对应的16进行值。
* 说明:将跳线器JP3、JP4、JP7短接。
****************************************************************************/
#include "config.h"
#include "zimu.h"
//#include "lcd12864.h"
//#include "show.h"
/*******************************************************************/
/******************************************************************/
#define Disp_On 0x3f // 显示开指令 //
#define Disp_Off 0x3e // 显示关指令 //
#define Col_Add 0x40 // 定位到第0列指令 //
#define Page_Add 0xb8 // 定位到第0页指令 //
#define Start_Line 0xc0 // 定位从DDROM中的第0行开始往屏幕上显示 //
#define E 1<<8 // 使能端 //
#define RW 1<<9 // 读写控制端 //
#define RS 1<<10 // 数据或指令寄存器选择端 //
#define CS2 1<<11 // 右屏使能 //
#define CS1 1<<12 // 左屏使能 /
#define RST 1<<13 // 复位端 //
#define PORT 0xff<<0
/****************************************************************************/
void Disp_V_Line(void);
void sz_disp16(uint8 pag,uint8 col, uint8 const *szk);
void hz_disp16(uint8 pag,uint8 col, uint8 const *hzk);
void Disp_Img(uint8 const *img);
void show(void);
void shuzishow(unsigned char arr);
void change(unsigned char dat);
void delay(uint32 t);
void write_command(uint8 cmdcode);
void write_data(uint8 Dispdata);
void Clr_Scr(void);
void init_lcd(void);
void sz_disp8(uint8 pag,uint8 col, uint8 const *szk);
void shuzhishow(unsigned char arr);
void Keyboard_Initialize(void);
uint8 Keyboard_Scan(void);
/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly 延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void DelayNS(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<50000; i++);
}
int main(void)
{ uint8 tmp=0;
PINSEL0 = 0x00000000; // 设置所有管脚连接GPIO
PINSEL1 = 0x00000000;
DelayNS(10); // 延时,防止JTAG调试时,芯片复位后蜂鸣器马上蜂鸣(直到重新设置PINSEL0)
IO0DIR = PORT|RST|RW|E|CS1|CS2|RS; // 设置SPI等控制口为输出
init_lcd();
Keyboard_Initialize();
DelayNS(10);
Clr_Scr();
Disp_Img(FirstPage);
DelayNS(100);
Clr_Scr();
show();
DelayNS(100);
Clr_Scr();
shuzishow(tmp);
while(1)
{
tmp=Keyboard_Scan();
if(tmp<=9)
shuzishow(tmp);
}
return(0);
}
/************************液晶驱动模块**************************/
void delay( uint32 t)
{
uint32 i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
/*-------------------------写命令到LCD------------------------------*/
void write_command(uint8 cmdcode)
{
IO0CLR=RS;
IO0CLR=RW;
IO0CLR=PORT;
IO0SET = (cmdcode)<<0; /******数据 P0*****/
delay(0);
IO0SET=E;
delay(0);
IO0CLR=E;
}
/*-------------------------写数据到LCD----------------------------*/
void write_data( uint8 Dispdata)
{
IO0SET=RS;
IO0CLR=RW;
IO0CLR=PORT;
IO0SET=(Dispdata)<<0;
delay(0);
IO0SET=E;
delay(0);
IO0CLR=E;
}
/***************************清屏函数*******************************/
void Clr_Scr(void)
{
uint8 j,k;
IO0CLR=CS2;IO0SET=CS1; // 清左半屏 //
{
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清左上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
{
write_command(Col_Add+j);
write_data(0x00);
}
}
}
IO0SET=CS2; IO0CLR=CS1; // 清右半屏 //
{
write_command(Page_Add+0);
write_command(Col_Add+0);
for(k=0;k<8;k++) // 清右上半屏 //
{
write_command(Page_Add+k);
for(j=0;j<64;j++)
{
write_command(Col_Add+j);
write_data(0x00);
}
}
}
}
/*------------------初始化LCD屏--------------------------*/
void init_lcd(void)
{
IO0CLR=RST;
delay(100);
IO0SET=RST;
delay(100);
IOSET=CS2;
IOSET=CS1;
delay(100);
write_command(Disp_Off);
write_command(Page_Add+0);
write_command(Start_Line+0);
write_command(Col_Add+0);
write_command(Disp_On);
}
/*****************************液晶驱动程序完成****************************/
/*****************************液晶显示子函
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -