高级会员
- 积分
- 753
- 金钱
- 753
- 注册时间
- 2016-6-2
- 在线时间
- 55 小时
|
2金钱
用了个TM1640的数码管驱动IC做了个板,单片机用的是STC的,
,,,,问题来了,,,,,
程序写好了,可是数码管不给面子,就是全黑着脸,
小弟出来乍到是不知所错啊,硬件接法是OK的,强行用电实验过;
下面附上代码还望大侠赐教,,,,,,
还问下date的数据怎么产生(新来的不明白啊)
#include<reg51.h>
#include<intrins.h>
#define Delay(us) {_nop_();_nop_();_nop_();_nop_();}
#define FOSC 18432000L
//*******1640驱动************
sbit sda=P0^0; //TM1640数据线
sbit scl=P0^1; //TM1640时钟线
unsigned char date[16] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//*****************************
//*********START***************
void start() //1640开始
{
//scl=0;
sda=1;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
scl=0;
_nop_();
_nop_();
}
//**************************************************************
void stop() //1640结束
{
scl=0;
_nop_();
_nop_();
sda=0;
//scl=1;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
sda=1;
_nop_();
_nop_();
}
//***********************************************************
void write(unsigned char date) //1640写字节
{
unsigned char i,aa;
aa=date;
//sda=0;
//scl=0;
for(i=0;i<8;i++)
{
scl=0;
if(aa&0x01)
{
sda=1;
_nop_();
_nop_();
}
else
{
sda=0;
_nop_();
_nop_();
}
scl=1;
_nop_();
aa=aa>>1;
}
//scl=0;
//sda=0;
}
//**************向TM1640发送显示数据***************************
void send(unsigned char date1)
//void send()
{
unsigned char ii;
// unsigned char mask;
start();
write(0x40); //设置数据,地址加1模式
stop();
start();
write(0xC0); //起始地址
for(ii=0;ii<16;ii++) //16个地址
{
write(date1);
}
/* for(mask=0x80;mask!=0;mask>>=1)
{
if((mask&date1) == 0)
I2C_SDA = 0;
else
I2C_SDA = 1;
I2CDelay();
I2C_SCL = 1;
I2CDelay();
I2C_SCL = 0;
}*/
stop();
start();
write(0x8f); //控制显示,开显示,脉冲宽度为14/16
stop();
}
/*
void send1()
{
unsigned char i;
start();
//write(0x40); //设置数据,地址加1模式
write(0x44); //固定地址模式
stop();
start();
write(0x00);
write(0xff);
stop();
start();
write(0x01);
write(0x01);
stop();
start();
write(0x02);
write(0x01);
stop();
start();
write(0x03);
write(0x01);
stop();
start();
write(0x04);
write(0x01);
stop();
start();
write(0x05);
write(0x01);
stop();
start();
write(0x06);
write(0x01);
stop();
start();
write(0x8f); //控制显示,开显示,脉冲宽度为14/16
stop();
}
*/
//**********************************************************
void delay(unsigned int z) //延时子程序
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=487;y>0;y--);
}
void main()
{
while(1)
{
send();
}
}
|
最佳答案
查看完整内容[请看2#楼]
自己瞎搞了下,数码管终于是露出了尴尬的笑容,但是我想让他在不同的情况下做不同的表情,在又是一个新宇宙的探索啊。(上述问题解决,我是给date1赋值值0x00,0xff;)
|