📄 colorsend.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 + -