📄 text1.c
字号:
#include <reg51.h>
#include <I2C.h>
#include <ZLG7290.h>
#define uchar unsigned char
#define uint unsigned int
uchar z1;
uint Num;
uchar ge,shi,bai,qian;
//定义键盘中断标志,FlagINT=1表示有键按下
volatile bit FlagINT = 0;
/*
函数:INT0_SVC()
功能:ZLG7290键盘中断服务程序
说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
*/
void INT0_SVC() interrupt 0
{ IE0=0;
FlagINT = 1;
}
void Delay(uint x) //延时函数
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
/*
函数:SystemInit()
功能:系统初始化
*/
void SystemInit()
{
I2C_Init();
Delay(500); //等待ZLG7290复位完毕
}
/*
函数:ClearAll()
功能:清除所有显示
*/
void ClearAll()
{
unsigned char x;
for ( x=0; x<8; x++ )
{
ZLG7290_Download(x,0,0,31);
}
}
sbit CS=P1^5; //片选
sbit SCLK=P1^6; //时钟
sbit DIN=P1^7; //数据入口
sbit Tlc549_Clk = P1^4;
sbit Tlc549_Data = P1^3;
sbit Tlc549_Cs = P1^2;
//--------------------------------------------------
// 函数名称: DA_Conver
// 函数功能: DA转换
// 入口参数: 要转换的数字量,最多输出参考电压的
// 2倍,如可采用MC1403等参考电源
// 出口参数: 无
//--------------------------------------------------
void DA_Conver(unsigned int DAValue)
{
unsigned char i;
DAValue <<= 6;
CS=0; //片选DA芯片
SCLK= 0; //在以下12个时钟周期内,每当在上升沿的
//数据被锁存,形成DA输出。在前10个时钟
for(i = 0; i < 12; i++) //内输入的是10位DA数据,后两个时钟周期
{ //为填充字节。
DIN= (bit)(DAValue & 0x8000);
SCLK= 1;
DAValue <<= 1;
SCLK= 0;
}
CS= 1; //CS的上升沿和下降沿只有在clk为低的时候
SCLK= 0; //才有效
}
int Read_Key()
{
unsigned char KeyValue;
ClearAll();
EA = 0;
IT0 = 1; //负边沿触发中断
EX0 = 1; //允许外部中断
EA = 1;
if(FlagINT) //如果有键按下
{
FlagINT = 0; //清除中断标志
ZLG7290_ReadReg(ZLG7290_Key,&KeyValue); //读取键值
return(KeyValue);
}
PCON|= 0x01; //使CPU进入空闲状态,任一中断可唤醒
}
void Display(uchar qian,uchar bai,uchar shi,uchar ge)
{
bit dp;
bit flash;
dp = 0;
flash = 0;
ZLG7290_Download(4,dp,flash,ge);
ZLG7290_Download(5,dp,flash,shi);
ZLG7290_Download(6,dp,flash,bai);
ZLG7290_Download(7,dp,flash,qian);
}
uchar Tlc549()
{
uchar i,T1=0;
Tlc549_Cs =0; //使能549
for(i=0;i<8;i++)
{
Tlc549_Clk =1; //准备好数据
T1=T1<<1; //左移1位
if(Tlc549_Data==1)
T1=T1+1; //保存本次移出的位
Tlc549_Clk =0; //打出下一位数据
}
Tlc549_Cs =1; //释放对TLC945的控制
return T1;
}
void main()
{
int DA_Value;
SystemInit(); //系统初始化
Delay(500);
while(1)
{
DA_Value=Read_Key();
if(DA_Value<10)
ZLG7290_Download(0,0,0,DA_Value);
else if(DA_Value>=10&&DA_Value<100)
{
ZLG7290_Download(0,0,0,DA_Value%10);
ZLG7290_Download(1,0,0,DA_Value/10);
}
else if(DA_Value>=100&&DA_Value<1000)
{
ZLG7290_Download(0,0,0,DA_Value%10);
ZLG7290_Download(1,0,0,(DA_Value/10)%10);
ZLG7290_Download(2,0,0,DA_Value/100);
}
else if(DA_Value>=1000&&DA_Value<10000)
{
ZLG7290_Download(0,0,0,DA_Value%10);
ZLG7290_Download(1,0,0,(DA_Value%100)/10);
ZLG7290_Download(2,0,0,(DA_Value/100)%10);
ZLG7290_Download(3,0,0,DA_Value/1000);
}
DA_Conver(DA_Value);
Delay(500);
z1=Tlc549();
Num =z1*5000/255;
qian=Num/1000; //转成BCD码
bai =Num%1000/100; //转成BCD码
shi =Num%100/10; //转成BCD码
ge =z1%10; //转成BCD码
Display(qian,bai,shi,ge);
Delay(3000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -