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