*
*/
#include<reg52.h>
#include<tm1635.h>
bdata unsigned char y //定义可以位寻址的两个全局变量
sbit y7=y^7
void write(unsigned char wr_data)
{
unsigned int i,count1
for(i=0i<8i++)//开始传送8位数据,每循环一次传送一位数据
{
CLK =0
nop
nop
wr_data >>= 1 //移位数据,低位在前!
nop
DIO = CY
nop
nop
CLK =1
nop
nop
}
//8位数据传送完1
CLK = 0 //判断芯片发过来的ACK应答信号
nop
nop
DIO = 1
nop
nop
CLK = 1
nop
nop
while(DIO)
{
count1 +=1
if(count1 ==200)//第九个脉冲高电平时等待芯片把DIO拉低,否则一定时间内自动拉低,以开始下一字节的传送
{
DIO =0
count1 =0
}
}
nop
nop //ACK应答信号
}
//读按键数据子程序
unsigned char read(void)
{
unsigned char count,x
nop
nop
CLK = 0
for(x=0x<8x++)//读按键数据开始
{
CLK = 0
nop
if(DIO==1)
{
y7 = 1
}
else
{
y7 = 0
}
CLK = 1
nop
nop
if(x!=7)
{y=(y>>1)} //读按键时,不需要开始信号,直接读8位数据。
}
CLK = 0
nop
nop
DIO = 1
nop
nop
CLK = 1
nop
nop
nop
while(DIO)
{
count +=1
if(count ==200)
{
DIO =0
count =0
}
}
nop
nop//ACK应答信号
return(y)
}
//---------开始信号------------------
void start(void)
{
CLK = 1 //给芯片发送开始信号
DIO = 1
nop
nop
DIO = 0
nop
nop
CLK = 0 //开始信号传送完
nop
}
//---------结束信号-------------------
void stop(void)
{
CLK = 0
nop
nop
DIO = 0
nop
nop
CLK = 1
nop
nop
nop
DIO = 1
}
//显示子函数
void display(unsigned char led[6])
{
unsigned char i=0
DIO = 1
CLK = 1
start() //调用开始信号
write(0x40)//写命令40H(数据设置),地址自动加一
stop() //调用结束信号,一个字节命令发送完毕,可以发送下一个命令
nop
nop
nop
nop
start() //调用开始信号
write(0xc0)//写起始地址命令(0C0H),地址从00H单元开始。
for(i=0i<4i++)
{
write(led[i]) //给显示寄存器写显示数据,值可根据实参改变
}
stop() //将所有数据送完后,发结束信号,可以发送下一条命令
nop
nop
nop
start() //调用开始信号
write(0x8b)//送开屏命令,(8BH),亮度可以根据低三位调节。
stop() //调用结束信号,一个字节命令发送完毕,可以发送下一个命令
}
//----------判按键子程序-----------
unsigned char readkey(void)
{
unsigned char key_VALUE
DIO = 1
CLK = 1
start()//调用开始信号
write(0x42) //送读按键命令(42H),
key_VALUE = read()//读8位按键数据,其中高三位为0,低5位为按键编码。编码表见说明书第5页。
stop()//发结束信号,按键读取完毕。
//dokey(key_VALUE)
return(key_VALUE)
}
lm258是低功耗双运算放大器,可用于单电源工作。lm348是四运算放大器,引脚排列和lm324一样。lm324是双电源工作的芯片,是四个741组合芯片。两种芯片引脚数,引脚排列不一样,直接替换是不行的。替换得看重新设计应用的具体电路。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)