?? colorsend.c
字號:
#include <AT89X51.H>
#include <intrins.h>
#define uchar unsigned char
data uchar Flag; //啟動發(fā)送標志
data uchar Row,Tier; //二維數(shù)組的行和列
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; //定時時間到,置發(fā)送標志位
}
//初始化子程序
void Ini(void)
{ //定時器0方式1
TMOD = 0x01;
TH0 = 0X28;
TL0 = 0X00;
ET0 = 1;
EA = 1;
OE = 0;
}
//發(fā)送子程序
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); //取待送的數(shù)據(jù)位并發(fā)送,并保護P1口其他位,注意這里并沒有改變P1和CopyColor其他位的值
CLK = 1;
CLK = 0; //產生一個移位脈沖
_cror_(CopyColor,1); //循環(huán)右移1位,或將CopyColor定義在可位尋址段,用DATAIN=CopyColor^x實現(xiàn)位輸出
}
}
Row++; //指向下一行
if(Row >= 8) //
{
Row = 0;
}
Flag = 0;
LAT = 1; //打開輸出鎖存,595輸出數(shù)據(jù)
LAT = 0; //鎖存數(shù)據(jù)
}
//主程序
void main(void)
{
Ini();
while(1)
{
SendData();
TR0 = 1;
while(!Flag){} //定時時間未到則等
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -