⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cd4094.c

📁 此程序位单片机应用程序
💻 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 + -