这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 1986330 MCU DIY进程帖

共22条 2/3 1 2 3 跳转至
助工
2011-12-02 15:11:52     打赏
11楼
调试中发现,板载的蜂鸣器电路设计错了
蜂鸣器的正负极反了,按照板子上的标识焊接上后,蜂鸣器不会响
查原理图发现蜂鸣器的负极接到了VCC上

助工
2011-12-06 12:07:49     打赏
12楼

焊接过程1


助工
2011-12-08 11:51:30     打赏
13楼
焊接好后的照片

助工
2011-12-17 15:38:18     打赏
14楼

郁闷啊
购买的芯片中7805竟然输出9V多,导致板上不少芯片损坏!


助工
2011-12-17 15:39:45     打赏
15楼
串口转换芯片MAX232已经损坏,不能实现串口通信了

助工
2011-12-26 11:17:25     打赏
16楼

太郁闷了,调试中发现,不止串口芯片烧坏,其他几个主要芯片也已烧坏
DS1302、18b20、24c02等都烧坏了
太郁闷了...


助工
2011-12-26 11:20:20     打赏
17楼

展示一下代码
8位数码管显示程序:
unsigned char code DS_num[8] = {
 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07
};
 //共阴极
 unsigned char code disp_num_null[12] = {63,6,91,79,102,109,125,7,127,111,0,64};

void write_one(unsigned char ds_date,unsigned char setp)
{
 int p;
 if(setp>7)
 {
  setp = 0;
 }
 P2 = P2&0xF8;
 P2 = P2|DS_num[setp];
 D_LCK = 1;
 D_DAT = disp_num_null[ds_date];
 for(p=221;p>0;p--)
 {
  _nop_();
 }
 D_LCK = 0;
 _nop_();_nop_();_nop_();_nop_();_nop_();
}


助工
2011-12-26 11:21:05     打赏
18楼
18B20操作程序:

/*
**********************************************************************
函数:Delayxus_DS18B20
功能:DS18B20延时函数
参数:t为定时时间长度
返回:无
说明:延时公式:15u+15(近似),晶振12MHz
**********************************************************************
*/
void Delayxus_DS18B20(unsigned int t)
{
 for(t;t>0;t--)
 {
  _nop_();
  _nop_();
  _nop_();
  _nop_();
 }
 _nop_();
 _nop_();
}
/********************************************************************/
/*
*********************************************************************
函数:RST_DS18B20
功能:复位DS18B20,读取存在脉冲并返回
参数:无
返回:1:复位成功;0:复位失败
说明:拉低总线至少480us;可用于检测DS18B20工作是否正常
*********************************************************************
*/
bit RST_DS18B20(void)
{
 bit ret = 1;
 DQ = 0;   //拉低总线
 Delayxus_DS18B20(32);//为保险期间,延时495us
 DQ = 1;   //释放总线,DS18B20检测到上升沿后会发生存在脉冲
 Delayxus_DS18B20(4);//需要等待15~60us,这里延时75us后可以保持接收到的是脉冲(如果正常的话)
 ret = DQ;
 Delayxus_DS18B20(15);//延时495us,让ds18b20释放总线,避免影响到下一步的操作
 //DQ = 1; //释放总线
 return(~ret);
}
/*
*****************************************************************
函数:WR_Bit
功能:向DS18B20写一位数据
参数:i为待写的位
返回:无
说明:总线从高拉到底产生写时序
*****************************************************************
*/
void WR_Bit(bit i)
{
 DQ = 0;//产生写时序
 _nop_();
 _nop_(); //总线拉低持续时间要大于15us
 DQ = i;
 Delayxus_DS18B20(3);//延时60us;等待ds18b20采样读取
 DQ = 1;//
}
/*
*****************************************************************
函数:WR_Byte
功能:DS18B20写字节函数,先写最低位
参数:dat为待写的字数据
返回:无
说明:无
*****************************************************************
*/
void WR_Byte(unsigned char dat)
{
 unsigned char i = 0;
 while(i++<8)
 {
  WR_Bit(dat&0x01);  //从最低位写起
  dat >>= 1;
 }
}
/*
*****************************************************************
函数:Read_Bit
功能:向DS18B20读一位数据
参数:无
返回:bit i
说明:总线从高拉到底,持续1us以上,再释放总线为高电平空闲状态产生读时序
*****************************************************************
*/
unsigned char Read_Bit(void)
{
 unsigned char ret;
 DQ = 0;
 _nop_();
 _nop_();
 _nop_();  //
 DQ = 1;
 _nop_();_nop_();
 _nop_();_nop_();
 _nop_(); //
 ret = DQ;  //读时隙产生7us后读取总线数据,把总线的读取动作防灾15us时间限制的后面是为了保证数据读取的有效性
 Delayxus_DS18B20(3);  //延时60us,满足读时隙的时间长度要求
 DQ = 1;  //释放总线
 return(ret);//返回读取到的数据  
}
/*
*****************************************************************
函数:Read_Byte
功能:DS18B20读一个字节函数,先读最低位
参数:无
返回:读取的一字节数据
说明:无
*****************************************************************
*/
unsigned char Read_Byte(void)
{
 unsigned char i;
 unsigned char dat = 0;
 for(i=0;i<8;i++)
 {
  dat>>=1; //先读最低位
  if(Read_Bit())
   dat|=0x80;
 }
 return(dat);
}
/*
******************************************************************
函数:Start_DS18B20
功能:启动温度转换
参数:无
返回:无
说明:复位后写44H命令
******************************************************************
*/
void Start_DS18B20()
{
 DQ = 1;
 RST_DS18B20();
 WR_Byte(0xcc);
 WR_Byte(0x44);
}
/*
*****************************************************************
函数:Read_Tem
功能:读取温度
参数:无
返回:int型温度数据,高8位为高8位温度数据;低8位为低8位温度数据
说明:复位后写BE命令
*****************************************************************
*/
int Read_Tem()
{
 int tem = 0;
 RST_DS18B20();
 WR_Byte(0xcc);
 WR_Byte(0xbe);
 tem = Read_Byte(); //读出温度低8位
 tem|= (((int)Read_Byte())<<8); //读出温度高8位
 return tem;
}

助工
2011-12-26 11:22:10     打赏
19楼

DS1302操作程序:
//位寻址寄存器定义
sbit ACC_7 = ACC^7;
//管脚定义
sbit SCLK  = P3^5; // DS1302时钟信号7脚
sbit DIO = P3^6; // DS1302数据信号6脚
sbit CE  = P3^7; // DS1302片选5脚
/********************************************/

//地址、数据发送子程序
void Write1302 (unsigned char addr,unsigned char dat )
{
 unsigned char i,temp;
 CE=0; //CE 引脚为低,数据传送中止
 SCLK=0; //清零时钟总线
 CE = 1; //CE 引脚为高,逻辑控制 有效
 //发送地址
 for ( i=8; i>0; i-- ) //循环8次移位
 {
  SCLK = 0;
  temp = addr;
  DIO = (bit)(temp&0x01); //每次传输低字节
  addr >>= 1; //右移一位
  SCLK = 1;
 }
 //发送数据
 for ( i=8; i>0; i-- )
 {
  SCLK = 0;
  temp = dat;
  DIO = (bit)(temp&0x01);
  dat >>= 1;
  SCLK = 1;
 }
 CE = 0;
}
/*********************************************************/
//数据读取子程序
unsigned char Read1302 ( unsigned char addr )
{
 unsigned char i,temp,dat1,dat2;
 CE=0;
 SCLK=0;
 CE = 1;
 //发送地址
 for ( i=8; i>0; i-- ) //循环8次移位
 {
  SCLK = 0;
  temp = addr;
  DIO = (bit)(temp&0x01); //每次传输低字
  addr >>= 1; //右移一位
  SCLK = 1;
 }
 //读取数据
 for ( i=8; i>0; i-- )
 {
  ACC_7=DIO;
  SCLK = 1;
  ACC>>=1;
  SCLK = 0;
 }
 CE=0; 
 dat1=ACC;
 //dat2=dat1/16; //数据进制转换
 //dat1=dat1%16; //十六进制转十 进制
 //dat1=dat1+dat2*10;
 return (dat1);
}
/*********************************************************/
void set_day(unsigned char *tem_day)
{
 Write1302(WRITE_PROTECT,0x00);
 Write1302(WRITE_MONTH,tem_day[0]);
 Write1302(WRITE_DAY,tem_day[1]);
 Write1302(WRITE_YEAR,tem_day[2]); 
 Write1302(WRITE_DATE,tem_day[3]);  //年代初始化
 Write1302(WRITE_PROTECT,0x80);
}
/*********************************************************/
void set_time(unsigned char *tem_time)
{
 Write1302(WRITE_PROTECT,0x00);
 Write1302(WRITE_MONTH,tem_time[0]);
 Write1302(WRITE_DAY,tem_time[1]);
 Write1302(WRITE_YEAR,tem_time[2]); 
 Write1302(WRITE_PROTECT,0x80);
}
/*********************************************************/
void Initial(void)      //初始化 DS1302
{
 unsigned char item;
 Write1302 (WRITE_PROTECT,0X00); //禁止写保护
 Write1302 (WRITE_TCC,0x34);  //涓流充电初始化
 item = Read1302(READ_SECOND);
 Write1302(WRITE_SECOND,item|0x80);
 Write1302 (WRITE_PROTECT,0x80); //允许写保护
}


助工
2011-12-26 11:23:05     打赏
20楼
定时器程序
//====================================================
//为定时器0初始化程序
//入口参数:空
//出口参数:空
//====================================================
void timer0_init(void)
{
 TMOD &= 0xf0;
 TMOD |= 0x01;  //定时器0工作在16位定时器模式下
 TH0 = (0xFFFF-SystemClock/12/Timer25ms)>>8;//定时25ms
 TL0 = (0xFFFF-SystemClock/12/Timer25ms)%256;
 ET0 = 1;    //开启中断
 TR0 = 1;    //开始计数
}
/********************************************************/
//%%%%%%%%%%%%%%%%%%%中断服务函数%%%%%%%%%%%%%%%%%%%%%%
//====================================================
//为定时器0中断处理程序
//入口参数:空
//出口参数:空
//====================================================
void timer0_irq(void) interrupt 1
{
 EA = 0;
 TH0 = (0xFFFF-SystemClock/12/Timer10ms)>>8;//定时25ms
 TL0 = (0xFFFF-SystemClock/12/Timer10ms)%256;
 system_time ++;
 EA = 1;
}
/********************************************************/

共22条 2/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]