?? 7290_soft.c
字號:
#include <msp430x16x.h> //此版本為軟件模擬的zlg7290程序
#include "iic.h"
#include "general.h"
#include "7290_soft.h"
unsigned char Int_7290 ; //用于儲存P30上讀入電平,中斷時會變低
//基本顯示函數,只能顯示某一位
void zlg7290_send( unsigned char sladdr, unsigned char subaddr, unsigned char *s, unsigned char len )//其實0x70 ,0x07可以不用做為參數傳,因為它們是固定的
{
unsigned char i ;
Start_IIC() ; // 開始總線
Write8Bit( sladdr ) ; // 發送從器件地址
if( TestAck() == 2 ) //感覺TestAck() == 2不能少,少了就不會顯示,為什么?
{
P1OUT |= 0x01 ;
}
Write8Bit( subaddr ) ; // 發送子地址
if( TestAck() == 2 ) //感覺TestAck() == 2不能少,少了就不會顯示,為什么?
{
P1OUT |= 0x01 ;
}
for( i = 0 ; i < len ; i++ )
{
Write8Bit( *s ) ; // 發送數據,包括控制位與數據位
if( TestAck() == 2 ) //感覺TestAck() == 2不能少,少了就不會顯示,為什么?
{
P1OUT |= 0x01 ;
}
s++ ;
}
Stop_IIC() ; // 結束總線
DelayMs (2) ;
}
//顯示控制函數,還是只能顯示某一位,不過還可以控制閃爍,小數點
//在7290上顯示數字或字母
//loca --位置 高5位無效
//num --顯示的數字或字母,高三位無效
//flash --閃爍否 1閃爍
//dp --是否顯示小數點 1 顯示
//返回 ---無
void zlg7290_control( unsigned char loca ,unsigned char num ,unsigned char flash ,unsigned char dp )
{
unsigned char data[2] ;
unsigned char temp0 ,temp1 ;
loca=0x07 & loca;//屏蔽上5位
loca=0x60 | loca;
temp0 = dp ;
temp0 = temp0 << 7 ;
temp1 = flash ;
temp1 = temp1 << 6 ;
temp1 = temp0 | temp1 ;
num = num & 0x1f ;
num = temp1 | num ;
data[0] = loca ; //放控制位
data[1] = num ; //放數據位
zlg7290_send( 0x70 ,0x07 , data , 2 ) ; //其實0x70 ,0x07可以不用做為參數傳,因為它們是固定的
}
//基本接收函數,只能讀一個字節
void zlg7290_receive( unsigned char sladdr, unsigned char subaddr, unsigned char *s, unsigned char len )//其實0x70 ,0x01可以不用做為參數傳,因為它們是固定的
{
unsigned char i ;
Start_IIC() ; // 開始總線
Write8Bit( sladdr ) ; // 發送從器件地址,是寫啊
if( TestAck() == 2 ) //感覺TestAck() == 2不能少,少了就不會顯示,為什么?
{
P1OUT |= 0x01 ;
}
Write8Bit( subaddr ) ; //發送子地址
if( TestAck() == 2 ) //感覺TestAck() == 2不能少,少了就不會顯示,為什么?
{
P1OUT |= 0x01 ;
}
Start_IIC() ; // 再開始總線
Write8Bit( sladdr + 1 ) ; // 再次發送從器件地址,是讀啊
if( TestAck() == 2 ) //感覺TestAck() == 2不能少,少了就不會顯示,為什么?
{
P1OUT |= 0x01 ;
}
for( i = 0; i < len ; i++ )
{
*s = Read8Bit() ;
//如果len大于1這里要加ACK()
s++ ;
}
NoAck() ;
Stop_IIC() ;
}
//判斷是否有鍵按下
//返回 1 有鍵按下
// 0 沒有
unsigned char zlg7290_Int()
{
Int_7290 = ( IIC_IN & BIT0 ) ;//讀入P30電平 //和 unsigned char Int_7290 ;一起放在這個文件里時編譯通過
return( !Int_7290 ); //Int_7290中斷時才變低,平常為高
}
//讀鍵值 key_value。len = 1表示只讀一個字節。有返回值
unsigned char zlg7290_getkey()
{
unsigned char key_value ;
if( !Int_7290 )
{
zlg7290_receive( 0x70 , 0x01 , &key_value , 1 ) ;//其實0x71 ,0x01可以不用做為參數傳,因為它們是固定的
//key_value = 0x0f & key_value ;
//key_value = 0x80 | key_value ; //??
while( !zlg7290_Int ); //??8.21日看過后覺得有問題應改為下面一句
//while( !Int_7290 );//這樣就是等Int_7290再變回高電平,才能繼續
return key_value;
}
else
return 0xff;
}
void zlg7290_clear()
{
int i ;
for( i = 0 ; i < 8; i++ )
{
zlg7290_control( i ,0x1f , 0 , 0 ) ;
}
DelayMs ( 1 ) ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -