久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3036|回復(fù): 3
收起左側(cè)

基于STC12C5A60S2的帶有掉電記憶功能的音樂盒

[復(fù)制鏈接]
ID:475984 發(fā)表于 2019-2-12 18:11 | 顯示全部樓層 |閱讀模式
晶振值33.1776MHz
功能簡介:K16控制暫停與繼續(xù)
          K4 上一曲
     K12下一曲
    數(shù)碼管顯示當(dāng)前歌曲序號

具有l(wèi)cd1602顯示功能

應(yīng)用EEPROM具有掉電記憶
默認(rèn)演奏上次斷電所演奏的歌曲
主函數(shù)
  1. #include <stc12c5a60s2.h>
  2. #define Xtal 33177600  //賦晶振值
  3. #define All 4          //歌曲總數(shù)


  4. sbit BUZZ = P1^3;  //蜂鳴器控制引腳
  5. sbit KEY = P2^4;   //按鍵定義
  6. sbit KEY4 = P2^7;
  7. sbit KEY12 = P2^5;
  8. /*sbit ADDR0 = P2^0; //數(shù)碼管顯示控制
  9. sbit ADDR1 = P2^1;
  10. sbit ADDR2 = P2^2;
  11. sbit ENLED = P1^1; //總線收發(fā)器*/

  12. bit KeySta = 1;  //當(dāng)前按鍵狀態(tài)
  13. bit KeySta4 = 1;  
  14. bit KeySta12 = 1;
  15. bit backup = 1;  //默認(rèn)彈起時(shí)時(shí)一
  16. bit backup4 = 1;
  17. bit backup12 = 1;
  18. bit cntkey = 0;  //判斷暫停還是播放
  19. bit breakflage = 0;//用按鍵改變歌曲標(biāo)志

  20. unsigned char keybuf = 0xFF;
  21. unsigned char keybuf4 = 0xFF;
  22. unsigned char keybuf12 = 0xFF;
  23. unsigned char Num; //第幾首歌
  24. unsigned char sizeofNote;//節(jié)拍的多少

  25. void E2WriteByte(unsigned char addr, unsigned char dat);
  26. unsigned char E2ReadByte(unsigned char addr);
  27. void Delay_ms(unsigned int ms);//延時(shí)函數(shù)
  28. extern void I2CStart();
  29. extern void I2CStop();
  30. extern unsigned char I2CReadNAK();
  31. extern bit I2CWrite(unsigned char dat);
  32. extern void LcdWriteCmd(unsigned char cmd);
  33. extern void LcdWaitReady();
  34. extern void InitLcd1602();
  35. extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);

  36. void lcd1602updata();
  37. void PlayControl(unsigned char Num);//歌曲選擇函數(shù)
  38. void Play();//演奏函數(shù)

  39. //unsigned char code LedChar[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};//數(shù)碼管顯示字符轉(zhuǎn)換表
  40. unsigned int code NoteFrequ[] = {  //中音1-7低音1-7和高音1-7對應(yīng)頻率列表
  41.     523,  587,  659,  698,  784,  880,  988,  //中音1-7
  42.     1047, 1175, 1319, 1397, 1568, 1760, 1976,  //高音1-7
  43.           262, 294, 330, 349, 392, 440, 494,300//低音1-7  最后一個(gè)純屬湊數(shù)
  44. };
  45. unsigned int code NoteReload[] = { //中音1-7和高音1-7對應(yīng)的定時(shí)器重載值
  46.     65536 - (Xtal/12) / (523*2),  //中音1
  47.     65536 - (Xtal/12) / (587*2),  //2
  48.     65536 - (Xtal/12) / (659*2),  //3
  49.     65536 - (Xtal/12) / (698*2),  //4
  50.     65536 - (Xtal/12) / (784*2),  //5
  51.     65536 - (Xtal/12) / (880*2),  //6
  52.     65536 - (Xtal/12) / (988*2),  //7
  53.     65536 - (Xtal/12) / (1047*2), //高音1
  54.     65536 - (Xtal/12) / (1175*2), //2
  55.     65536 - (Xtal/12) / (1319*2), //3
  56.     65536 - (Xtal/12) / (1397*2), //4
  57.     65536 - (Xtal/12) / (1568*2), //5
  58.     65536 - (Xtal/12) / (1760*2), //6
  59.     65536 - (Xtal/12) / (1976*2), //7
  60.           65536 - (Xtal/12) / (262*2), //低音1
  61.     65536 - (Xtal/12) / (294*2), //2
  62.     65536 - (Xtal/12) / (330*2), //3
  63.     65536 - (Xtal/12) / (349*2), //4
  64.     65536 - (Xtal/12) / (392*2), //5
  65.     65536 - (Xtal/12) / (440*2), //6
  66.     65536 - (Xtal/12) / (494*2), //7
  67.                 65536 - (Xtal/12) / (300*2), //純屬湊數(shù)
  68. };

  69. unsigned char *SongNote, *SongBeat;//指針
  70. unsigned char code XiaoXingXingNote[] = {   //小星星
  71.         1, 1, 5, 5,    6, 6, 5,    4, 4, 3, 3,    2, 2, 1,  
  72.         5, 5, 4, 4,    3, 3, 2,    5, 5, 4, 4,    3, 3, 2 ,
  73.         1, 1, 5, 5,    6, 6, 5,    4, 4, 3, 3,    2, 2, 1, 0xff    };

  74. unsigned char code XiaoXingXingBeat[] = {
  75.         4, 4, 4, 4,    4, 4, 8,    4, 4, 4, 4,    4, 4, 8,
  76.         4, 4, 4, 4,    4, 4, 8,    4, 4, 4, 4,    4, 4, 8,
  77.         4, 4, 4, 4,    4, 4, 8,    4, 4, 4, 4,    4, 4, 8,};
  78. unsigned char code TwoTigerNote[] = {    //兩只老虎音符表
  79.         1,   2,   3, 1,    1,   2,   3, 1,   3, 4, 5,   3, 4, 5,
  80.         5,6, 5,4, 3, 1,    5,6, 5,4, 3, 1,   1, 5, 1,   1, 5, 1,0xff};

  81. unsigned char code TwoTigerBeat[] = {    //兩只老虎節(jié)拍表,4表示一拍,1就是1/4拍,8就是2拍
  82.         4,   4,   4, 4,    4,   4,   4, 4,   4, 4, 8,   4, 4, 8,
  83.         3,1, 3,1, 4, 4,    3,1, 3,1, 4, 4,   4, 4, 8,   4, 4, 8,
  84.     };
  85. unsigned char code HappybirthdayNote[] = {  //生日快樂歌
  86.         5, 5, 6, 5, 8, 7, 22, 5, 5, 6, 5, 9, 8, 5, 5, 12, 10, 8, 7, 6, 11, 11,  10, 8, 9, 8,0xff };
  87. unsigned char code HappybirthdayBeat[] = {
  88.         2, 2, 4, 4, 4, 4, 4, 2, 2,  4, 4, 4, 8, 2, 2, 4, 4, 4, 4, 8, 2, 2, 4, 4, 4, 8};       
  89. unsigned char code         ZhiduanqingchangNote[] = { //紙短情長
  90.               //8, 9, 10, 9, 8, 6, 22, 11, 10, 9, 22, 7, 8, 9, 7, 7, 5, 22, 7, 9, 8, 8, 3, 4, 2, 3, 1, 1, 5, 2,  //前奏
  91.         19, 3, 3, 3, 2, 3, 1, 2, 2, 2, 1, 2, 5, 1, 1, 1, 20, 1, 20, 19,     2, 2, 2, 3, 20, 19, 4, 4, 4, 3, 4, 1, 2, 2, 2, 1, 2, 5,
  92.                1, 1, 1, 20, 1, 20, 3, 2, 2, 1, 1, 22, 22, 22, 1, 1, 2,             3, 3, 3, 22, 3, 2, 1, 21, 6, 5, 22, 5, 6, 7, 8, 3, 3, 22, 8, 7, 8,
  93.               7, 3, 5, 5, 6, 8, 5, 6, 22, 6, 5, 4,5, 3, 2, 1, 20, 1,               3, 2, 2, 1, 2, 5, 1, 2, 5, 22, 22, 22, 1, 1, 2,
  94.         3, 3, 2, 3, 22, 3, 2, 1, 5, 5, 3, 5, 22, 5, 6, 7,                   8, 8, 8, 8, 8, 7, 6, 7, 6, 3, 5, 5, 5, 6, 8, 5, 6, 22, 6, 5, 4,
  95.         5, 3, 2, 1, 6, 1, 3, 2, 2, 1, 2, 1, 20, 1, 22,                      22, 20, 1, 3, 2, 2, 22, 2, 1, 2, 1, 1, 22, 20, 1, 1, 0xff};       
  96. unsigned char code ZhiduanqingchangBeat[] = {
  97.               //2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 8, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 8, 8, 12, 4, 5, 4, 8, 8, 4,   //前奏
  98.         8, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 2, 4, 2,       2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 4, 5, 2, 2, 2, 2, 2, 5,
  99.         2, 2, 2, 2, 2, 5, 2, 2, 2, 2, 8, 4, 4, 2, 2, 2, 2,                4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2,
  100.         4, 2, 5, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 4, 2, 5, 1, 1,             2, 2, 2, 2, 2, 4, 2, 16, 16,4, 4, 2, 2, 2, 2,
  101.         2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,                   2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 4, 2, 2, 2, 4, 2, 2, 2, 2, 2,
  102.         2, 4, 2, 5, 1, 1, 2, 2, 2, 2, 2, 4, 1, 12, 4,                     2, 1, 1, 2, 2, 8, 2, 1, 1, 2, 2, 8, 2, 2, 12, 16};
  103. bit enable = 1;   //蜂鳴器發(fā)聲使能標(biāo)志
  104. bit tmrflag = 0;  //定時(shí)器中斷完成標(biāo)志
  105. unsigned char T0RH = 0xFF;  //T0重載值的高字節(jié)
  106. unsigned char T0RL = 0x00;  //T0重載值的低字節(jié)

  107. void main()
  108. {
  109.     unsigned char dat;
  110.     EA = 1;       //使能全局中斷
  111.     TMOD = 0x11;  //配置T0,T1工作在模式1
  112.     TH0 = T0RH;   
  113.     TL0 = T0RL;
  114.     ET0 = 1;      //使能T0中斷
  115.           ET1 = 1;      //使能T1中斷
  116.           TR1 = 1;      //啟動(dòng)T1
  117.          // ENLED = 0x00; //使能總線收發(fā)器
  118.          // ADDR2=1; ADDR1=0; ADDR0=1;//選擇最右邊的數(shù)碼管
  119.           P23 = 0;      //啟用KEY
  120.           InitLcd1602();
  121.           dat = E2ReadByte(0x01);    //讀取指定地址上的一個(gè)字節(jié)
  122.           if(dat>All||dat<=0)
  123.                         Num = 1;
  124.                 else
  125.     Num = dat;
  126.     while (1)
  127.     {
  128.                         //P0 = LedChar[Num]; //數(shù)碼管顯示當(dāng)前歌曲序號
  129.                         LcdWriteCmd(0x01);  //清屏
  130.                         lcd1602updata();
  131.       PlayControl(Num);                       
  132.                         if(breakflage == 1)
  133.                                 breakflage = 0;
  134.                         else
  135.                                 Delay_ms(500);
  136.     }
  137. }

  138. void PlayControl(unsigned char Num)
  139. {
  140.         E2WriteByte(0x01, Num);    //再寫回到對應(yīng)的地址上
  141.         switch(Num)
  142.         {
  143.                 case 4:SongNote = XiaoXingXingNote;    SongBeat =  XiaoXingXingBeat;  sizeofNote = sizeof(XiaoXingXingNote);    Play();break;
  144.     case 2:SongNote = TwoTigerNote;        SongBeat =TwoTigerBeat;        sizeofNote = sizeof(TwoTigerNote);        Play();break;
  145.                 case 3:SongNote = HappybirthdayNote;   SongBeat =HappybirthdayBeat;   sizeofNote = sizeof(HappybirthdayNote);   Play();break;
  146.                 case 1:SongNote = ZhiduanqingchangNote;SongBeat =ZhiduanqingchangBeat;sizeofNote = sizeof(ZhiduanqingchangNote);Play();break;               
  147.                 default:break;
  148.         }
  149. }
  150. void lcd1602updata()
  151. {
  152.         switch(Num)
  153.         {
  154.                 case 1:LcdShowStr(4,0,"1.zhiduanqingchang");break;
  155.           case 2:LcdShowStr(4,0,"2.liangzhilaohu");break;
  156.           case 3:LcdShowStr(4,0,"3.zhunishengrikuaile");break;
  157.           case 4:LcdShowStr(4,0,"4.xiaoxingxing");break;
  158.                 default:break;
  159.         }
  160. }
  161. /* 演奏函數(shù) */
  162. void Play()//演奏函數(shù)
  163. {
  164.     unsigned char beat;   //當(dāng)前節(jié)拍索引
  165.     unsigned char note;   //當(dāng)前節(jié)拍對應(yīng)的音符
  166.     unsigned int time = 0;      //當(dāng)前節(jié)拍計(jì)時(shí)
  167.     unsigned int beatTime = 0;  //當(dāng)前節(jié)拍總時(shí)間
  168.     unsigned int soundTime = 0; //當(dāng)前節(jié)拍需發(fā)聲時(shí)間

  169.     for (beat=0; beat<sizeofNote; )  //用節(jié)拍索引作為循環(huán)變量
  170.     {
  171.                                 if(breakflage == 1)
  172.                                         break;
  173.         while (!tmrflag);  //每次定時(shí)器中斷完成后,檢測并處理節(jié)拍
  174.         tmrflag = 0;
  175.         if (time == 0)  //當(dāng)前節(jié)拍播完則啟動(dòng)一個(gè)新節(jié)拍
  176.         {
  177.                                         if(breakflage == 1)
  178.                                                 break;
  179.             note = SongNote[beat] - 1;
  180.                                           if(note == 0xfe)
  181.                                                 {
  182.                                                         if(Num == All)
  183.                                                                 Num = 1;
  184.                                                         else
  185.                                                         Num++;
  186.                                                         break;
  187.                                                 }
  188.             T0RH = NoteReload[note] >> 8;
  189.             T0RL = NoteReload[note];
  190.             beatTime = (SongBeat[beat] * NoteFrequ[note]) >> 2;//計(jì)算節(jié)拍總時(shí)間,右移2位相當(dāng)于除4,移位代替除法可以加快執(zhí)行速度
  191.             soundTime = beatTime - (beatTime >> 2);//計(jì)算發(fā)聲時(shí)間,
  192.             enable = 1;  //指示蜂鳴器開始發(fā)聲
  193.                                                 if (note == 21)//簡譜的0 等待
  194.                                                         enable =0;
  195.             time++;
  196.         }
  197.         else  //當(dāng)前節(jié)拍未播完則處理當(dāng)前節(jié)拍
  198.         {
  199.             if (time >= beatTime)  //當(dāng)前持續(xù)時(shí)間到達(dá)節(jié)拍總時(shí)間時(shí)歸零,
  200.             {                      //并遞增節(jié)拍索引,以準(zhǔn)備啟動(dòng)新節(jié)拍
  201.                 time = 0;
  202.                 beat++;
  203.             }
  204.             else  //當(dāng)前持續(xù)時(shí)間未達(dá)到總時(shí)間時(shí),
  205.             {
  206.                 time++;   //累加時(shí)間計(jì)數(shù)
  207.                 if (time == soundTime)  //到達(dá)發(fā)聲時(shí)間后,指示關(guān)閉蜂鳴器,
  208.                 {                       //插入0.25*總時(shí)間的靜音間隔,
  209.                     enable = 0;         //用以區(qū)分連續(xù)的兩個(gè)節(jié)拍
  210.                 }
  211.             }
  212.         }
  213.     }
  214. }
  215. void Delay_ms(unsigned int ms)
  216. {
  217.         for(;ms > 0;ms--)
  218.         {
  219.         unsigned char i, j;

  220.         i = 33;
  221.         j = 66;
  222.         do
  223.         {
  224.                 while (--j);
  225.         } while (--i);
  226.   }
  227. }
  228. unsigned char E2ReadByte(unsigned char addr)
  229. {
  230.         unsigned char dat;

  231.         I2CStart();
  232.         I2CWrite(0x51<<1);//發(fā)送E2PROM地址
  233.         I2CWrite(addr);//要讀取的地址
  234.         I2CStart();        //重新發(fā)送起始信號
  235.         I2CWrite((0x51<<1) |0x01);
  236.         dat = I2CReadNAK();
  237.         I2CStop();

  238.         return dat;
  239. }
  240. void E2WriteByte(unsigned char addr, unsigned char dat)
  241. {
  242.         I2CStart();
  243.         I2CWrite(0x51<<1);//發(fā)送E2PROM地址
  244.         I2CWrite(addr);//要寫入的地址
  245.         I2CWrite(dat);//要寫入的數(shù)據(jù)
  246.         I2CStop();
  247. }
  248. /*控制蜂鳴器發(fā)聲 */
  249. void InterruptTimer0() interrupt 1
  250. {
  251.     TH0 = T0RH;   //重新加載重載值
  252.     TL0 = T0RL;
  253.     tmrflag = 1;
  254.     if (enable)   //使能時(shí)反轉(zhuǎn)蜂鳴器控制電平
  255.         BUZZ = ~BUZZ;
  256.     else          //未使能時(shí)關(guān)閉蜂鳴器
  257.         BUZZ = 1;
  258. }
  259. /*按鍵掃描*/
  260. void InterruptTimer1() interrupt 3 //按鍵部分參看之前的帖子 帶有計(jì)次功能的秒表
  261. {
  262.         TH1 = 0xC9;
  263.         TL1 = 0xEA;
  264.        
  265.           keybuf = (keybuf<<1) | KEY;
  266.     if (keybuf == 0x00)
  267.         KeySta = 0;
  268.     else if (keybuf == 0xFF)
  269.         KeySta = 1;
  270.     else{}
  271.                        
  272.           keybuf4 = (keybuf4<<1) | KEY4;
  273.     if (keybuf4 == 0x00)
  274.         KeySta4 = 0;
  275.     else if (keybuf4 == 0xFF)
  276.         KeySta4 = 1;
  277.     else{}
  278.                        
  279.          keybuf12= (keybuf12<<1) | KEY12;
  280.     if (keybuf12 == 0x00)
  281.         KeySta12 = 0;
  282.     else if (keybuf12 == 0xFF)
  283.         KeySta12 = 1;
  284.     else{}
  285.                        
  286.                               if (KeySta != backup)  
  287.         {
  288.             if (backup == 0)        
  289.                                                 {
  290.                                                         cntkey=~cntkey;
  291.                                                         TR0 = cntkey;
  292.                                                 }
  293.             backup = KeySta;               
  294.         }
  295.                 if (KeySta4 != backup4)
  296.                 {
  297.                         if(backup4 ==0)
  298.                         {
  299.                                 breakflage = 1;
  300.                                 if(Num <All)
  301.                                   Num++;
  302.                           else if(Num == All)
  303.                                         Num =1;
  304.                                 LcdWriteCmd(0x01);  //清屏
  305.                                 lcd1602updata();
  306.                                 //P0 = LedChar[Num];
  307.                         }
  308.                         backup4 = KeySta4;
  309.                 }               
  310.                
  311.                 if (KeySta12 != backup12)
  312.                 {
  313.                         if(backup12 ==0)
  314.                         {
  315.                                 breakflage = 1;
  316.                                 if(Num >1)
  317.                                   Num--;
  318.                           else if(Num == 1)
  319.                                         Num =All;
  320.                                
  321.                                 LcdWriteCmd(0x01);  //清屏
  322.                                 lcd1602updata();
  323.                                 //P0 = LedChar[Num];
  324.                         }
  325.                         backup12 = KeySta12;
  326.                 }                       
  327.                
  328. }
復(fù)制代碼
LCD1602函數(shù)

  1. #include <STC12C5A60S2.h>
  2. #include <intrins.h>

  3. #define LCD1602_DB  P0
  4. sbit LCD1602_RS = P2^0;
  5. sbit LCD1602_RW = P2^1;
  6. sbit LCD1602_E  = P1^2;
  7. # pragma optimize(4, SPEED)
  8. void delayus(unsigned int n)
  9. {
  10.     extern void _nop_(void);
  11.     register unsigned char i = n, j = (n>>8);
  12.     _nop_(); _nop_(); _nop_();
  13.     if ((--i) | j)
  14.     {
  15.         do
  16.         {
  17.             _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  18.             if (0xFF == (i--)) j--; else {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();};
  19.         } while (i | j);
  20.     }
  21. }

  22. void delayms(unsigned int n) {while (n--) delayus(1000);}
  23. /* 等待液晶準(zhǔn)備好 */
  24. void LcdWaitReady()
  25. {
  26.     unsigned char sta;
  27.    
  28.     LCD1602_DB = 0xFF;
  29.     LCD1602_RS = 0;
  30.     LCD1602_RW = 1;
  31.     do {
  32.         LCD1602_E = 1;
  33.         sta = LCD1602_DB; //讀取狀態(tài)字
  34.         LCD1602_E = 0;
  35.     } while (sta & 0x80); //bit7等于1表示液晶正忙,重復(fù)檢測直到其等于0為止
  36. }
  37. /* 向LCD1602液晶寫入一字節(jié)命令,cmd-待寫入命令值 */
  38. void LcdWriteCmd(unsigned char cmd)
  39. {
  40.         LcdWaitReady();
  41.         LCD1602_RS = 0;
  42.         LCD1602_RW = 0;
  43.         LCD1602_DB = cmd;
  44.             delayus(1);
  45.         LCD1602_E = 1;    delayus(1);
  46.         LCD1602_E = 0;    delayms(2);
  47. }
  48. void LcdWriteDat(unsigned char dat)
  49. {
  50.         LcdWaitReady();
  51.         LCD1602_RS = 1;
  52.         LCD1602_RW = 0;
  53.         LCD1602_DB = dat;    delayus(1);
  54.         LCD1602_E = 1;    delayus(1);
  55.         LCD1602_E = 0;    delayms(2);
  56. }
  57. /* 設(shè)置顯示RAM起始地址,亦即光標(biāo)位置,(x,y)-對應(yīng)屏幕上的字符坐標(biāo) */
  58. void LcdSetCursor(unsigned char x, unsigned char y)
  59. {
  60.     unsigned char addr;
  61.    
  62.     if (y == 0)  //由輸入的屏幕坐標(biāo)計(jì)算顯示RAM的地址
  63.         addr = 0x00 + x;  //第一行字符地址從0x00起始
  64.     else
  65.         addr = 0x40 + x;  //第二行字符地址從0x40起始
  66.     LcdWriteCmd(addr | 0x80);  //設(shè)置RAM地址
  67. }
  68. /* 在液晶上顯示字符串,(x,y)-對應(yīng)屏幕上的起始坐標(biāo),str-字符串指針 */
  69. void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)
  70. {
  71.         bit flag = 0;
  72.         unsigned char Num = 0;
  73.     LcdSetCursor(x, y);   //設(shè)置起始地址
  74.           
  75.     while (*str != '\0')  //連續(xù)寫入字符串?dāng)?shù)據(jù),直到檢測到結(jié)束符
  76.     {
  77.         LcdWriteDat(*str++);
  78.                          Num ++;
  79.                         if(Num >=12)
  80.                         {
  81.                                 flag = 1;
  82.                                 break;
  83.                         }
  84.     }
  85.                 if(flag == 1)
  86.                 {
  87.       LcdSetCursor(0, 1);
  88.                         while (*str != '\0')  //連續(xù)寫入字符串?dāng)?shù)據(jù),直到檢測到結(jié)束符
  89.     {
  90.         LcdWriteDat(*str++);
  91.     }
  92.                 }
  93. }
  94. /* 初始化1602液晶 */
  95. void InitLcd1602()
  96. {
  97.     LcdWriteCmd(0x38);  //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  98.     LcdWriteCmd(0x0C);  //顯示器開,光標(biāo)關(guān)閉
  99.     LcdWriteCmd(0x06);  //文字不動(dòng),地址自動(dòng)+1
  100.     LcdWriteCmd(0x01);  //清屏
  101. }
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-2-13 00:43 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

ID:229821 發(fā)表于 2019-3-29 20:11 | 顯示全部樓層
下面還有嗎??
回復(fù)

使用道具 舉報(bào)

ID:399179 發(fā)表于 2019-11-22 21:53 來自觸屏版 | 顯示全部樓層
saya0769 發(fā)表于 2019-3-29 20:11
下面還有嗎??

掉電記憶程序怎么寫?
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜欧美日韩 | 午夜精品一区二区三区在线观看 | 欧美日韩大片 | 久久51| 国产中文 | 久色网| 亚洲精品91| 国产福利资源在线 | 一区二区亚洲 | 在线观看亚洲 | 久久久久久久久久久一区二区 | 91精品国产综合久久婷婷香蕉 | 黄色一级毛片免费看 | 成人午夜激情 | 午夜精品一区二区三区在线视频 | 91成人在线 | 91操操操 | 久久久99精品免费观看 | 亚洲一区在线免费观看 | 亚洲成人观看 | 欧美精品日韩精品国产精品 | 99热这里都是精品 | 久久久九九 | 国产伦精品一区二区三区在线 | 在线免费观看视频黄 | 青娱乐国产 | 午夜视频免费在线观看 | 一区二区三区视频在线免费观看 | 国产精品免费视频一区 | 99久热| 中文字幕在线观看视频一区 | 日韩欧美三区 | 天天干视频在线 | 欧美人妇做爰xxxⅹ性高电影 | 精品国产区 | 国产精品久久久久久久久久久久久久 | 国产精品久久久久久久久久久久久 | 欧美日韩一区二区三区在线观看 | 一级h片| 91一区二区 | 好婷婷网|