|
|
u8 const tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x00,0x00,0x00,0x00,0x00,0x40}; //碼表,每個板的碼表不一樣,大家可以根據(jù)需要修改
/************************595信號************************/
#define SHIFT_RCK PA4 //鎖存 有時(shí)如果用STC的可能不能用define來定義,需要sbit來定義
#define SHIFT_DATA PA0 //數(shù)據(jù)
#define SHIFT_LCHCLK PA1 //時(shí)鐘
#define SHIFT_OE PB0 //輸出使能
/*********************************************************************
* 函數(shù)名稱: Out595
* 功能描述: 其實(shí)這個是輸出鎖存信號,這樣可以實(shí)現(xiàn)多個595串起來,具體最多多少我沒試過,最多我試過7個的
* 輸入?yún)?shù):
* 輸出參數(shù): 無
* 返 回 值: 無
**********************************************************************/
void Out595(void)
{
SHIFT_RCK = 0;
//asm("nop");
//asm("nop");
SHIFT_RCK = 1;
}
/*********************************************************************
* 函數(shù)名稱: SendByte
* 功能描述: 串行輸入,發(fā)送一個字節(jié)數(shù)據(jù)
* 輸入?yún)?shù):
* 輸出參數(shù): 無
* 返 回 值: 無
**********************************************************************/
void SendByte(u16 byte)
{
u16 num,c;
if(TriFlag == 0)
num = tabTri[byte]; //因?yàn)槲乙?種不同的狀態(tài),所以這里做一個識別
else
num = tab[byte];
//SHIFT_LCHCLK = 0;
for(c=0;c<8;c++)
{
SHIFT_LCHCLK = 0;
SHIFT_DATA=((num&0x80)>>7); //分離最高位,移動到最低位
num = num<<1;
SHIFT_LCHCLK = 1;
}
//SHIFT_LCHCLK = 1;
}
/*****************下面這段就是具體送數(shù)據(jù)的了,因?yàn)槲抑挥?個8,所以只送了2次***************/
void DisplayRGY(u16 word,u8 Type)
{
u16 m,l; //百位,十位,個位
Type = 0;
if (word>9) //兩位數(shù)
{
m = (word%100)/10;
l = word%10;
}
else //一位數(shù)
{
m = 0x0a;
l = word%10;
}
if(TriFlag == 0)
{
if(Type == 0)
{
SendByte(h); //紅十位
SendByte(l); //黃個位
}
}
else
{
if(Type == 0)
{
SendByte(m); //紅十位
SendByte(l); //黃個位
}
}
Out595(); //這里送的就是鎖存的信號
} |
評分
-
查看全部評分
|