📄 hd7279a.c
字号:
// This is a demo program for 7279a
// It is test for HY500R circuit
// This is a demo for HD7279A
// Last change :27,Jan,06
//****************************************
#include <reg51.h>
#include "hd7279a.h"
// 数据类型定义
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//变量及IO口定义
uchar digit[5];
uchar key_number, j, k;
uint delay;
ulong wait_cnter;
sbit cs_7279=P1^4;
sbit clk=P1^7;
sbit dat=P1^6;
sbit key=P2^7;
sbit SPEAKER = P1^3;
/***************主函数***********************/
main()
{
delay10ms(5); // 上电延时
while (1)
{
SPEAKER=0;
for (delay=0;delay<0x2000;delay++); // 加电延时
send_byte(RESET_7279); // 复位7279A
delay10ms(2);
//******************************************
// test demo
//******************************************
send_byte(TEST_7279); // 测试指令,全亮并闪烁
for (j=0;j<3;j++) // 延时约3秒
{
delay10ms(100);
}
send_byte(RESET_7279); // 复位,清除显示
write7279(DECODE1+0,0x00);
write7279(DECODE1+1,0x01);
write7279(DECODE1+2,0x02);
write7279(DECODE1+3,0x03);
write7279(DECODE1+4,0x04);
write7279(DECODE1+5,0x05);
write7279(DECODE1+6,0x06);
write7279(DECODE1+7,0x07);
//ite7279(DECODE1+0,8);
//*********************************************
//译码方式1及右移指令测试
//*********************************************
// for (j=0;j<16;j++)
// {
// send_byte(RTR_UNCYL); // 不循环右移指令
// write7279(DECODE1+7,j);
// 译码方式0指令,显示在第8位
delay10ms(50);
// }
delay10ms(1500);
//*********************************************
}
}
// 写指令--------------------------
void write7279(uchar cmd, uchar dta)
{
send_byte (cmd);
send_byte (dta);
}
// 读数据--------------------------
uchar read7279(uchar cmd)
{
send_byte(cmd);
return(receive_byte());
}
// 发送一个字节
void send_byte(uchar sbyte)
{
uchar i;
cs_7279=0;
long_delay();
for (i=0;i<8;i++)
{
if (sbyte&0x80)
{
dat=1; // 第8位为1则置发送的第一个电平为高
}
else
{
dat=0;
}
clk=1; // 在上升沿写入
short_delay();
clk=0;
short_delay();
sbyte=sbyte*2; // 左移一位
}
dat=0; // 发送完一个字节后置数据线为0,输出状态
}
// 接收一个字节
uchar receive_byte(void)
{
uchar i, ibyte;
dat=1; // 设为输入状态
long_delay();
for (i=0;i<8;i++)
{
clk=1;
short_delay();
ibyte=ibyte*2; // 左移一位
if (dat)
{
ibyte=ibyte|0x01;
}
clk=0;
short_delay();
}
dat=0;
return (ibyte);
}
// 处理按键
void key_process(void)
{
// add code here
}
// delay 160us
void long_delay(void)
{
uchar i;
for (i=0;i<0x30;i++);
}
// delay 33us
void short_delay(void)
{
uchar i;
for (i=0;i<8;i++);
}
// *********************延时n*10ms **********************
void delay10ms(uchar ms)
{
uchar i;
uint j;
for (i=0;i<ms;i++)
{
for(j=0;j<0x390;j++)
{
if(!key) // 有按键则先处理按键中断
{
key_process();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -