AT89C51单片机1602液晶显示时钟程序

发布者:Qingliu2022最新更新时间:2017-09-02 来源: elecfans关键字:AT89C51  单片机  1602液晶  显示时钟 手机看文章 扫描二维码
随时随地手机看文章

这是一款AT89C51单片机1602液晶显示时钟程序,功能主要有:温度、时间、日期、星期显示以及调节。有多级菜单显示。第一级菜单调节时间、日期。第二级菜单显示自定义信息。

AT89C51单片机1602液晶显示时钟程序

#include"reg52.h"

#include"intrins.h"

#define uchar unsigned char

#define uint unsigned int

sbit DQ=P2^1;

sbit light=P2^7;

sbit k1=P1^0;

sbit k2=P1^1;

sbit k3=P1^2;

sbit k4=P1^3;

sbit k5=P1^4;

sbit LED1=P1^3;

sbit LED2=P1^4;

sbit DS1302_CE=P3^5;

sbit DS1302_IO=P3^6;

sbit DS1302_SCLK=P3^7;

sbit LCD1602_RS=P2^4;

sbit LCD1602_RW=P2^5;

sbit LCD1602_EN=P2^6;

extern uchar wendu[4];

extern void get_wendu();

extern void LCD1602_init();

extern void LCD1602_wcmd(uchar cmd);

extern void LCD1602_wdat(uchar dat);

extern void LCD1602_pos(uchar x,bit y);         //定义显示位置,x为列,y为行,0上1下

extern void LCD1602_dischar(uchar x,bit y,uchar dat); //在指定位置显示字符

extern void LCD1602_prints(uchar x,bit y,uchar *p);  //显示字符串

extern uchar dt[7];

extern void set_time();

extern void get_time();

extern void DS1302_init();

uchar dt[7];

void DS1302_write_byte(uchar dat)

{

  char i;

  for(i=0;i<8;i++)

  {

    DS1302_SCLK = 0;

        _nop_();

        _nop_();

        dat >>= 1;

        DS1302_IO = CY;

        DS1302_SCLK=1;

        _nop_();

        _nop_();

  }

}

uchar DS1302_read_byte()

{

  uchar i;

  uchar dat = 0;

  for(i=0;i<8;i++)

  {

    DS1302_SCLK = 0;

        _nop_();

        _nop_();

        dat >>= 1;

        if(DS1302_IO) dat |= 0x80;

        DS1302_SCLK =1;

        _nop_();

        _nop_();

  }

  return dat;

}

void DS1302_write(uchar address,uchar dat)

{

  DS1302_CE=0;

  _nop_();

  _nop_();

  DS1302_SCLK=0;

  _nop_();

  _nop_();

  DS1302_CE=1;

  _nop_();

  _nop_();

  DS1302_write_byte(address);

  DS1302_write_byte(dat);

  DS1302_SCLK=1;

  DS1302_CE=0;

}

uchar DS1302_read(uchar address)

{

  uchar dat;

  DS1302_CE=0;

  _nop_();

  _nop_();                                         

  DS1302_SCLK=0;

  _nop_();

  _nop_();

  DS1302_CE=1;

  _nop_();

  _nop_();

  DS1302_write_byte(address);

  dat =DS1302_read_byte();

  DS1302_SCLK=1;

  DS1302_CE=0;

  dat=dat/16*10+dat;

  return dat;

}

void DS1302_init()

{

  DS1302_write(0x8e,0x00);

  DS1302_write(0x80,0x00);

  DS1302_write(0x82,0x00);

  DS1302_write(0x84,0x12);

  DS1302_write(0x86,0x10);

  DS1302_write(0x88,0x11);

  DS1302_write(0x8a,0x06);

  DS1302_write(0x8c,0x12);

  DS1302_write(0x8e,0x80);

}

void set_time()

{

  uchar i,j=0x80;

  for(i=0;i<7;i++)

  {

    dt[i]=dt[i]/10*16+dt[i];

  }

  DS1302_write(0x8e,0x00);

  DS1302_write(0x80,0x00);

  for(i=0;i<7;i++)

  {

    DS1302_write(j,dt[i]);

    j+=2;

  }

  DS1302_write(0x8e,0x80);

}

void get_time()

{

  dt[0] =DS1302_read(0x81);

  dt[1] =DS1302_read(0x83);

  dt[2] =DS1302_read(0x85);

  dt[3] =DS1302_read(0x87);

  dt[4] =DS1302_read(0x89);

  dt[5] =DS1302_read(0x8b);

  dt[6] =DS1302_read(0x8d);

}

void chaongdiaon()                                   //充电

{

DS1302_write(0x8e,0x00);          

  _nop_();

  _nop_();

DS1302_write(0x90, 0xa6);    //使能充电   用一个二极管  用4k电阻

DS1302_write(0x8e,0x80);          

  _nop_();

  _nop_();

}

uchar code self_char[]={

                                                0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, //年

                                                0x0f,0x09,0x0f,0x09,0x0f,0x09,0x13,0x01, //月

                                                0x0f,0x09,0x09,0x0f,0x09,0x09,0x0f,0x00, //日

                                                0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00, //温度标志— —摄氏度

                                                0x00,0x04,0x0E,0x1F,0x0E,0x04,0x00,0x00, //符号◆

                                                0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //全开

                                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //

                                                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00         //

                                           };

bit lcd_busy()

{

  bit result;

  LCD1602_RS=0;

  LCD1602_RW=1;

  LCD1602_EN=1;

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  result = (bit)(P0&0x80);

  LCD1602_EN=0;

  return(result);

}

void LCD1602_wcmd(uchar cmd)

{

  while(lcd_busy());

  LCD1602_RS=0;

  LCD1602_RW=0;

  _nop_();

  _nop_();

  LCD1602_EN=1;

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  P0=cmd;

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  LCD1602_EN=0;

}

void LCD1602_wdat(uchar dat)

{

  while(lcd_busy());

  LCD1602_RS=1;

  LCD1602_RW=0;

  LCD1602_EN=1;

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  P0=dat;

  _nop_();

  _nop_();

  _nop_();

  _nop_();

  LCD1602_EN=0;

}

void LCD1602_pos(uchar x,bit y)                //指定坐标,x为列,0~15,y为行,0为第一行,1为第二行。

{

  if(y)LCD1602_wcmd(x|0xc0);

  else LCD1602_wcmd(x|0x80);

}

void LCD1602_dischar(uchar x,bit y,uchar dat)        //指定位置显示一个字符

{

  LCD1602_pos(x,y);

  LCD1602_wdat(dat);

}

void LCD1602_prints(uchar x,bit y,uchar *p)                                        //指定位置显示字符串

{

  LCD1602_pos(x,y);

  while((*p) != '\0') {LCD1602_wdat(*p);p++;}

}

void LCD1602_init()

{

  uchar i;

  LCD1602_wcmd(0x40);

  for(i=0;i<64;i++)

        {

          LCD1602_wdat(self_char[i]);

        }

  LCD1602_wcmd(0x38);

  LCD1602_wcmd(0x38);

  LCD1602_wcmd(0x0c);

  LCD1602_wcmd(0x06);

  LCD1602_wcmd(0x01);

}

uchar wendu[4];

void delay_18b20(uchar i)

{

  int j;

  for(j=0;j

}

uchar init_18b20()

{

  uchar i;

  DQ=0;

  delay_18b20(30);

  DQ=1;

  delay_18b20(3);

  i=DQ;

  delay_18b20(20);

  return(i);

}

uchar read_18b20_bit()

{

  uchar i;

  DQ=0;

  DQ=1;

  for(i=0;i<3;i++);

  return(DQ);

}

void write_18b20_bit(unsigned xbit)

{

  DQ=0;

  if(xbit==1)

  DQ=1;

  delay_18b20(5);

  DQ=1;

}

uchar read_18b20_byte()

{

  uchar i,j,value;

  j=1;

  value=0;

  for(i=0;i<8;i++)

  {

        if(read_18b20_bit())

        {

          value=value+(j<

        }

        delay_18b20(6);

  }

  return(value);

}

void write_18b20_byte(uchar x)

{

  uchar i,j;

  for(i=0;i<8;i++)

  {

        j=x>>i;

        j=j&0x01;

        write_18b20_bit(j);

        delay_18b20(5);

  }

}

void get_wendu()

{

  uchar a,b;

  float get_temp;

  int temp1,temp2;

  init_18b20();

  write_18b20_byte(0xcc);

  write_18b20_byte(0x44);

  init_18b20();

  write_18b20_byte(0xcc);

  write_18b20_byte(0xbe);

  a=read_18b20_byte();         //低8位

  b=read_18b20_byte();         //高8位

  temp1=b;

  temp1=temp1<<8;

  temp1=temp1|a;

  if(b&0xfc)

        {wendu[0]=1;temp1=~temp1+1;}                //0正1负

  else 

    wendu[0]=0;

  get_temp=temp1*0.0625;

  temp2=get_temp*10+0.5;

  wendu[1]=temp200/100;

  wendu[2]=temp2000/10;

  wendu[3]=temp2000;

}

uchar mode=0,OK=0;

uchar dis1[16],dis2[16];

//uchar IRCOM[7],IRCODE=0;

uchar NUM1,NUM2;

uchar count;

bit L=0,select=0,DIS_EN=1,SHAN;

void delay(uint i)

{

  uchar j;

  while(i-- !=0)

  {

    for(j=0;j<120;j++);

  }

}

void delay1(uchar i)

{

  uchar j;

  while(i--)

  {for(j=0;j<13;j++){}}

}

void get_dis()

{

  dis1[0]='2';

  dis1[1]='0';

  dis1[2]=0x30+dt[6]/10;

  dis1[3]=0x30+dt[6];

  dis1[4]=0;

  dis1[5]=0x30+dt[4]/10;

  dis1[6]=0x30+dt[4];

  dis1[7]=1;

  dis1[8]=0x30+dt[3]/10;

  dis1[9]=0x30+dt[3];

  dis1[10]=2;

  dis1[11]=' ';

  dis1[12]=' ';

  switch(dt[5])

  {

        case 1: {

                          dis1[13]='M';

                          dis1[14]='o';

                          dis1[15]='n';

                        }

                        break;

        case 2: {

                          dis1[13]='T';

                          dis1[14]='u';

                          dis1[15]='e';

                        }

                        break;

        case 3: {

                          dis1[13]='W';

                          dis1[14]='e';

                          dis1[15]='d';

                        }

                        break;

        case 4: {

                          dis1[13]='T';

                          dis1[14]='h';

                          dis1[15]='u';

                        }

                        break;

        case 5: {

                          dis1[13]='F';

                          dis1[14]='r';

                          dis1[15]='i';

                        }

                        break;

        case 6: {

                          dis1[13]='S';

                          dis1[14]='a';

                          dis1[15]='t';

                        }

                        break;

        case 7: {

                          dis1[13]='S';

                          dis1[14]='u';

                          dis1[15]='n';

                        }

                        break;

  }

  dis2[0]=' ';

  dis2[1]=0x30+dt[2]/10;

  dis2[2]=0x30+dt[2];

  dis2[3]=':';

  dis2[4]=0x30+dt[1]/10;

  dis2[5]=0x30+dt[1];

  dis2[6]=':';

  dis2[7]=0x30+dt[0]/10;

  dis2[8]=0x30+dt[0];

  dis2[9]=' ';

  if(wendu[0]==1)

        dis2[10]=0x2d;

  else

        dis2[10]=' ';

  dis2[11]=0x30+wendu[1];

  dis2[12]=0x30+wendu[2];

  dis2[13]='.';

  dis2[14]=0x30+wendu[3];

  dis2[15]=3;

}

void keyscan()

{

  if(k1==0)

  {

        delay(10);

        if(k1==0)

        {

           while(!k1);

          mode++;

          if(mode==1 && OK==0)

                LCD1602_wcmd(0x01);         

          if(mode==2 && OK==0)        

          {

                mode=0;

                select=0;

          }

          if(select==0 && OK==1)

          {

                if(mode==7)

                  mode=1;

          }

          if(select==1 && OK==1)

          {

                if(mode==6)

                  mode=1;

          }

        }

  }

if(k2==0)

  {

        delay(10);

        if(k2==0)

        {

          while(!k2);

          if(mode==1 && OK==0)

            {select=~select;LCD1602_wcmd(0x01);}

          NUM1++;

        }

  }

  if(k3==0)

  {

        delay(10);

        if(k3==0)

        {

          while(!k3);

          if(mode==1 && OK==0)

            {select=~select;LCD1602_wcmd(0x01);}

          NUM2++;

        }

  }

  if(k4==0)

  {

        delay(10);

        if(k4==0)

        {

          while(!k4);

          if(mode==0)

                light=~light;

          if(mode !=0)

          {

            LCD1602_wcmd(0x01);

                OK++;

                NUM1=0;

                NUM2=0;

                if(OK==2)

                {

                  LCD1602_wcmd(0x01);

                  set_time();

//                  set_alarm();

                  mode=0;

                  select=0;

                  OK=0;

                }

          }

        }

  }

  if(k5==0)

  {

        delay(100);

        if(k5==0)

        {

          while(!k5);

          DS1302_init();

        }

  }        

}        

void display()

{

  get_wendu();

  get_dis();

  if(mode==0)        //正常模式                                         

  {

        uchar i;

        LED1=1;

        get_time();

//        get_alarm();

        LCD1602_pos(0,0);

        for(i=0;i<16;i++)

          LCD1602_wdat(dis1[i]);

        LCD1602_pos(0,1);

        for(i=0;i<16;i++)

          LCD1602_wdat(dis2[i]);

  }

  if(mode==1&&OK==0)  //菜单模式

  {

        LCD1602_prints(1,0,"1.Set Time");

        LCD1602_prints(1,1,"2.About...");

        if(select)

          LCD1602_dischar(0,1,4);

        else

          LCD1602_dischar(0,0,4);

  }

  if(OK==1&&select==0)          //调日期模式

  {

        uchar i;

        LCD1602_pos(0,0);

        for(i=0;i<16;i++)

          LCD1602_wdat(dis1[i]);

        LCD1602_pos(0,1);

        for(i=0;i<10;i++)

          LCD1602_wdat(dis2[i]);

        LCD1602_prints(10,1,"Set...");

        if(SHAN==1) LCD1602_prints(10,1,"Set.  ");

        if(mode==1)                  //调分模式,秒位清零

        {

          dt[0]=0;

          LCD1602_dischar(7,1,0x30+dt[0]/10);

          LCD1602_dischar(8,1,0x30+dt[0]);

          if(NUM1!=0)

                {

                  dt[1]++;

                  if(dt[1]==60)

                        dt[1]=0;

                  LCD1602_dischar(4,1,0x30+dt[1]/10);

                  LCD1602_dischar(5,1,0x30+dt[1]);

                  NUM1=0;

                }

                if(NUM2!=0)

                {

                  dt[1]--;

                  if(dt[1]==-1)

                        dt[1]=59;

                  LCD1602_dischar(4,1,0x30+dt[1]/10);

                  LCD1602_dischar(5,1,0x30+dt[1]);

                  NUM2=0;

                }

                if(SHAN==1) LCD1602_dischar(5,1,5);

                

        }

          else

           if(mode==2)         //调时模式

           {

                    if(NUM1!=0)

                 {

                   dt[2]++;

                   if(dt[2]==24)

                         dt[2]=0;

                   LCD1602_dischar(1,1,0x30+dt[2]/10);

                   LCD1602_dischar(2,1,0x30+dt[2]);

                   NUM1=0;

                 }

                 if(NUM2!=0)

                 {

                   dt[2]--;

                   if(dt[2]==-1)

                         dt[2]=23;

                   LCD1602_dischar(1,1,0x30+dt[2]/10);

                   LCD1602_dischar(2,1,0x30+dt[2]);

                   NUM2=0;

                 }

                  if(SHAN==1) LCD1602_dischar(2,1,5);

            }

                if(mode==3)        //调星期状态

           {

                    if(NUM1!=0)

                 {

                   dt[5]++;

                   if(dt[5]==8)

                         dt[5]=1;

                   switch(dt[5])

                   {

                            case 1: LCD1602_prints(13,0,"Mon");break;

                         case 2: LCD1602_prints(13,0,"Tue");break;

                         case 3: LCD1602_prints(13,0,"Wed");break;

                         case 4: LCD1602_prints(13,0,"Thu");break;

                         case 5: LCD1602_prints(13,0,"Fri");break;

                         case 6: LCD1602_prints(13,0,"Sat");break;

                         case 7: LCD1602_prints(13,0,"Sun");break;

                   }

                   NUM1=0;

                 }

                 if(NUM2!=0)

                 {

                   dt[5]--;

                   if(dt[5]==0)

                         dt[5]=7;

                   switch(dt[5])

                   {

                            case 1: LCD1602_prints(13,0,"Mon");break;

                         case 2: LCD1602_prints(13,0,"Tue");break;

                         case 3: LCD1602_prints(13,0,"Wed");break;

                         case 4: LCD1602_prints(13,0,"Thu");break;

                         case 5: LCD1602_prints(13,0,"Fri");break;

                         case 6: LCD1602_prints(13,0,"Sat");break;

                         case 7: LCD1602_prints(13,0,"Sun");break;

                   }

                   NUM2=0;

                 }

                  if(SHAN==1) LCD1602_dischar(15,0,5);

            }

                if(mode==4)          //调日模式

           {

                    if(NUM1!=0)

                 {

                   dt[3]++;

                   if(dt[3]==32)

                         dt[3]=1;

                   LCD1602_dischar(8,0,0x30+dt[3]/10);

                   LCD1602_dischar(9,0,0x30+dt[3]);

                   NUM1=0;

                 }

                 if(NUM2!=0)

                 {

                   dt[3]--;

                   if(dt[3]==0)

                         dt[3]=31;

                   LCD1602_dischar(8,0,0x30+dt[3]/10);

                   LCD1602_dischar(9,0,0x30+dt[3]);

                   NUM2=0;

                 }

                  if(SHAN==1) LCD1602_dischar(9,0,5);

            }

                if(mode==5)                //调月模式

           {

                    if(NUM1!=0)

                 {

                   dt[4]++;

                   if(dt[4]==13)

                         dt[4]=1;

                   LCD1602_dischar(5,0,0x30+dt[4]/10);

                   LCD1602_dischar(6,0,0x30+dt[4]);

                   NUM1=0;

                 }

                 if(NUM2!=0)

                 {

                   dt[4]--;

                   if(dt[4]==0)

                         dt[4]=12;

                   LCD1602_dischar(5,0,0x30+dt[4]/10);

                   LCD1602_dischar(6,0,0x30+dt[4]);

                   NUM2=0;

                 }

                  if(SHAN==1) LCD1602_dischar(6,0,5);

            }

                if(mode==6)          //调年模式

           {

                    if(NUM1!=0)

                 {

                   dt[6]++;

                   if(dt[6]==100)

                         dt[6]=0;

                   LCD1602_dischar(2,0,0x30+dt[6]/10);

                   LCD1602_dischar(3,0,0x30+dt[6]);

                   NUM1=0;

                 }

                 if(NUM2!=0)

                 {

                   dt[6]--;

                   if(dt[6]==-1)

                         dt[6]=99;

                   LCD1602_dischar(2,0,0x30+dt[6]/10);

                   LCD1602_dischar(3,0,0x30+dt[6]);

                   NUM2=0;

                 }

                  if(SHAN==1) LCD1602_dischar(3,0,5);

            }

  }

  if(OK==1&&select==1)        //调闹铃模式

  {

          LCD1602_prints(0,0," Birthday gift  ");

          LCD1602_prints(0,1,"        --by HJL");

          delay(2000);

          LCD1602_wcmd(0x01);

          LCD1602_prints(0,0,"2013-12-04 Is   ");

          LCD1602_prints(0,1,"LiYunL birthday!");

          delay(2000);

          LCD1602_wcmd(0x01);

          LCD1602_prints(0,0,"Friends together");

          LCD1602_prints(0,1,"for life...     ");

          delay(2000);

          LCD1602_wcmd(0x01);

            mode=1 ;

          OK=0;

  }

}

void diy()

{

  LCD1602_init();

  delay(1);

  LCD1602_prints(0,0," Digital Clock  ");

  LCD1602_prints(0,1,"v1.1.0  --by HJL");

  delay(1000);

  LCD1602_wcmd(0x01);             

}

void main()

{

  IT0=1;          //外部中断0为下降沿触发

  EX0=1;          //

  TMOD=0x01;

  TH0=0x3C;                //50ms

  TL0=0xB0;

  EA=1;

  ET0=1;

  TR0=1;

  get_wendu();

  diy();

  chaongdiaon();

  while(1)

  {

    P1=0xff;

          keyscan();

        display();

  }

}

void timer0() interrupt 1

{

  TH0=0x3C;

  TL0=0xB0;

  count++;

  if(count==10)

  {

        count=0;

        SHAN=~SHAN;

  }


关键字:AT89C51  单片机  1602液晶  显示时钟 引用地址:AT89C51单片机1602液晶显示时钟程序

上一篇:AT89C51控制ESP8266WIFI模块程序
下一篇:AT89C51+DS1302+DS18B20六位数码管显示时钟程序

推荐阅读最新更新时间:2024-03-16 15:35

功耗测量辅助微控制器的选择
  当设计工程师为低功耗应用选择 微控制器 时,芯片厂商的数据手册所提供的帮助是有限的。手册不能提供业界标准的功耗评价方法,也不能说明像高速缓存( Cache )和集成浮点运算单元等功能部件是怎样影响能量消耗和性能的。   当工程师尝试比较包含了片上系统(System-on-chip)的处理器内核时,如何解释这些部件或单元带来的好处成了一个难题。供应商也用芯片的典型消耗电流数值来衡量他们的微控制器,但这种测量几乎不能说明应用运行不同程序的能量消耗。为了解决这个问题,嵌入式处理器基准协会(Embedded Processor Benchmark Consortium——EEMBC)提出了一种在特定载荷下测量能量消耗的方法。本文中
[测试测量]
功耗测量辅助<font color='red'>微控制器</font>的选择
单片机的工作原理
  可以说单片机在电子技术 中的应用越来越普遍,这得益于其优良的存储功能,并且与单片机RAM外存储器发生联系时必须通过A累加器才能顺利实现,即所有数据如果要向外部RAM传输只能通过A累加器,同样在数据读取过程中也要经过A累加器才能实现读入。这种工作机制与内部RAM有着明显的区别,即内部RAM之间能够直接传送、读入数据,但是外部RAM不可以。单片机其实是一种高集成的电路芯片,其执行程序的过程就是逐条执行指令的过程。此处所谓的指令是指需要单片机执行的相关操作采用命令的形式写出来,通常一种基本操作对应一条指令,主要是由设计人员赋予单片机的指令系统来决定的。由于单片机在执行指令的过程中需要遵循特定的顺序,所以程序中的指令也是根据同样的顺序
[单片机]
无线充电MCU出货量高速增长,兆易创新、盛群或将受益
集微网消息,目前全球带有无线充电功能的手机已经超过 70 款,尤其是三星,自 S5 开始,每一代旗舰机都标配无线充电功能。而随着新一代 iPhone 也导入无线充电技术之后,势必会吸引更多安卓手机跟风,引发手机行业新爆点。 实际上,在无线充电市场中,MCU(微控制器)一直扮演着举足轻重的角色。随着越来越多的终端厂商投入开发各种具备无线充电功能的设备,同时也在提升相关硬件模组的出货量。根据IHS报告预估,到2017年底,全球无线充电接收装置出货量可达到3.25亿台,较2016年增长近40%,预计近两年无线充电将迎来爆发,年复合增长率将超50%;2019年渗透率预计将达60%,到2019年无线充电市场规模将突破100亿美金,到2024
[手机便携]
学习51单片机必知的寄存器知识
说起单片机存储器,大家可能知道RAM和ROM,但具体需要怎么用,还需要深入了解下,那今天通程创品就来大家详细了解下51单片机存储器的相关知识,希望对大家有帮助。 程序存储器(又称数据Flash),顾名思义,是用来存储用户的程序,使单片机能够按照编写的代码顺序执行,完成指定的任务。所以程序存储器是只读存储器(只读存储器),我们已经听过很多次了。代码存储在里面,一般有常数、表格、pi值、数码管形状、SCM ID号、内部参考信号源、关机唤醒定时器频率、IRC参数等数据。 注意:单片机每次都是烧录程序,烧录就是为了把代码放到程序存储器中,而我们用的电脑则是把硬盘的数据和程序放到RAM,再用CPU去读取RAM里面的数据和程序 一
[单片机]
例说单片机数据通信之模拟IIC通信
  IIC 即Inter-Integrated Circuit(集成电路总线),这种总线类型是由飞利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实时数据传输的控制源。这种方式简化了信号传输总线。   I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。以51单片机和AT24C02介绍IO模拟IIC通信。   启始与停止   启始条件:必须在所有命令之前发送,时钟线保持高电平期
[单片机]
例说<font color='red'>单片机</font>数据通信之模拟IIC通信
富士通推出可在低电压条件下工作的8位MCU:MB95370L/MB95310L/MB95350L
富士通微电子(上海)有限公司近日宣布推出3个系列共18款内置闪存、可在低压条件下工作的高性能8位 微控制器 (属于其F2MC-8FX家族)。这些产品包括搭载了LCD控制功能的6款64引脚“MB95370L系列”、6款80引脚“MB95310L系列”,以及6款搭载2通道I2C接口的24引脚“MB95350L系列”,共3个系列18款产品。富士通将从2010年5月上旬开始提供样片、7月开始批量供货。 MB95370L、MB95310L及MB95350L系列 这些产品的开发是针对近几年在亚洲以及国内市场日益普及的血压计和血糖仪等家庭医疗产品、空调遥控器和微波炉等家用电器、温控器和压力计等各种设备。以上机器设备的普及
[工业控制]
PIC单片机开发板:数码管动态扫描程序,显示静态效果
//------------------------------------------------------------------------------------------------------------------------- /*这是自已写的:数码管动态扫描,显示静态效果 心得,显示看起来像乱码,实际上是位置不对(要选送段选,再打开位选)的缘故。 改为delay(300);则流水速度加快 */ #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x3B31);// void delay(uchar x)
[单片机]
PIC<font color='red'>单片机</font>开发板:数码管动态扫描程序,<font color='red'>显示</font>静态效果
基于80C51单片机和CH375芯片实现打印机驱动系统的设计
引言 本课题来源于北京普析通用公司的一个项目。由于公司现有单机版光谱仪器产品(如1810、T6等)采用的是并行口打印技术,而随着USB打印机技术的逐渐普及,并行口打印机越来越不好买到,而且有些用户的打印机只是USB接口而非并行口,因此现有仪器产品对打印机的支持变得不能适应用户需要。为了实现能将公司的并行口仪器直接和USB打印机相连进行打印,决定设计开发一款LPT-USB打印机的驱动器,负责并口仪器和USB打印机的连接。 本文利用单片机和USB总线接口芯片实现LPT-USB打印机的驱动器设计。利用该设计将能够实现并行打印口数据可以在USB打印机上的直接打印工作,克服了有些并口仪器必须连接并口打印机才能打印的弊端,极大地方便了用户
[单片机]
基于80C51<font color='red'>单片机</font>和CH375芯片实现打印机驱动系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved