📄 cd4094.c
字号:
/* 本程序意在通过串口控制4094,使八路发光管组合输出128种状态*/
#include "STC89C51.h"
#include "init.h"
#define uch unsigned char
#define TRUE 1
#define FALSE 0
uch key=0;
uch t;
uch pulse_num; //脉冲计数
uch clock_level; //时钟电平
uch CD4094_data; //4094处理的数据
void send_4094() /*自变量可否为位。若可以,就可写个通用函数*/
{
uch z;
if (pulse_num<8)
{
if (clock_level==0)
{
z=CD4094_data&(0x80>>(pulse_num));//由低向高产生数据,&位与,z是字节数,不是位数
if (z>=1)
//if (CD4094_data&(0x01<<pulse_num)==1)
POWER_DATE=1;
else
POWER_DATE=0;
POWER_CLOCK=1;
clock_level=1;
pulse_num++;
}
else if(clock_level==1)
{
POWER_DATE=0;
POWER_CLOCK=0;
clock_level=0;
}
}
else
{
pulse_num=0;
POWER_CS=1;
POWER_CS=0;
CD4094_data=0;
TR0=0; //定时器计数条件3-1
ET0=0; //定时器中断条件3-3,开启定时器0中断
key=0;
}
}
void timer0() interrupt 1 //定时器0中断函数,在允许中断情况下,定时器溢出时产生动作。
{
if (CD4094_data!=0)
send_4094();
}
void init()
{
POWER_CS=0; //
POWER_DATE=0;
POWER_CLOCK=0;
///////////////////////////////////
TMOD=0X22; //T1,T2工作于方式2自动重装8位计数器
TL1=0xfd;
TH1=0xfd;
SCON=0x50; //01010000,方式一,允许接收
PCON=0x00;
TR1=1; //允许T1运行
///////////////////////////////////////////
TH0=0xCD;//50ms定时cd
TL0=0xCD;//0XFF-0xCD=0x32=50,000
EA=1; //定时器中断条件3-2
}
void main()
{
init();
while (1)
{
if (RI==1)
{
CD4094_data=SBUF;
RI=0;
if (CD4094_data!=0)
{
TR0=1; //定时器计数条件3-1
ET0=1; //定时器中断条件3-3,开启定时器0中断
}
else
{
TR0=0; //定时器计数条件3-1
ET0=0; //定时器中断条件3-3,开启定时器0中断
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -