国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

單片機lcd改進版時鐘

2019-11-11 04:12:41
字體:
來源:轉載
供稿:網友
#include<reg52.h>#include<intrins.h>#define KeyPort P3//?¨ò?°′?ü???ú#define  _Nop()  _nop_()        //?¨ò?????á?#define RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0#define Led Port P1 //?¨ò?êy?Y???ú 3ìDò?Dó?μ?DataPort ?òó?P0 ì???sbit SPK=P2^2;sbit SDA=P2^1;            //?£?aI2Cêy?Y′??í??sbit SCL=P2^0;            //?£?aI2Cê±?ó??????sbit RS = P2^4;   //?¨ò????ú sbit RW = P2^5;sbit EN = P2^6;bit ack;              //ó|′e±ê????unsigned char hour,minute,second;//?¨ò?ê±·???unsigned int num ;unsigned char flag1,flag2,flag3;unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char TempData[8]; //′?′¢??ê??μμ?è???±?á?void LCD_Init(void); bit LCD_Check_Busy(void); void LCD_Write_Com(unsigned char com); void LCD_Write_Data(unsigned char Data);  void LCD_Clear(void); void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);  void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data);  void DelayUs2x(unsigned char t);//us???óê±oˉêyéù?÷ void DelayMs(unsigned char t); //ms???óê±void Display();//êy??1ü??ê?oˉêyunsigned char KeyScan(void);//?ü?ìé¨?èvoid Init_Timer0(void);//?¨ê±?÷3?ê??ˉvoid ISR_Key(void) interrupt 0 using 1{ P1=~P1;     //??è??D??3ìDò?′DD3ìDò£?//′?ê±?éò?í¨1y EA=0??á??Yê±1?μ??D??    }void Start_I2c(){  SDA=1;   //·¢?í?eê?ì??tμ?êy?YD?o?  _Nop();  SCL=1;  _Nop();    //?eê?ì??t?¨á¢ê±??′óóú4.7us,?óê±  _Nop();  _Nop();  _Nop();  _Nop();      SDA=0;     //·¢?í?eê?D?o?  _Nop();    //?eê?ì??t???¨ê±??′óóú4|ì  _Nop();  _Nop();  _Nop();  _Nop();         SCL=0;    //?ˉ×?I2C×ü??£?×?±?·¢?í?ò?óê?êy?Y  _Nop();  _Nop();}/*------------------------------------------------                    ?áê?×ü??------------------------------------------------*/void Stop_I2c(){  SDA=0;    //·¢?í?áê?ì??tμ?êy?YD?o?  _Nop();   //·¢?í?áê?ì??tμ?ê±?óD?o?  SCL=1;    //?áê?ì??t?¨á¢ê±??′óóú4|ì  _Nop();  _Nop();  _Nop();  _Nop();  _Nop();  SDA=1;    //·¢?íI2C×ü???áê?D?o?  _Nop();  _Nop();  _Nop();  _Nop();}/*----------------------------------------------------------------                 ×??úêy?Y′??íoˉêy               oˉêy?-Dí: void  SendByte(unsigned char c);1|?ü:  ??êy?Yc·¢?í3?è¥,?éò?ê?μ??·,ò2?éò?ê?êy?Y,·¢íêoóμè′yó|′e,2¢??     ′?×′ì?????DD2ù×÷.(2?ó|′e?ò·?ó|′e??ê1ack=0 ?ù)          ·¢?íêy?Y?y3££?ack=1; ack=0±íê?±????÷?Tó|′e?ò?e?μ?£------------------------------------------------------------------*/void  SendByte(unsigned char c){ unsigned char BitCnt;  for(BitCnt=0;BitCnt<8;BitCnt++)  //òa′??íμ?êy?Y3¤?è?a8??    {     if((c<<BitCnt)&0x80)SDA=1;   //?D??·¢?í??       else  SDA=0;                     _Nop();     SCL=1;               //??ê±?ó???a??£?í¨?a±????÷?aê??óê?êy?Y??      _Nop();       _Nop();             //±£?¤ê±?ó??μ????ü?ú′óóú4|ì      _Nop();      _Nop();      _Nop();              SCL=0;     }        _Nop();    _Nop();    SDA=1;               //8??·¢?ííêoóêí·?êy?Y??£?×?±??óê?ó|′e??    _Nop();    _Nop();       SCL=1;    _Nop();    _Nop();    _Nop();    if(SDA==1)ack=0;            else ack=1;        //?D??ê?·??óê?μ?ó|′eD?o?    SCL=0;    _Nop();    _Nop();}/*----------------------------------------------------------------                 ×??úêy?Y′??íoˉêy               oˉêy?-Dí: unsigned char  RcvByte();1|?ü:  ó?à′?óê?′ó?÷?t′?à′μ?êy?Y,2¢?D??×ü??′í?ó(2?·¢ó|′eD?o?)£?     ·¢íêoó??ó?ó|′eoˉêy?£  ------------------------------------------------------------------*/unsigned char  RcvByte(){  unsigned char retc;  unsigned char BitCnt;    retc=0;   SDA=1;             //??êy?Y???aê?è?·?ê?  for(BitCnt=0;BitCnt<8;BitCnt++)      {        _Nop();                   SCL=0;       //??ê±?ó???aμí£?×?±??óê?êy?Y??        _Nop();        _Nop();      //ê±?óμíμ????ü?ú′óóú4.7us        _Nop();        _Nop();        _Nop();        SCL=1;       //??ê±?ó???a??ê1êy?Y??é?êy?YóDD§        _Nop();        _Nop();        retc=retc<<1;        if(SDA==1)retc=retc+1; //?áêy?Y??,?óê?μ?êy?Y??·?è?retc?D        _Nop();        _Nop();       }  SCL=0;      _Nop();  _Nop();  return(retc);}/*----------------------------------------------------------------                     ó|′e×óoˉêy?-Dí:  void Ack_I2c(void); ----------------------------------------------------------------*/void Ack_I2c(void){    SDA=0;       _Nop();  _Nop();  _Nop();        SCL=1;  _Nop();  _Nop();              //ê±?óμíμ????ü?ú′óóú4|ì  _Nop();  _Nop();  _Nop();    SCL=0;               //??ê±?ó??£??ˉ×?I2C×ü??ò?±??ìD??óê?  _Nop();  _Nop();    }/*----------------------------------------------------------------                     ·?ó|′e×óoˉêy?-Dí:  void NoAck_I2c(void); ----------------------------------------------------------------*/void NoAck_I2c(void){    SDA=1;  _Nop();  _Nop();  _Nop();        SCL=1;  _Nop();  _Nop();              //ê±?óμíμ????ü?ú′óóú4|ì  _Nop();  _Nop();  _Nop();    SCL=0;                //??ê±?ó??£??ˉ×?I2C×ü??ò?±??ìD??óê?  _Nop();  _Nop();    }/*----------------------------------------------------------------                    ?ò?T×óμ??·?÷?t·¢?í×??úêy?Yoˉêy               oˉêy?-Dí: bit  ISendByte(unsigned char sla,ucahr c);  1|?ü:     ′ó???ˉ×ü??μ?·¢?íμ??·£?êy?Y£??áê?×ü??μ?è?1y3ì,′ó?÷?tμ??·sla.           è?1?·μ??1±íê?2ù×÷3é1|£?·??ò2ù×÷óD?ó?£×¢òa£o    ê1ó??°±?D?ò??áê?×ü???£----------------------------------------------------------------*//*bit ISendByte(unsigned char sla,unsigned char c){   Start_I2c();               //???ˉ×ü??   SendByte(sla);             //·¢?í?÷?tμ??·     if(ack==0)return(0);   SendByte(c);               //·¢?íêy?Y     if(ack==0)return(0);  Stop_I2c();                 //?áê?×ü??  return(1);}*//*----------------------------------------------------------------                    ?òóD×óμ??·?÷?t·¢?í?à×??úêy?Yoˉêy               oˉêy?-Dí: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  1|?ü:     ′ó???ˉ×ü??μ?·¢?íμ??·£?×óμ??·,êy?Y£??áê?×ü??μ?è?1y3ì,′ó?÷?t          μ??·sla£?×óμ??·suba£?·¢?í?úèYê?s???òμ??úèY£?·¢?íno??×??ú?£           è?1?·μ??1±íê?2ù×÷3é1|£?·??ò2ù×÷óD?ó?£×¢òa£o    ê1ó??°±?D?ò??áê?×ü???£----------------------------------------------------------------*/bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no){   unsigned char i;   Start_I2c();               //???ˉ×ü??   SendByte(sla);             //·¢?í?÷?tμ??·     if(ack==0)return(0);   SendByte(suba);            //·¢?í?÷?t×óμ??·     if(ack==0)return(0);   for(i=0;i<no;i++)    {        SendByte(*s);            //·¢?íêy?Y     DelayMs(1);       if(ack==0)return(0);     s++;    }  Stop_I2c();                  //?áê?×ü??  return(1);}/*----------------------------------------------------------------                    ?ò?T×óμ??·?÷?t?á×??úêy?Yoˉêy               oˉêy?-Dí: bit  IRcvByte(unsigned char sla,ucahr *c);  1|?ü:     ′ó???ˉ×ü??μ?·¢?íμ??·£??áêy?Y£??áê?×ü??μ?è?1y3ì,′ó?÷?tμ?          ?·sla£?·μ???μ?úc.           è?1?·μ??1±íê?2ù×÷3é1|£?·??ò2ù×÷óD?ó?£×¢òa£o    ê1ó??°±?D?ò??áê?×ü???£----------------------------------------------------------------*//*bit IRcvByte(unsigned char sla,unsigned char *c){   Start_I2c();                //???ˉ×ü??   SendByte(sla+1);            //·¢?í?÷?tμ??·     if(ack==0)return(0);   *c=RcvByte();               //?áè?êy?Y     NoAck_I2c();              //·¢?í·??í′e??     Stop_I2c();               //?áê?×ü??  return(1);}*//*----------------------------------------------------------------                    ?òóD×óμ??·?÷?t?áè??à×??úêy?Yoˉêy               oˉêy?-Dí: bit  ISendStr(unsigned char sla,unsigned char suba,ucahr *s,unsigned char no);  1|?ü:     ′ó???ˉ×ü??μ?·¢?íμ??·£?×óμ??·,?áêy?Y£??áê?×ü??μ?è?1y3ì,′ó?÷?t          μ??·sla£?×óμ??·suba£??á3?μ??úèY·?è?s???òμ?′?′¢??£??áno??×??ú?£           è?1?·μ??1±íê?2ù×÷3é1|£?·??ò2ù×÷óD?ó?£×¢òa£o    ê1ó??°±?D?ò??áê?×ü???£----------------------------------------------------------------*/bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no){   unsigned char i;   Start_I2c();               //???ˉ×ü??   SendByte(sla);             //·¢?í?÷?tμ??·     if(ack==0)return(0);   SendByte(suba);            //·¢?í?÷?t×óμ??·     if(ack==0)return(0);   Start_I2c();   SendByte(sla+1);      if(ack==0)return(0);   for(i=0;i<no-1;i++)    {        *s=RcvByte();              //·¢?íêy?Y      Ack_I2c();                //·¢?í?í′e??      s++;    }    *s=RcvByte();    NoAck_I2c();                 //·¢?í·?ó|??   Stop_I2c();                    //?áê?×ü??  return(1);}/*------------------------------------------------                    ?÷oˉêy------------------------------------------------*/void main (void){unsigned char num1;unsigned char temp = 0;unsigned char i,j = 0;                   LCD_Init(); LCD_Clear(); LCD_Write_String(6,1,"clock");  while (1)         //?÷?-?·  {if(flag2 == 1){DelayMs(1);    SPK=!SPK;Display();flag2 = 0;}if(minute == 0&&second <= 10) { if(second%2)P1 = 0x55;elseP1 = 0xaa;}elseP1 = 0xff;while(flag1){      if(num%2)   SPK=1; else SPK = 0; i++; if(i==200) {i=0;flag1++;break; } }num1=KeyScan();switch(num1)  {       case 1:hour++;if(hour==24)hour=0;     //?y3£ê±?? D?ê± ?ó1             break;case 2:hour--;if(hour==255)hour=23;   //?y3£ê±?? D?ê±??1        break;case 3:minute++;if(minute==60)minute=0;     //·??ó?ó1        break;case 4:minute--;if(minute==255)minute=59;   //·??ó??1        break;case 5:{Init_Timer0();IRcvStr(0xae,4,&hour,1);  IRcvStr(0xae,5,&minute,1);  IRcvStr(0xae,6,&second,1);  break;  }case 6:{if(temp%2 == 0)EA = 1;elseEA = 0;temp++;break;}case 7: hour = 0;minute = 0;second = 0; break; default:break;  }}}/*------------------------------------------------ uS?óê±oˉêy£?o?óDê?è?2?êy unsigned char t£??T·μ???μ unsigned char ê??¨ò??T·?o?×?·?±?á?£????μμ?·??§ê? 0~255 ?aà?ê1ó??§??12M£???è·?óê±??ê1ó???±à,′ó???óê± 3¤?èè??? T=tx2+5 uS ------------------------------------------------*/void DelayUs2x(unsigned char t){    while(--t);}/*------------------------------------------------ mS?óê±oˉêy£?o?óDê?è?2?êy unsigned char t£??T·μ???μ unsigned char ê??¨ò??T·?o?×?·?±?á?£????μμ?·??§ê? 0~255 ?aà?ê1ó??§??12M£???è·?óê±??ê1ó???±à------------------------------------------------*/void DelayMs(unsigned char t){      while(t--) {     //′ó???óê±1mS     DelayUs2x(245);DelayUs2x(245); }}/*------------------------------------------------ ??ê?oˉêy£?ó?óú?ˉì?é¨?èêy??1ü ê?è?2?êy FirstBit ±íê?Dèòa??ê?μ?μúò???£?è??3?μ2±íê?′óμúèy??êy??1ü?aê???ê? è?ê?è?0±íê?′óμúò?????ê??£ Num±íê?Dèòa??ê?μ???êy£?è?Dèòa??ê?99á???êy?μ?ò???μê?è?2------------------------------------------------*/void Display(){      unsigned char h0,h1, m0,m1 ,s0,s1; h0 = hour/10+48; h1 = hour%10+48; m0 = minute/10+48; m1 = minute%10+48; s0 = second/10+48; s1 = second%10+48;    LCD_Write_Char(3,0,h0); LCD_Write_Char(4,0,h1); LCD_Write_Char(5,0,':'); LCD_Write_Char(6,0,m0); LCD_Write_Char(7,0,m1); LCD_Write_Char(8,0,':'); LCD_Write_Char(9,0,s0); LCD_Write_Char(10,0,s1);     ISendStr(0xae,4,&hour,1); ISendStr(0xae,5,&minute,1); ISendStr(0xae,6,&second,1);         }/*------------------------------------------------                    ?¨ê±?÷3?ê??ˉ×ó3ìDò------------------------------------------------*/void Init_Timer0(void){ TMOD |= 0x01;  //ê1ó??£ê?1£?16???¨ê±?÷£?ê1ó?"|"·?o??éò??úê1ó??à???¨ê±?÷ê±2?êüó°?ì     //TH0=0x00;      //???¨3??μ //TL0=0x00; EA=1;            //×ü?D??′ò?a ET0=1;           //?¨ê±?÷?D??′ò?a TR0=1;           //?¨ê±?÷?a1?′ò?a}/*------------------------------------------------                 ?¨ê±?÷?D??×ó3ìDò------------------------------------------------*/void Timer0_isr(void) interrupt 1 { TH0=(65536-2000)/256;//??D??3?μ 2ms TL0=(65536-2000)%256; num++;  if(num==500)        //′ó??1s   {    num=0;second++; flag2 = 1; if(second==60)  //??μ?60£?·??ó?ó1{ second=0;   minute++;  if(minute==60)//·??óμ?60£?D?ê±?ó1   {flag1 = 1;minute=0;hour++;if(hour==24)//D?ê±μ?24£???á?  hour=0;}}     }}/*------------------------------------------------°′?üé¨?èoˉêy£?·μ??é¨?è?ü?μ------------------------------------------------*/unsigned char KeyScan(void){ unsigned char keyvalue; if(KeyPort!=0xff)   {    DelayMs(10);    if(KeyPort!=0xff)  {   keyvalue=KeyPort;   while(KeyPort!=0xff);switch(keyvalue){case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;case 0xf7:return 4;break;case 0xef:return 5;break;case 0xdf:return 6;break;case 0xbf:return 7;break;case 0x7f:return 8;break;default:return 0;break;} }   }   return 0;}  /*------------------------------------------------              ?D?|oˉêy------------------------------------------------*/ bit LCD_Check_Busy(void)  {  DataPort= 0xFF;  RS_CLR;  RW_SET;  EN_CLR;  _nop_();  EN_SET; return (bit)(DataPort & 0x80); }/*------------------------------------------------              D′è??üá?oˉêy------------------------------------------------*/ void LCD_Write_Com(unsigned char com)  {  // while(LCD_Check_Busy()); //?|?òμè′y DelayMs(5); RS_CLR;  RW_CLR;  EN_SET;  DataPort= com;  _nop_();  EN_CLR; }/*------------------------------------------------              D′è?êy?Yoˉêy------------------------------------------------*/ void LCD_Write_Data(unsigned char Data)  {  //while(LCD_Check_Busy()); //?|?òμè′y DelayMs(5); RS_SET;  RW_CLR;  EN_SET;  DataPort= Data;  _nop_(); EN_CLR; }/*------------------------------------------------                ???áoˉêy------------------------------------------------*/ void LCD_Clear(void)  {  LCD_Write_Com(0x01);  DelayMs(5); }/*------------------------------------------------              D′è?×?·?′?oˉêy------------------------------------------------*/ void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)  {      if (y == 0)   {     LCD_Write_Com(0x80 + x);     //±íê?μúò?DD  } else   {        LCD_Write_Com(0xC0 + x);      //±íê?μú?tDD  }         while (*s)   {      LCD_Write_Data( *s);      s ++;       } }/*------------------------------------------------              D′è?×?·?oˉêy------------------------------------------------*/ void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)  {      if (y == 0)   {       LCD_Write_Com(0x80 + x);       }     else   {       LCD_Write_Com(0xC0 + x);       }         LCD_Write_Data( Data);   }/*------------------------------------------------              3?ê??ˉoˉêy------------------------------------------------*/ void LCD_Init(void)  {   LCD_Write_Com(0x38);    /*??ê??£ê?éè??*/    DelayMs(5);    LCD_Write_Com(0x38);    DelayMs(5);    LCD_Write_Com(0x38);    DelayMs(5);    LCD_Write_Com(0x38);     LCD_Write_Com(0x08);    /*??ê?1?±?*/    LCD_Write_Com(0x01);    /*??ê????á*/    LCD_Write_Com(0x06);    /*??ê?1a±êò??ˉéè??*/    DelayMs(5);    LCD_Write_Com(0x0C);    /*??ê??a?°1a±êéè??*/   }   /*------------------------------------------------                    ?÷oˉêy------------------------------------------------*/  
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武定县| 娄烦县| 象山县| 康乐县| 察雅县| 卢氏县| 惠来县| 井研县| 平江县| 马鞍山市| 临沧市| 芜湖县| 娄烦县| 内乡县| 中超| 两当县| 酒泉市| 施甸县| 永德县| 永兴县| 自治县| 庆安县| 遂昌县| 浦城县| 延安市| 临高县| 岚皋县| 漯河市| 青铜峡市| 东阳市| 宁南县| 沭阳县| 壤塘县| 图木舒克市| 三明市| 紫阳县| 定南县| 丹寨县| 林州市| 鄂托克旗| 和静县|