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

共36条 4/4 |‹ 1 2 3 4 跳转至
助工
2011-12-21 16:40:06     打赏
31楼

上来视频卡卡你看




视频地址:http://player.56.com/v_65442566.swf



通过LCD显示出来AD的数据并通过串口发送出去!


助工
2011-12-21 16:42:14     打赏
32楼
通过串口把AD的数据读出来!


视频地址:http://player.56.com/v_65442646.swf

助工
2011-12-22 11:16:25     打赏
33楼
 uchar ww;
 void init();
  void write_byte();
  void write_add(uchar control,uchar date);
   void respons();
    void start();
   void stop();
   void delay()
{;;}
/* void delay()   //延时4-5个微秒
 {
  uchar x;
  for(x=1;x>0;x--);
  } */
 
 void delay_1ms(uint z)
 {
  uint x,y;
  for(x=z;x>0;x--)
            for(y=110;y>0;y--)
                  ;
 }
 
 void start()//开始信号
 {
  SDA=1;
     delay();
   SCL=1;
     delay();
   SDA=0;
     delay();
 }
 
 void stop()      //停止信号
 {
  SDA=0;
     delay();
   SCL=1;
     delay();
   SDA=1;
     delay();
 }
 
 
 void respons()//应答  相当于一个智能的延时函数
 {
         uchar i;
   SCL=1;
     delay();
   while((SDA==1)&&(i<250))
            i++;
       SCL=0;
     delay();
 }
 
 void init()      //初始化
 {
   SDA=1;
     delay();
   SCL=1;
     delay();    
 }
 
 uchar read_byte()
 {
    uchar i,k;
         SCL=0;
     delay();
   SDA=1;
     delay();
   for(i=0;i<8;i++)
    {
          SCL=1;
             delay();
           k=(k<<1)|SDA;//先左移一位,再在最低位接受当前位
              SCL=0;
             delay();
   }
  return k;
 
 }
 
 void write_byte(uchar date)       //写一字节数据
 {
        uchar i,temp;
      temp=date;
         for(i=0;i<8;i++)
    {
          temp=temp<<1; //左移一位 移出的一位在CY中
           SCL=0;                      //只有在scl=0时sda能变化值
                 delay();
           SDA=CY;
            delay();
           SCL=1;
             delay();            
   }   
   SCL=0;
     delay();
   SDA=1;
     delay();
 }
 
 
 
 void write_add(uchar control,uchar date)
 {
         start();
   write_byte(PCF8591);        //10010000  前四位固定 接下来三位全部被接地了 所以都是0 最后一位是写 所以为低电平
         respons();
         write_byte(control);
       respons();
         write_byte(date);
  respons();
         stop();
 
 }
 
 uchar read_add()
 {
   uchar date;
        start();
   write_byte(PCF8591);
       respons();
         write_byte(0x42);
       respons();
         start();
   write_byte(PCF8591+1);      //把最后一位变成1,读
      respons();
         date=read_byte();
  stop();
    return date;
 
 }
 void main()

 SCON=0x50; //串口方式1,允许接收
 T2CON=0x34; //设定时器2 开始计数 
  RCAP2H = 0xFF;
  RCAP2L = 0xD9;//设定波特率为9600
  TR2=1;//启动定时器2
  ES=1;
  EA=1;
 init();
  
  
 while(1) 
 {
  
  ww=read_add();
  } 
  
 
 }
 
void uart0() interrupt 4
{
 
  //ww=SBUF;   
  if(RI==1)
  {
   RI=0;
   REN=0;
   
   //delay(1);
   SBUF=ww;
   REN=1;
  }  
 
 } 

助工
2011-12-22 11:18:21     打赏
34楼

助工
2011-12-22 11:21:52     打赏
35楼
数码管每一秒显示一个!


视频地址:http://player.56.com/v_65455117.swf


LED 也跟着每一秒量一次

助工
2011-12-27 23:12:00     打赏
36楼

iic  通信
幸亏有zhengningwei同志提醒,要不然我还在苦苦追寻为什么读出来不对的数据那!
有时候看多了反而给淡忘了!
哎哎!
有成长一步啊!

void statr()
{
 SDA=1;
 delay1();
 SCL=1;
 delay1();
 SDA=0;
 delay1();
 
 }
 
void stop()
{
 SDA=0;
 delay1();
 SCL=1;
 delay1();
 SDA=1;
 delay1();
  
}
void acknow()
{
 SCL=1;
 delay1();
 if(SDA==0)
 delay1();
 SCL=0;
 delay1(); 
 }
 
void write1byte(unchar addr)
{
 unchar run;
 run=addr;
 
 for(x=0;x<8;x++)
 {
 SCL=0;
 delay1();
 run=run<<1;
 SDA=CY;
 delay1();
 SCL=1;
 delay1();
 }
 SCL=0;
 delay1();
 SDA=1;
 delay1();
}

unchar read1byte()
{
 unchar com;
 for(x=0;x<8;x++)
 {
  SCL=1;
  delay1();
  com=com<<1|SDA;
  SCL=0;
  delay1();
  }
 return(com);
 }



main()
{

statr();
  write1byte(0xae);
  acknow();
  write1byte(0x00);
  acknow();
  write1byte(0x04);
  acknow();
  write1byte(0x05);
  acknow();
  stop();   
  delay(100);  
  
  statr();
  write1byte(0xae);
  acknow();
  write1byte(0x00);
  acknow();
  write1byte(0x04);
  acknow();
  
  statr();
  write1byte(0xaf);
  acknow();
  aa=read1byte();
  stop(); 
    
  P2=0X01;
  //P1=0XFD;
  P37=1;  
  P0=tabol[aa];
  P37=0;
  delay(50);
 while(1);


共36条 4/4 |‹ 1 2 3 4 跳转至

回复

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