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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3482|回復: 9
打印 上一主題 下一主題
收起左側

江湖救急,誰幫忙把12864并口的改成串口的,拜托了!

[復制鏈接]
跳轉到指定樓層
樓主
/***********說明*************/

/***
第一行顯示:加熱模式:強(P2^0=1、P2^1=0)或弱(P2^0=0、P2^1=1)(由按鍵S4切換)
第二行顯示:加熱時間還剩:                                                                        
第三行顯示:   時   分    秒
第四行顯示:加熱中或加熱結束(倒計時結束時)。


按下開關S1,開始設定秒,秒編輯位閃動,
                        按下S2增加或S3減小數值;
在按下開關S1,秒確定,設定分;
再按下S1,分確定,設定小時。
再按下S1,時間確定。
再按下S1,開始倒計時并使P1^5=0。到達定時時間后P1^5=1。

12864采用:www點jlxlcd點cn/UpFile/2015922133914.pdf

sbit Rom_OUT=P1^2;
sbit Rom_IN=P1^1;
sbit Rom_SCK=P1^3;
sbit Rom_CS=P1^4;

sbit lcd_sda=P3^1;
sbit lcd_sck=P3^2;
sbit lcd_rs=P3^0;
sbit lcd_reset=P1^6;
sbit lcd_cs1=P1^7;
sbit LEDA=P3^3;

sbit s1=P3^4;//設置按鈕
sbit s2=P3^5;
sbit s3=P3^6;
sbit s4=P3^7;

參考程序如下(并口)
***/
/*****
簡介:第一行顯示,距離系統爆炸時間
第二行顯示,還剩
第三行顯示,00時,00分,00秒
第四行顯示,             周林

按下旋鈕開關,開始設定秒,秒編輯位閃動。左右旋轉設定數值,
在按下開關,秒確定,設定分,分編輯位閃動左右調數值,
再按下,分確定,小時位閃動。左右轉調小時,再按一下。時間確定,開始倒計時。到達定時時間后停止,并閃動。

*****/

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

  3. /********************* 定義 ********************************/
  4. #define LCD_data  P0       //數據口
  5. sbit LCD_RS = P2 ^ 0; //寄存器選擇輸入
  6. sbit LCD_RW = P2 ^ 1; //液晶讀/寫控制
  7. sbit LCD_EN = P2 ^ 2; //液晶使能控制
  8. sbit LCD_PSB = P2 ^ 3; //串/并方式控制
  9. sbit LCD_RST = P2 ^ 5; //液晶復位端口

  10. sbit sset=P3^4;//設置按鈕
  11. sbit spk=P1^4;
  12. sbit sadd=P2^7;
  13. sbit sdel=P2^6;

  14. signed char second=0,minute=0,hour=0,count=0,keycount=0;
  15. signed char key=0;
  16. unsigned char code DIS1[] =
  17. {
  18.   "距離系統爆炸時間"
  19. };
  20. unsigned char code DIS2[] =
  21. {
  22.   "還剩:"
  23. };
  24. unsigned char code DIS31[] =
  25. {
  26.   "時"
  27. };
  28. unsigned char code DIS32[] =
  29. {
  30.   "分"
  31. };
  32. unsigned char code DIS33[] =
  33. {
  34.   "秒"
  35. };
  36. unsigned char code DIS4[] =
  37. {
  38.   "周林"
  39. };
  40. unsigned char code table2[]="0123456789";

  41. char code reserve[3]_at_ 0x3b; //保留0x3b開始的3個字節

  42. /*********************延時子函數**************************/

  43. void delayNOP()//us延時子函數   (4.34us)
  44. {
  45.   _nop_();
  46.   _nop_();
  47.   _nop_();
  48.   _nop_();
  49. }

  50. void delayms(unsigned int ms)//ms延時子函數
  51. {
  52.   unsigned char y;
  53.   while (ms--)
  54.   {
  55.     for (y = 0; y < 114; y++)
  56.       ;
  57.   }
  58. }
  59. //******************檢查LCD忙狀態**************************


  60. bit lcd_busy()//檢查LCD忙狀態 1忙,0閑
  61. {
  62.   bit result;
  63.   LCD_RS = 0;
  64.   LCD_RW = 1;
  65.   LCD_EN = 1;
  66.   delayNOP();
  67.   result = (bit)(P0 &0x80);
  68.   LCD_EN = 0;
  69.   return (result);
  70. }

  71. //***********************寫指令數據***********************

  72. void lcd_wcmd(unsigned char cmd)//寫指令數據到LCD
  73. {
  74.   while (lcd_busy())
  75.   {
  76.          ;
  77.   }
  78.   LCD_RS = 0;
  79.   LCD_RW = 0;
  80.   LCD_EN = 1;
  81.   P0 = cmd;
  82.   delayNOP();
  83.   LCD_EN = 0;
  84. }

  85. void lcd_wdat(unsigned char dat)//寫顯示數據到LCD
  86. {
  87.   while (lcd_busy())
  88.     ;
  89.   LCD_RS = 1;
  90.   LCD_RW = 0;
  91.   LCD_EN = 1;
  92.   P0 = dat;
  93.   delayNOP();
  94.   LCD_EN = 0;
  95. }

  96. void writesmh(unsigned char add,unsigned char date)//顯示個位和十位數據
  97. {
  98.         unsigned char shi,ge;
  99.         shi=date/10;
  100.         ge=date%10;
  101.         lcd_wcmd(0x80+add);
  102.         delayms(5);
  103.         lcd_wdat(table2[shi]);
  104.         delayms(5);
  105.         lcd_wdat(table2[ge]);
  106.         delayms(5);
  107. }

  108. //*********************初始化設定****************************

  109. void lcd_init()
  110. {
  111.   LCD_PSB = 1; //并口方式

  112.   LCD_RST = 0; //液晶復位
  113.   delayms(5);  //液晶復位
  114.   LCD_RST = 1; //液晶復位
  115.   delayms(5);  //液晶復位

  116.   lcd_wcmd(0x34); //擴充功能設定,擴充指令,選8位數據
  117.   delayms(5);
  118.   lcd_wcmd(0x30); //功能設定,基本指令操作,選8位數據
  119.   delayms(5);
  120.   lcd_wcmd(0x0C); //顯示開,關光標,關光標反白允許。
  121.   delayms(5);
  122.   lcd_wcmd(0x04); //光標的移動方向
  123.   delayms(5);
  124.   lcd_wcmd(0x01); //清除LCD的顯示內容
  125.   delayms(5);

  126.         TMOD=0x01;
  127.         TH0=0x3C;
  128.         TL0=0xB0;
  129.         EA=1;
  130.         ET0=1;
  131.         TR0=0;
  132.         EX0=0; //外部中斷0允許
  133.         IT0=1; //外部中斷0為邊沿觸發方式
  134. }

  135. //*********************設定顯示位置子函數**********************

  136. void lcd_pos(unsigned char X, unsigned char Y)//設定顯示位置
  137. {
  138.   unsigned char pos;

  139.   if (X == 1)
  140.   {
  141.     X = 0x80;
  142.   }
  143.   else if (X == 2)
  144.   {
  145.     X = 0x90;
  146.   }
  147.   else if (X == 3)
  148.   {
  149.     X = 0x88;
  150.   }
  151.   else if (X == 4)
  152.   {
  153.     X = 0x98;
  154.   }
  155.   pos = X + Y; //確定顯示地址

  156.   lcd_wcmd(pos); //寫顯示地址
  157. }

  158. //*****************清屏子函數***************************

  159. void clr_screen()//清屏子函數
  160. {
  161.   lcd_wcmd(0x34); //擴充指令操作
  162.   delayms(5);
  163.   lcd_wcmd(0x30); //基本指令操作
  164.   delayms(5);
  165.   lcd_wcmd(0x01); //清屏
  166.   delayms(5);
  167. }

  168. //******************閃爍子函數**************************
  169. void lcdflag()
  170. {
  171.   lcd_wcmd(0x08); //關閉顯示
  172.   delayms(500);
  173.   lcd_wcmd(0x0c); //開啟顯示
  174.   delayms(500);
  175.   lcd_wcmd(0x08);
  176.   delayms(500);
  177.   lcd_wcmd(0x0c);
  178.   delayms(500);
  179.   lcd_wcmd(0x08);
  180.   delayms(500);
  181.   lcd_wcmd(0x0c);
  182.   delayms(500);

  183. }
  184. //******************寫字符串子函數*************************

  185. void wr_string(unsigned char str[])//寫字符串子函數
  186. {
  187.   unsigned char num = 0;

  188.   while (str[num])
  189.   {
  190.     lcd_wdat(str[num++]); //寫數據

  191.   }
  192. }

  193. //********************按鍵設置時間*************************
  194. void keyscan()//按鍵設置時間
  195. {
  196.       
  197.         if(sset==0)
  198.         {
  199.                 delayms(10);
  200.                 if(sset==0)
  201.                 {
  202.                         EX0=1;
  203.                         keycount++;
  204.                         while(sset==0)
  205.                         {
  206.                                 ;
  207.                         }
  208.                         if(keycount==1)
  209.                         {
  210.                                 TR0=0;          //停止計時
  211.                                 key=1;
  212.                                 keycount=2;
  213.                                 lcd_wcmd(0x8e);
  214.                                 lcd_wcmd(0x0d);//秒位閃爍
  215.                               
  216.                         }
  217.                         if(keycount==2)
  218.                         {
  219.                        
  220.                                 ;
  221.                        
  222.                         }
  223.                         if(keycount==3)
  224.                         {
  225.                                 keycount=4;
  226.                                 lcd_wcmd(0x8c);
  227.                                 lcd_wcmd(0x0d);//分位閃爍
  228.                                 //lcd_wcmd(0x04);光標左移一位
  229.                         }
  230.                         if(keycount==4)
  231.                         {
  232.                                 ;
  233.                               
  234.                               
  235.                         }
  236.                         if(keycount==5)
  237.                         {
  238.                                 keycount=6;
  239.                                 lcd_wcmd(0x8a);
  240.                                 lcd_wcmd(0x0d);//時位閃爍
  241.                        
  242.                         }
  243.                         if(keycount==6)
  244.                         {
  245.                                 ;
  246.                         }
  247.                         if(keycount==7)
  248.                         {
  249.                                 keycount=0;
  250.                               
  251.                                 lcd_wcmd(0x0c);//停止閃爍
  252.                                 TR0=1;          //開始計時
  253.                                 EX0=1;
  254.                               
  255.                         }
  256.                 }
  257.         }
  258.       
  259.         if(keycount!=0)
  260.         {
  261.                 if(keycount==2)//編輯秒
  262.                 {
  263.                         if(sadd==0)//數值加1
  264.                         {
  265.                                 delayms(10);
  266.                                 if(sadd==0)
  267.                                 {
  268.                                         second++;
  269.                                         if(second==60)
  270.                                         {
  271.                                                 second=0;
  272.                                         }
  273.                                         sadd=1;
  274.                                 }
  275.                                 writesmh(0x0e,second);
  276.                                 lcd_wcmd(0x8e);
  277.                                 lcd_wcmd(0x0d);//秒位閃爍
  278.                               
  279.                         }
  280.                         if(sdel==0)//數值減1
  281.                         {
  282.                                 delayms(10);
  283.                                 if(sdel==0)
  284.                                 {
  285.                                        
  286.                                         if(second==0)
  287.                                         {
  288.                                                 second=60;
  289.                                         }
  290.                                         second--;
  291.                                         sdel=1;
  292.                                 }
  293.                                 writesmh(0x0e,second);
  294.                                 lcd_wcmd(0x8e);
  295.                                 lcd_wcmd(0x0d);//秒位閃爍
  296.                               
  297.                         }
  298.                        
  299.                        
  300.                        
  301.                 }
  302.                 if(keycount==4)//編輯分鐘
  303.                 {
  304.                         if(sadd==0)//數值加1
  305.                         {
  306.                                 delayms(10);;
  307.                                 if(sadd==0)
  308.                                 {
  309.                                         minute++;
  310.                                         if(minute==60)
  311.                                         {
  312.                                                 minute=0;
  313.                                         }
  314.                                         sadd=1;
  315.                                 }
  316.                                 writesmh(0x0c,minute);
  317.                                 lcd_wcmd(0x8c);
  318.                                 lcd_wcmd(0x0d);//分位閃爍
  319.                         }
  320.                         if(sdel==0)//數值減1
  321.                         {
  322.                                 delayms(10);
  323.                                 if(sdel==0)
  324.                                 {
  325.                                        
  326.                                         if(minute==0)
  327.                                         {
  328.                                                 minute=60;
  329.                                         }
  330.                                         minute--;
  331.                                         sdel=1;
  332.                                 }
  333.                             writesmh(0x0c,minute);
  334.                                 lcd_wcmd(0x8c);
  335.                                 lcd_wcmd(0x0d);//分位閃爍
  336.                         }
  337.                        
  338.                        
  339.                 }
  340.                 if(keycount==6)//編輯小時
  341.                 {
  342.                         if(sadd==0)//數值加1
  343.                         {
  344.                                 delayms(10);
  345.                                 if(sadd==0)
  346.                                 {
  347.                                         hour++;
  348.                                         if(hour==24)
  349.                                         {
  350.                                                 minute=0;
  351.                                         }
  352.                                         sadd=1;
  353.                                 }
  354.                             writesmh(0x0a,hour);
  355.                                 lcd_wcmd(0x8a);
  356.                                 lcd_wcmd(0x0d);//時位閃爍
  357.                         }
  358.                         if(sdel==0)//數值減1
  359.                         {
  360.                                 delayms(10);
  361.                                 if(sdel==0)
  362.                                 {
  363.                                        
  364.                                         if(hour==0)
  365.                                         {
  366.                                                 hour=24;
  367.                                         }
  368.                                         hour--;
  369.                                         sdel=1;
  370.                                 }
  371.                                 writesmh(0x0a,hour);
  372.                                 lcd_wcmd(0x8a);
  373.                                 lcd_wcmd(0x0d);//時位閃爍
  374.                         }
  375.                        
  376.                        
  377.                 }
  378.                
  379.         }
  380. }

  381. //主函數主函數主函數主函數主函數主函數主函數主函數主函數主函數主函數主函數主函數主函數

  382. void main()
  383. {
  384.     delayms(100); //上電,等待穩定
  385.     lcd_init(); //初始化LCD
  386.       
  387.         lcd_pos(1, 0); //設置顯示位置為第一行
  388.     wr_string(DIS1);
  389.     lcd_pos(2, 0); //設置顯示位置為第二行
  390.     wr_string(DIS2);
  391.         lcd_pos(3, 3); //設置顯示位置為第四行
  392.     wr_string(DIS31);
  393.         lcd_pos(3, 5); //設置顯示位置為第四行
  394.     wr_string(DIS32);
  395.         lcd_pos(3, 7); //設置顯示位置為第四行
  396.     wr_string(DIS33);
  397.         lcd_pos(4, 6); //設置顯示位置為第四行
  398.     wr_string(DIS4);
  399.       
  400.         writesmh(0x0e,second);
  401.         delayms(5);
  402.         writesmh(0x0c,minute);
  403.         delayms(5);
  404.         writesmh(0x0a,hour);
  405.         delayms(5);
  406.       
  407.   while (1)
  408.   {
  409.       
  410.         keyscan();
  411.       
  412.       
  413.   }
  414. }
  415. //**********************中斷***************************

  416. void time0() interrupt 1 using 0//倒計時中斷
  417. {
  418.       
  419.         TH0=0x3C;
  420.         TL0=0xB0;
  421.         count++;
  422.         if(count==20)
  423.         {
  424.                 count=0;
  425.                 second--;
  426.                 if(second<0)
  427.                 {
  428.                         second=59;
  429.                         minute--;
  430.                         if(minute<0)
  431.                         {
  432.                                 minute=59;
  433.                                 hour--;
  434.                                 if(hour<0)
  435.                                 {
  436.                                         hour=24;
  437.                                 }
  438.                                 lcd_pos(3, 2); //設置顯示位置為第三行,第七列
  439.                                 writesmh(0x0a,hour);
  440.                         }
  441.                         lcd_pos(3, 4); //設置顯示位置為第三行,第七列
  442.                         writesmh(0x0c,minute);
  443.                 }
  444.                 lcd_pos(3, 6); //設置顯示位置為第三行,第七列
  445.                 writesmh(0x0e,second);
  446.                 if((second==0)&&(minute==0)&&(hour==0))//到點后響鈴
  447.                 {
  448.                         TR0=0;
  449.                         spk=0;
  450.                         second=0;
  451.                         minute=0;
  452.                         hour=0;
  453.                         lcdflag();
  454.                        
  455.                         spk=1;
  456.                        
  457.                 }
  458.         }
  459.       
  460. }

  461. void encoder(void) interrupt 0//外部中斷0 旋轉碼開關中斷程序
  462. {
  463.         if(INT1==1)
  464.         {      
  465.                 sadd=0;
  466.                 sdel=1;
  467.                
  468.         }
  469.         if(INT1==0)
  470.         {
  471.                 sdel=0;
  472.                 sadd=1;
  473.                
  474.         }
  475. }

  476. //*********************************************************
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:82765 發表于 2017-8-24 15:15 來自手機 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:229139 發表于 2017-8-24 15:34 | 只看該作者
我來看看
回復

使用道具 舉報

地板
ID:229138 發表于 2017-8-24 15:34 來自手機 | 只看該作者
不錯不錯,我也看看
回復

使用道具 舉報

5#
ID:229140 發表于 2017-8-24 15:41 | 只看該作者
同問????
回復

使用道具 舉報

6#
ID:82765 發表于 2017-8-24 21:53 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

7#
ID:217075 發表于 2017-8-25 07:51 | 只看該作者
新手剛學,主要是時間顯示沒搞明白,多謝了
回復

使用道具 舉報

8#
ID:217075 發表于 2017-8-25 07:52 | 只看該作者
時間太緊了,還有其他產品要搞,實在忙不過來了
回復

使用道具 舉報

9#
ID:223788 發表于 2017-8-25 22:19 | 只看該作者
就不能再買一個串行的12864顯示屏嗎?
回復

使用道具 舉報

10#
ID:82765 發表于 2017-8-29 12:47 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.婷婷| 色爱av| 国产一二三视频在线观看 | 91一区二区 | 亚洲免费人成在线视频观看 | 天天爽夜夜爽精品视频婷婷 | 成人午夜高清 | 国产成人精品一区二 | 91综合在线视频 | 国产aⅴ精品 | 中文字幕亚洲视频 | 久久99精品久久久久蜜桃tv | av电影手机在线看 | 日本不卡一区二区三区 | 亚洲视频不卡 | 精品欧美一区二区三区免费观看 | 久久91精品久久久久久9鸭 | 98久久| 看片国产 | 最新中文字幕第一页视频 | 欧美精品久久久 | 成人午夜精品一区二区三区 | 韩日在线观看视频 | 草久久| 亚洲视频精品 | 一区二区三区在线观看视频 | 国产精品爱久久久久久久 | 国产精品综合一区二区 | 国产一在线观看 | 一二区成人影院电影网 | 成人午夜免费视频 | a精品视频| 黄色播放 | 日韩一区二区三区在线观看 | 亚洲精品日韩一区二区电影 | 久草新在线| 国产一区不卡 | 国产精品一卡二卡三卡 | aaa大片免费观看 | 国内精品视频一区二区三区 | 成人中文字幕在线 |