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

共37条 3/4 1 2 3 4 跳转至
助工
2011-12-18 22:39:24     打赏
21楼

串口通信
相应的代码
 
#include<reg52.h>                             
void main (void)
{


    SCON  = 0x50;      
    TMOD |= 0x20;               
    TH1   = 0xFD;             
    TR1   = 1;               
    EA    = 1;                  
    ES    = 1;                
while (1)                      
    {
    }
}
void UART_SER (void) interrupt 4 //串行中断服务程序
{
    unsigned char Temp;       
   
   if(RI)                       
     {
        RI=0;                     
        Temp=SBUF;                
        P1=Temp;                  
       SBUF=Temp;                 
    }
   if(TI)                        
     TI=0;


助工
2011-12-18 22:42:17     打赏
22楼

串口通信的图片


助工
2011-12-19 19:11:53     打赏
23楼
我也试试

助工
2011-12-22 16:42:05     打赏
24楼

/*LCD1602显示2行字符*/
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
sbit RS = P2^4;
sbit RW = P2^5;
sbit E  = P2^6;
#define Data  P0       //数据端口
char data TimeNum[]="                ";
char data Test1[]="                  ";
void DelayUs(unsigned char us)  //延时
{
  unsigned char uscnt;
  uscnt=us>>1;        /*12MHz频率*/
  while(--uscnt);
}
void DelayMs(unsigned char ms)
{
   while(--ms)
     {
         DelayUs(250);
         DelayUs(250);
  DelayUs(250);
  DelayUs(250);
     }
}
void WriteCommand(unsigned char c)
{
  DelayMs(5);
  E=0;
  RS=0;
  RW=0;
  _nop_();
  E=1;
  Data=c;
  E=0;
}
void WriteData(unsigned char c)
{
 DelayMs(5); 
 E=0;
 RS=1;
 RW=0;
 _nop_();
 E=1;
 Data=c;
 E=0;
 RS=0;
}
void ShowChar(unsigned char pos,unsigned char c)
{
 unsigned char p;
 if (pos>=0x10)
    p=pos+0xb0;
 else
    p=pos+0x80;
 WriteCommand (p);
 WriteData (c); 
}
void ShowString (unsigned char line,char *ptr)
{
  unsigned char l,i;
  l=line<<4;
  for (i=0;i<16;i++)
  ShowChar (l++,*(ptr+i));
}
void InitLcd()
{
 DelayMs(15);
 WriteCommand(0x38);
 WriteCommand(0x38);
 WriteCommand(0x38);
 WriteCommand(0x06);
 WriteCommand(0x0c);
 WriteCommand(0x01);

}
void main(void)
{
  InitLcd();        
  DelayMs(15);      
  sprintf(Test1,"  EEPW MCU DIY  "); //打印输出第一行信息
  ShowString(0,Test1);
  sprintf(TimeNum,"  HUANGXINJIE!  ");//打印输出第二行信息
  ShowString(1,TimeNum);
  while(1);
}


助工
2011-12-22 17:35:15     打赏
25楼

专家
2011-12-22 23:31:36     打赏
26楼
不错不错啊!!!

助工
2011-12-23 11:35:55     打赏
27楼

谢谢!还是很菜!继续努力!不断的进步。


助工
2011-12-23 11:52:51     打赏
28楼

//红外收发演示程序
/*正常情况下,LED4(P1.3)一直闪烁,把J7的跳帽拿掉,使之不能接收到发射管的信号,这时LED4熄灭。说明功能性正常*/
#include<reg52.h>   
#include<INTRINS.H>
sbit LED=P3^3;        //红外发射
sbit LED1=P1^3;
sbit IR=P3^2;         //红外接收
bit Flag;
void Init_Timer0(void)
{
 TMOD |= 0x01;       
 TH0=0xf0;           
 TL0=0x00;
 EA=1;                  
 ET0=1;           
 TR0=1; 
}
void Timer0_isr(void) interrupt 1 using 1
{
 TH0=0x0f;  
 TL0=0x00;
 Flag=!Flag;
}
main()
{
 Init_Timer0();   
 while(1)
 {

    LED1=IR;      
    while(Flag)   
     {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
       LED=!LED;    
     }
   }
}


助工
2011-12-23 12:56:49     打赏
29楼

助工
2011-12-24 10:55:33     打赏
30楼
//18B20温度传感器测温演示
#include<reg52.h>   
#include<math.h>
#include<INTRINS.H>
#define uchar unsigned char
#define uint   unsigned int;
sbit seg1=P2^0;
sbit seg2=P2^1;
sbit seg3=P2^2;
sbit DQ=P1^3;       //ds18b20 端口
sfr dataled=0x80;  //显示数据端口
uint temp;
uchar flag_get,count,num,minute,second;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar  str[6];
void delay1(uchar MS);
unsigned int ReadTemperature(void);
void Init_DS18B20(void);
unsigned char ReadOneChar(void);
void WriteOneChar(unsigned char dat);
void delay(unsigned int i);
main()
{
unsigned char TempH,TempL;
TMOD|=0x01;
TH0=0xef;
TL0=0xf0;
IE=0x82;
TR0=1;
P2=0x00; 
count=0;
while(1)
{
   str[5]=0x39;                  //显示C符号
   str[1]=tab[TempH/100];       //十位温度
   str[2]=tab[(TempH%100)/10]; //十位温度
   str[3]=tab[(TempH%100)%10]|0x80; //个位温度,带小数点
   str[4]=tab[TempL];
  if(flag_get==1)     
    {
  temp=ReadTemperature();
  if(temp&0x8000)
     {
     str[0]=0x40;
     temp=~temp;
  temp +=1;
  }
  else
     str[0]=0;
  TempH=temp>>4;
  TempL=temp&0x0F;
  TempL=TempL*6/10;
  flag_get=0;
    }
  }
}
void tim(void) interrupt 1 using 1
{
TH0=0xef;
TL0=0xf0;
num++;
if (num==50)
    {num=0;
   flag_get=1;
      second++;
       if(second>=60)
         {second=0;
           minute++; 
          }
      }
count++;
if(count==1)
   {P2=0;
    dataled=str[0];}
if(count==2)
   {P2=1;
    dataled=str[1];}
if(count==3)
   { P2=2;
     dataled=str[2];
     }
if(count==4)
   { P2=3;
     dataled=str[3];
     }
if(count==5)
   { P2=4;
     dataled=str[4];
     }
if(count==6)
   { P2=5;
     dataled=str[5];
     count=0;}
}
void delay(unsigned int i)//延时函数
{
 while(i--);
}
void Init_DS18B20(void)
{
 unsigned char x=0;
 DQ = 1;   
 delay(8); 
 DQ = 0;   
 delay(80);
 DQ = 1;   
 delay(10);
 x=DQ;     
 delay(5);
}
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
 {
  DQ = 0;
  dat>>=1;
  DQ = 1;
  if(DQ)
   dat|=0x80;
  delay(5);
 }
 return(dat);
}
void WriteOneChar(unsigned char dat)
{
 unsigned char i=0;
 for (i=8; i>0; i--)
 {
  DQ = 0;
  DQ = dat&0x01;
  delay(5);
  DQ = 1;
  dat>>=1;
 }
delay(5);
}
unsigned int ReadTemperature(void)
{
unsigned char a=0;
unsigned int b=0;
unsigned int t=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay(200);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
a=ReadOneChar();
b=ReadOneChar();  
b<<=8;
t=a+b;
return(t);
}

共37条 3/4 1 2 3 4 跳转至

回复

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