/********************************************************/
// hd7279显示驱动程序 //
// 共阴数码管 //
// dafu 08-05-14 //
/*******************************************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
void long_delay(void); // 长延时
void short_delay(void); // 短延时
void delay10ms(uchar); // 10MS
void write7279(uchar, uchar);//写入到 HD7279
uchar read7279(uchar);//从 HD7279读出
void send_byte(uchar); // 发送一个字节
uchar receive_byte(void); // 接收一个字节
//**************** 变量及I/O口定义 ******************
uchar digit[5];
uchar key_number, j, k;
uint tmr;
unsigned long wait_cnter;
sbit cs=P2^7; // cs 连接于 P1.4
sbit clk=P1^6; // clk 连接于P1.5
sbit dat=P1^7; // dat 连接于P1.2
sbit key=P1^3; // key 连接于 P1.3
//****** HD7279A 指令 ****************************
#define CMD_RESET 0xa4 //复位
#define CMD_TEST 0xbf //测试
#define DECODE0 0x80 // 下载数据方式0译码
#define DECODE1 0xc8 //下载数据方式1译码
#define CMD_READ 0x15 // 读键盘
#define UNDECODE 0x90 //下载数据但不译码
#define RTL_CYCLE 0xa3 // 循环左移 (数据不变)
#define RTR_CYCLE 0xa2 //循环右移
#define RTL_UNCYL 0xa1 //左移 (空位为0)
#define RTR_UNCYL 0xa0 //右移
#define ACTCTL 0x98 //消隐
#define SEGON 0xe0 //段点亮
#define SEGOFF 0xc0 //段关闭
#define BLINKCTL 0x88 //闪烁控制 (0闪/1不闪)
//*************************主程序**************
main()
{
while (1)
{
for (tmr=0;tmr<0x2000;tmr++); // 上电延时
send_byte(CMD_RESET); // 复位HD7279A
/*
//******************************************
// 测试指令演示
//******************************************
send_byte(CMD_TEST); //
for (j=0;j<3;j++) // 3
{
delay10ms(100);
}