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

📄 colorsend.c

📁 大厦LED流水显示的程序
💻 C
字号:
#include <AT89X51.H>
#include <intrins.h>
#define	uchar unsigned char

data uchar Flag;                   //启动发送标志
data uchar Row,Tier;	           //二维数组的行和列
data uchar CopyColor;
data uchar Bit_No;
code uchar SendColor[8][3] = {{0xff,0xf9,0xff},{0xff,0xff,0x3f},{0xff,0xff,0xe7},{0xff,0xff,0xfc},
						   	 {0x9f,0xff,0xff},{0xf3,0xff,0xff},{0xfe,0x7f,0xff},{0xff,0xcf,0xff}};

sbit	DATAIN = P1^0;
sbit	LAT = P1^1;
sbit	CLK	= P1^2;
sbit	OE = P1^3;

//定时器中断服务子程序
void Timer0(void) interrupt 1	   //关键字要小写,原来用大写,编译出了很多问题
{
   TR0 = 0;
   TH0 = 0x28;				       //60毫秒显示延迟
   TL0 = 0x00;
   Flag = 1;					   //定时时间到,置发送标志位
}

//初始化子程序
void Ini(void)
{								   //定时器0方式1
   TMOD = 0x01;
   TH0 = 0X28;
   TL0 = 0X00;
   ET0 = 1;
   EA = 1;
   OE = 0;
}

//发送子程序
void SendData(void)
{
   Row = 0;							    //指向0行
   for(Tier = 0;Tier < 3;Tier++)
     {
        CopyColor = SendColor[Row][Tier];
        for(Bit_No = 8;Bit_No > 0;Bit_No--)
          {
             P1 &= 0xfe;				//清p1.0
             P1 |= (CopyColor & 0x01);	//取待送的数据位并发送,并保护P1口其他位,注意这里并没有改变P1和CopyColor其他位的值
             CLK = 1;
             CLK = 0;					//产生一个移位脉冲
             _cror_(CopyColor,1);       //循环右移1位,或将CopyColor定义在可位寻址段,用DATAIN=CopyColor^x实现位输出
          }
     }
   Row++;								//指向下一行
   if(Row >= 8)							//
     {
	    Row = 0;
	 }
   Flag = 0;
   LAT = 1;								//打开输出锁存,595输出数据
   LAT = 0;								//锁存数据
}

//主程序
void main(void)
{
   Ini();
   while(1)
     {
        SendData();
        TR0 = 1;
        while(!Flag){}		            //定时时间未到则等
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -