/********************************************************\
| 项目 武汉理工大学教学实验板(ZG211 定制) |
| 文件 Display.c |
| 功能 LED显示演示程序 |
| 编写 中格电子 |
| 创建时间 2005/09/08 |
| 版本 1.0 |
| 版本说明 |
| 修改历史 |
| 修改原因 |
| 修改时间 |
| 修改后特性 |
\********************************************************/
#include "reg52.h"
#include "def.h"
#include "display.h"
#include "sub.h"
#include "func.h"
extern unsigned char key_print;
extern unsigned char key_data;
/*******************************************************\
| 函数名 send_disp_data |
| 函数功能 向CH451芯片发送命令 |
| 参数 comm : 命令体 |
| _data : 命令参数 |
| 返回值 无 |
\*******************************************************/
void send_disp_data(unsigned char comm, unsigned char _data)
{
unsigned char i;
//送8BIT数据
for(i=0;i<8;i++)
{
DIN = (_data>>i)&0x01;
DCLK = 1;
DCLK = 0;
DCLK = 1;
}
//送4BIT命令
for(i=0;i<4;i++)
{
DIN = (comm>>i)&0x01;
DCLK = 1;
DCLK = 0;
DCLK = 1;
}
LOAD=1;
LOAD=0;
LOAD=1;
}
/*******************************************************\
| 函数名 send_comm |
| 函数功能 向CH451芯片发送命令 |
| 参数 comm : 命令体 |
| 返回值 无 |
\*******************************************************/
void send_comm(unsigned char comm)
{
unsigned char i;
//送4BIT命令
for(i=0;i<4;i++)
{
DIN = (comm>>i)&0x01;
DCLK = 1;
DCLK = 0;
DCLK = 1;
}
LOAD=1;
LOAD=0;
LOAD=1;
}
/*******************************************************\
| 函数名 disp_initialize |
| 函数功能 向CH451芯片发送初始化命令 |
| 参数 无 |
| 返回值 无 |
\*******************************************************/
void disp_initialize()
{
chang_4052(1);
DIN=0;
DIN=1;
DCLK=1;
LOAD=1;
DOUT=1;
send_disp_data( CH451_SETSYS, 0x03); //设定系统参数
send_disp_data( CH451_SETDIS, 0x80); //设定显示参数
}
/*******************************************************\
| 函数名 key |
| 函数功能 中断函数,获取当前按键状态 |
| 参数 无 |
| 返回值 无 |
\*******************************************************/
void key() interrupt 0
{
unsigned char i,temp;
EX0 = 0; //关中断
key_data = 0;
temp = 0;
send_comm(CH451_KEY);
for(i=0; i<7; i++)
{
temp = DOUT;
key_data = key_data|(temp<<(6-i));
DCLK=1;
DCLK=0;
DCLK=1;
}
EX0 = 1; //中断
}
/*******************************************************\
| 函数名 Display_TEST |
| 函数功能 测试显示LED数码管 |
| 参数 无 |
| 返回值 无 |
\*******************************************************/
void Display_TEST()
{
//初始化显示芯片
disp_initialize();
//延时
delay_1ms(100);
//送显“12345678”
send_disp_data( CH451_LOAD0, 0x01);
send_disp_data( CH451_LOAD1, 0x02);
send_disp_data( CH451_LOAD2, 0x03);
send_disp_data( CH451_LOAD3, 0x04);
send_disp_data( CH451_LOAD4, 0x05);
send_disp_data( CH451_LOAD5, 0x06);
send_disp_data( CH451_LOAD6, 0x07);
send_disp_data( CH451_LOAD7, 0x08);
delay_1ms(200);
//延时
delay_1ms(200);
//开中断,接受按键信息
EX0=1;
//"--------"
send_disp_data( CH451_LOAD0, 0x12);
send_disp_data( CH451_LOAD1, 0x12);
send_disp_data( CH451_LOAD2, 0x12);
send_disp_data( CH451_LOAD3, 0x12);
send_disp_data( CH451_LOAD4, 0x12);
send_disp_data( CH451_LOAD5, 0x12);
send_disp_data( CH451_LOAD6, 0x12);
send_disp_data( CH451_LOAD7, 0x12);
}
/*******************************************************\
| 函数名 display_int |
| 函数功能 显示一个整数 |
| 参数 无 |
| 返回值 无 |
\*******************************************************/
void display_int(unsigned int m)
{
send_disp_data( CH451_LOAD0, 0x10);
send_disp_data( CH451_LOAD1, 0x10);
send_disp_data( CH451_LOAD2, 0x10);
if (m/10000)
{
send_disp_data( CH451_LOAD3, m/10000);
}
else
{
send_disp_data( CH451_LOAD3, 0x10);
}
if ((!(m/1000)%10)&&(!(m/10000)))
{
send_disp_data( CH451_LOAD4, 0x10);
}
else
{
send_disp_data( CH451_LOAD4, (m/1000)%10);
}
send_disp_data( CH451_LOAD5, (m/100)%10);
send_disp_data( CH451_LOAD6, (m/10)%10);
send_disp_data( CH451_LOAD7, m%10);
}
评论0