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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機12864數據端口如何更改為P1 求助

[復制鏈接]
跳轉到指定樓層
樓主
ID:242298 發表于 2020-12-18 18:04 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
怎么更改數據端口P0為P1輸出。其他程序還要改什么呢,謝謝各位大神
  1. //---程序說明---//

  2. /*

  3.         名字:main.c

  4.         創建日:2006-11-26

  5.         工程:智能助理電子鐘(AI-timer)

  6. */

  7. //---修改日志---//

  8. /*

  9. */


  10. //---硬件說明---//

  11. /*

  12. P0.0~0.7        NC

  13. P1.0                右上角LED-G                低電平有效(L)

  14. P1.1                右下角LED-G                L

  15. P1.2                左下角LED-G                L

  16. P1.3                左上角LED-G                L

  17. P1.4                4個LED-R                L

  18. P1.5~1.7        ISP下載用                ~

  19. P2.1                LCM -5 SID                串行數據輸入,~

  20. P2.2                LCD -6 CLK                串行時鐘,~

  21. P2.3                左上角KEY                -

  22. P2.4                左下角KEY                -

  23. P2.5                右上角KEY                -

  24. P2.6                右下角KEY                -

  25. P2.7                背后LED-B                L

  26. P3.0                溫度單總線                ~

  27. P3.1                BEEP                        L

  28. P3.2                KEY中斷                        -

  29. P3.3                DS1302 -5 RST_        低電平復位(L)

  30. P3.4                DS1302 -6 IO        ~

  31. P3.5                DS1302 -7 SCLK        ~

  32. P3.6                24C02 -6 SCL        ~

  33. P3.7                24C02 -5 SDA        ~

  34. */

  35. /****************************************************************************/

  36. //頭文件

  37. #include <AT89X52.h>

  38. #include <string.h>

  39. /*****************************************************************************/

  40. //燈與蜂鳴器定義

  41. sbit        led_b = P2^7;

  42. sbit        led_r = P1^4;

  43. sbit        led_g1 = P1^3;

  44. sbit        led_g2 = P1^2;

  45. sbit        led_g3 = P1^0;

  46. sbit        led_g4 = P1^1;

  47. sbit        beep   = P3^1;

  48. /*****************************************************************************/

  49. //溫度傳感器定義

  50. sbit DQ = P3 ^ 0;//ds18B20

  51. /*****************************************************************************/

  52. //鍵盤引腳定義

  53. sbit KEY_1 = P2^3;         //左上

  54. sbit KEY_2 = P2^4;         //左下

  55. sbit KEY_3 = P2^6;         //右上

  56. sbit KEY_4 = P2^5;         //右下

  57. sbit KEY_I = P3^2;         //常0

  58. /****************************************************************************/

  59. //引腳定義

  60. sbit   SID   =  P2^1;        //數據

  61. sbit   SCLK  =  P2^2;        //時鐘

  62. /*****************************************************************************/

  63. //定義DS1302時鐘接口

  64. sbit clock_clk = P3 ^ 5;//ds1302_clk(時鐘線)

  65. sbit clock_dat = P3 ^ 4;//ds1302_dat(數據線)

  66. sbit clock_Rst = P3 ^ 3;//ds1302_Rst(復位線)

  67. /*****************************************************************************/

  68. //定義累加器A中的各位

  69. sbit a0   = ACC ^ 0;

  70. sbit a1   = ACC ^ 1;

  71. sbit a2   = ACC ^ 2;

  72. sbit a3   = ACC ^ 3;

  73. sbit a4   = ACC ^ 4;

  74. sbit a5   = ACC ^ 5;

  75. sbit a6   = ACC ^ 6;

  76. sbit a7   = ACC ^ 7;

  77. /****************************************************************************/

  78. //定義全局變量

  79. unsigned char yy,mo,dd,xq,hh,mm,ss;//定義時間映射全局變量(專用寄存器)

  80. bit w = 0; //調時標志位

  81. static unsigned char menu = 0;//定義靜態小時更新用數據變量

  82. static unsigned char keys = 0;//定義靜態小時更新用數據變量

  83. static unsigned char timecount = 0;//定義靜態軟件計數器變量

  84. /****************************************************************************/

  85. void DelayM(unsigned int a){//延時函數 1MS/次        

  86.                 unsigned char i;

  87.                 while( --a != 0){               

  88.                         for(i = 0; i < 125; i++);  //一個 ; 表示空語句,CPU空轉。

  89.                 }                                      //i 從0加到125,CPU大概就耗時1毫秒

  90. }

  91. /****************************************************************************/

  92. //函數聲明

  93. void lcm_w_word(unsigned char *str) ;  //寫字符  例:lcm_w_word("您好!");

  94. void lcm_w_test(bit start,unsigned char ddata);  //(0,指令) (1,數據)

  95. void lcm_w_byte(unsigned char bbyte);  //寫一個字節給lcm

  96. void delaynms(unsigned int di);  //延時

  97. void lcm_init(void); //lcm初始化

  98. void lcm_clr(void);  //清屏

  99. void days (viod) {          //公歷節日數據庫

  100.                 lcm_w_test(0,0x80);

  101.                 lcm_w_word("[Dis]      [Set]");

  102.                 lcm_w_test(0,0x98);

  103. //                                                                                                ----|----------------|

  104.                 if ( mo == 0x01 && dd == 0x01 ){ lcm_w_word("Happy New Year!!"); }//1月

  105.                 if ( mo == 0x01 && dd == 0x28 ){ lcm_w_word("  世界麻風日    "); }

  106.                 if ( mo == 0x02 && dd == 0x02 ){ lcm_w_word("  世界濕地日    "); }//2月

  107.                 if ( mo == 0x02 && dd == 0x13 ){ lcm_w_word("  明天情人節了  "); }               

  108.                 if ( mo == 0x02 && dd == 0x14 ){ lcm_w_word("  今天是情人節  "); }

  109.                 if ( mo == 0x03 && dd == 0x01 ){ lcm_w_word("  國際海豹日    "); }//3月               

  110.                 if ( mo == 0x03 && dd == 0x03 ){ lcm_w_word("  全國愛耳日    "); }               

  111.                 if ( mo == 0x03 && dd == 0x08 ){ lcm_w_word("   3.8婦女節    "); }               

  112.                 if ( mo == 0x03 && dd == 0x12 ){ lcm_w_word("    植樹節      "); }               

  113.                 if ( mo == 0x03 && dd == 0x14 ){ lcm_w_word("  國際警察日    "); }               

  114.                 if ( mo == 0x03 && dd == 0x15 ){ lcm_w_word("  消費者權益日  "); }               

  115.                 if ( mo == 0x03 && dd == 0x17 ){ lcm_w_word("  國際航海日    "); }               

  116.                 if ( mo == 0x03 && dd == 0x21 ){ lcm_w_word("  世界森林日    "); }               

  117.                 if ( mo == 0x03 && dd == 0x22 ){ lcm_w_word("    世界水日    "); }               

  118.                 if ( mo == 0x03 && dd == 0x23 ){ lcm_w_word("  世界氣象日    "); }               

  119.                 if ( mo == 0x03 && dd == 0x24 ){ lcm_w_word("日"); }

  120.                 if ( mo == 0x04 && dd == 0x01 ){ lcm_w_word("愚人節  小心上當"); }//4               

  121.                 if ( mo == 0x04 && dd == 0x07 ){ lcm_w_word("  世界衛生日    "); }               

  122.                 if ( mo == 0x04 && dd == 0x08 ){ lcm_w_word("    復活節      "); }               

  123.                 if ( mo == 0x04 && dd == 0x13 ){ lcm_w_word("  黑色星期五    "); }

  124.                 if ( mo == 0x05 && dd == 0x01 ){ lcm_w_word("  勞動節  放假  "); }//5               

  125.                 if ( mo == 0x05 && dd == 0x04 ){ lcm_w_word("    青年節      "); }               

  126.                 if ( mo == 0x05 && dd == 0x08 ){ lcm_w_word("  世界紅十字日  "); }               

  127.                 if ( mo == 0x05 && dd == 0x12 ){ lcm_w_word("  國際護士節    "); }               

  128.                 if ( mo == 0x05 && dd == 0x05 ){ lcm_w_word("近日注意母親節  "); }               

  129.                 if ( mo == 0x05 && dd == 0x15 ){ lcm_w_word("  國際家庭日    "); }

  130.                 if ( mo == 0x05 && dd == 0x31 ){ lcm_w_word("  世界無煙日    "); }               

  131.                 if ( mo == 0x06 && dd == 0x01 ){ lcm_w_word("  國際兒童節    "); }//6

  132.                 if ( mo == 0x06 && dd == 0x05 ){ lcm_w_word("  世界環境日    "); }               

  133.                 if ( mo == 0x06 && dd == 0x26 ){ lcm_w_word("  日    "); }               

  134.                 if ( mo == 0x06 && dd == 0x06 ){ lcm_w_word("  全國愛眼日    "); }               

  135.                 if ( mo == 0x06 && dd == 0x13 ){ lcm_w_word("近日注意父親節  "); }

  136.                 if ( mo == 0x06 && dd == 0x15 ){ lcm_w_word("近日注意父親節  "); }

  137.                 if ( mo == 0x07 && dd == 0x01 ){ lcm_w_word("記念日  "); }//7

  138.                 if ( mo == 0x07 && dd == 0x07 ){ lcm_w_word("抗日戰爭記念日  "); }

  139.                 if ( mo == 0x07 && dd == 0x11 ){ lcm_w_word("  世界人口日    "); }

  140.                 if ( mo == 0x08 && dd == 0x01 ){ lcm_w_word("  八一建軍節    "); }//8

  141.                 if ( mo == 0x08 && dd == 0x08 ){ lcm_w_word("  中國男子節    "); }

  142.                 if ( mo == 0x08 && dd == 0x15 ){ lcm_w_word("抗戰勝利記念日  "); }

  143.                 if ( mo == 0x09 && dd == 0x10 ){ lcm_w_word("  中國教師節    "); }//9

  144.                 if ( mo == 0x09 && dd == 0x18 ){ lcm_w_word("九·一八事變記念"); }

  145.                 if ( mo == 0x09 && dd == 0x20 ){ lcm_w_word("  國際愛牙日    "); }

  146.                 if ( mo == 0x09 && dd == 0x27 ){ lcm_w_word("  世界旅游日    "); }

  147.                 if ( mo == 0x10 && dd == 0x01 ){ lcm_w_word("  中國國慶節    "); }//10

  148.                 if ( mo == 0x10 && dd == 0x04 ){ lcm_w_word("  世界動物日    "); }

  149.                 if ( mo == 0x10 && dd == 0x24 ){ lcm_w_word("    聯合國日    "); }

  150.                 if ( mo == 0x10 && dd == 0x12 ){ lcm_w_word("明天國際教師節  "); }

  151.                 if ( mo == 0x10 && dd == 0x13 ){ lcm_w_word("  國際教師節    "); }

  152.                 if ( mo == 0x11 && dd == 0x10 ){ lcm_w_word("  世界青年節    "); }//11

  153.                 if ( mo == 0x11 && dd == 0x17 ){ lcm_w_word("  世界學生節    "); }

  154.                 if ( mo == 0x12 && dd == 0x01 ){ lcm_w_word("  世界艾滋病日  "); }//12

  155.                 if ( mo == 0x12 && dd == 0x23 ){ lcm_w_word("  明晚平安夜    "); }

  156.                 if ( mo == 0x12 && dd == 0x24 ){ lcm_w_word("  今晚平安夜    "); }

  157.                 if ( mo == 0x12 && dd == 0x25 ){ lcm_w_word("    圣誕快樂    "); }

  158.                 if ( mo == 0x12 && dd == 0x31 ){ lcm_w_word("    明日新年    "); }

  159.                 else{

  160.                         if ( hh >= 0x04 && hh <  0x06 ){ lcm_w_word("★★__▲▲__凌晨"); }

  161.                         if ( hh >= 0x06 && hh <  0x08 ){ lcm_w_word("☆○__▲△__早晨"); }

  162.                         if ( hh >= 0x08 && hh <  0x12 ){ lcm_w_word("__●__▲▲__上午"); }

  163.                         if ( hh == 0x12)               { lcm_w_word("____▲●▲__中午"); }

  164.                         if ( hh >= 0x13 && hh <  0x18 ){ lcm_w_word("__▲▲__●__下午"); }

  165.                         if ( hh >= 0x18 && hh <  0x22 ){ lcm_w_word("△▲__●☆__晚上"); }

  166.                         if ( hh >= 0x22 && hh <= 0x23 ){ lcm_w_word("△▲__★☆__夜里"); }

  167.                         if ( hh >= 0x00 && hh <  0x04 ){ lcm_w_word("__★▲▲★__深夜"); }

  168.                         }



  169. }

  170. /****************************************************************************/

  171. //初始化LCM

  172. void lcm_init(void)         {

  173.         delaynms(100); //啟動等待,等LCM講入工作狀態

  174.           lcm_w_test(0,0x30);  //8 位介面,基本指令集

  175.           lcm_w_test(0,0x0c);  //顯示打開,光標關,反白關

  176.           lcm_w_test(0,0x01);  //清屏,將DDRAM的地址計數器歸零

  177.         delaynms(100); //啟動等待,等LCM講入工作狀態

  178. }

  179. /******************************************************************************/

  180. //寫指令或數據  (0,指令) (1,數據)

  181. void lcm_w_test(bit start, unsigned char ddata) {

  182.         unsigned char start_data,Hdata,Ldata;

  183.           if(start==0)

  184.                 start_data=0xf8;         //0:寫指令

  185.     else   

  186.             start_data=0xfa;  //1:寫數據

  187.           Hdata=ddata&0xf0;                  //取高四位

  188.           Ldata=(ddata<<4)&0xf0;  //取低四位

  189.           lcm_w_byte(start_data);          //發送起始信號

  190.           delaynms(5); //延時是必須的

  191.           lcm_w_byte(Hdata);              //發送高四位

  192.           delaynms(5);  //延時是必須的

  193.           lcm_w_byte(Ldata);                  //發送低四位

  194.           delaynms(5);  //延時是必須的

  195. }

  196. /******************************************************************************/

  197. //發送一個字節(底層函數)

  198. void lcm_w_byte(unsigned char bbyte) {

  199.         unsigned char i;

  200.          for(i=0;i<8;i++){

  201.                    SID=bbyte&0x80; //取出最高位

  202.                  SCLK=1;

  203.                    SCLK=0;

  204.                    bbyte<<=1; //左移

  205.            }  

  206. }

  207. /******************************************************************************/

  208. //延時(LCM占用)

  209. void delaynms(unsigned int di) {

  210.         unsigned int da,db;

  211.          for(da=0;da<di;da++);

  212.                    for(db=0;db<10;db++);

  213. }

  214. /*****************************************************************************/

  215. //清屏函數

  216. void lcm_clr(void){

  217.         lcm_w_test(0,0x01);

  218.         delaynms(40); //啟動等待,等LCM講入工作狀態

  219. }

  220. /*****************************************************************************/

  221. //向LCM發送一個字符串,長度64字符之內。

  222. //應用:lcm_w_word("您好!");

  223. void lcm_w_word(unsigned char *str){

  224.                 while(*str != '\0'){

  225.                         lcm_w_test(1,*str++);

  226.         }

  227.                 *str = 0;

  228. }

  229. /******************************************************************************/

  230. void Delay(int num)//延時函數

  231. {

  232.         while(num--) ;

  233. }        

  234. /******************************************************************************/

  235. void Init_DS18B20(void)//初始化ds1820

  236. {

  237.         unsigned char x=0;

  238.         DQ = 1;    //DQ復位

  239.         Delay(8);  //稍做延時

  240.         DQ = 0;    //單片機將DQ拉低

  241.         Delay(80); //精確延時 大于 480us

  242.         DQ = 1;    //拉高總線

  243.         Delay(14);

  244.         x=DQ;      //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗

  245.         Delay(20);

  246. }

  247. /******************************************************************************/

  248. unsigned char ReadOneChar(void)//讀一個字節

  249. {

  250.         unsigned char i=0;

  251.         unsigned char dat = 0;

  252.         for (i=8;i>0;i--)

  253.         {

  254.                 DQ = 0; // 給脈沖信號

  255.                 dat>>=1;

  256.                 DQ = 1; // 給脈沖信號

  257.                 if(DQ)

  258.                 dat|=0x80;

  259.                 Delay(4);

  260.         }

  261.         return(dat);

  262. }

  263. /******************************************************************************/

  264. void WriteOneChar(unsigned char dat)//寫一個字節

  265. {

  266.         unsigned char i=0;

  267.         for (i=8; i>0; i--)

  268.         {

  269.                 DQ = 0;

  270.                 DQ = dat&0x01;

  271.                 Delay(5);

  272.                 DQ = 1;

  273.                 dat>>=1;

  274.         }

  275. }

  276. /******************************************************************************/

  277. unsigned int ReadTemperature(void)//讀取溫度

  278. {

  279.         unsigned char a=0;

  280.         unsigned char b=0;

  281.         unsigned int t=0;

  282.         float tt=0;

  283.         Init_DS18B20();

  284.         WriteOneChar(0xCC); // 跳過讀序號列號的操作

  285.         WriteOneChar(0x44); // 啟動溫度轉換

  286.         Init_DS18B20();

  287.         WriteOneChar(0xCC); //跳過讀序號列號的操作

  288.         WriteOneChar(0xBE); //讀取溫度寄存器

  289.         a=ReadOneChar();  //讀低8位

  290.         b=ReadOneChar(); //讀高8位

  291.         t=b;

  292.         t<<=8;

  293.         t=t|a;

  294.         tt=t*0.0625;

  295.         t= tt*10+0.5; //放大10倍輸出并四舍五入

  296.         return(t);

  297. }

  298. /*****************************************************************************/

  299. //聲明

  300. void lcm_w_ss(void);void lcm_w_mm(void);

  301. void lcm_w_hh(void);void lcm_w_dd(void);

  302. void lcm_w_mo(void);void lcm_w_yy(void);void lcm_w_xq(void);

  303. unsigned char clock_in(void);

  304. void clock_out(unsigned char dd);

  305. void Init_1302(void);

  306. unsigned char read_clock(unsigned char ord);

  307. void read_clockS(void);

  308. void Set_time(unsigned char sel);

  309. void write_clock(unsigned char ord, unsigned char dd);

  310. void updata (void);

  311. /*****************************************************************************/

  312. //常用時鐘數據讀取

  313. void read_clockS(void){

  314.         ss = read_clock(0x81);//讀取秒數據

  315.         mm = read_clock(0x83);//讀取分鐘數據

  316.         hh = read_clock(0x85);//小時

  317.         dd = read_clock(0x87);//日

  318.         mo = read_clock(0x89);//月

  319.         xq = read_clock(0x8b);//星期

  320.         yy = read_clock(0x8d);//年

  321. }

  322. /*****************************************************************************/

  323. //調時用加1程序

  324. void Set_time(unsigned char sel){ //根據選擇調整的相應項目加1并寫入DS1302

  325.   signed char address,item;

  326.   signed char max,mini;

  327.   lcm_w_test(0,0x9a);

  328.   lcm_w_word("調整");

  329.   //if(sel==6)  {lcm_w_word("秒鐘");address=0x80; max=0;mini=0;}     //秒7

  330.   if(sel==5)  {lcm_w_word("分鐘");address=0x82; max=59;mini=0;}    //分鐘6

  331.   if(sel==4)  {lcm_w_word("小時");address=0x84; max=23;mini=0;}    //小時5

  332.   if(sel==3)  {lcm_w_word("星期");address=0x8a; max=7;mini=1;}    //星期4  

  333.   if(sel==2)  {lcm_w_word("日期");address=0x86; max=31;mini=1;}    //日3

  334.   if(sel==1)  {lcm_w_word("月份");address=0x88; max=12;mini=1;}    //月2

  335.   if(sel==0)  {lcm_w_word("年份");address=0x8c; max=99; mini=0;}    //年1

  336.   //讀取1302某地址上的數值轉換成10進制賦給item

  337.   item=((read_clock(address+1))/16)*10 + (read_clock(address+1))%16;

  338.   if(KEY_2 == 0){

  339.           item++;//數加 1  

  340.   }

  341.   if(KEY_4 == 0){

  342.           item--;//數減 1

  343.   }

  344.   if(item>max) item=mini;//查看數值有效范圍   

  345.   if(item<mini) item=max;           

  346.   write_clock(0x8e,0x00);//允許寫操作

  347.   write_clock(address,(item/10)*16+item%10);//轉換成16進制寫入1302

  348.   write_clock(0x8e,0x80);//寫保護,禁止寫操作

  349.   updata ();        //刷新數據

  350.   lcm_w_mm();//刷新 分

  351. }

  352. /*****************************************************************************/

  353. //設置1302的初始時間

  354. void Init_1302(void){//(2007年1月1日00時00分00秒星期一)

  355.         write_clock(0x8e,0x00);//允許寫操作

  356.         write_clock(0x8c,0x07);//年

  357.         write_clock(0x8a,0x01);//星期

  358.         write_clock(0x88,0x01);//月

  359.         write_clock(0x86,0x01);//日

  360.         write_clock(0x84,0x00);//小時

  361.         write_clock(0x82,0x00);//分鐘

  362.         write_clock(0x80,0x00);//秒

  363.         write_clock(0x90,0xa5);//充電        

  364.         write_clock(0x8e,0x80);//禁止寫操作

  365. }

  366. /*****************************************************************************/

  367. //DS1302寫數據(底層協議)

  368. void write_clock(unsigned char ord, unsigned char dd){

  369.         clock_clk=0;

  370.         clock_Rst=0;

  371.         clock_Rst=1;

  372.         clock_out(ord);

  373.         clock_out(dd);

  374.         clock_Rst=0;

  375.         clock_clk=1;

  376. }

  377. /*****************************************************************************/

  378. //1302驅動程序(底層協議)

  379. void clock_out(unsigned char dd){

  380.         ACC=dd;

  381.         clock_dat=a0; clock_clk=1; clock_clk=0;

  382.         clock_dat=a1; clock_clk=1; clock_clk=0;

  383.         clock_dat=a2; clock_clk=1; clock_clk=0;

  384.         clock_dat=a3; clock_clk=1; clock_clk=0;

  385.         clock_dat=a4; clock_clk=1; clock_clk=0;

  386.         clock_dat=a5; clock_clk=1; clock_clk=0;

  387.         clock_dat=a6; clock_clk=1; clock_clk=0;

  388.         clock_dat=a7; clock_clk=1; clock_clk=0;

  389. }

  390. /*****************************************************************************/

  391. //DS1302寫入字節(底層協議)

  392. unsigned char clock_in(void){

  393.         clock_dat=1;

  394.         a0=clock_dat;

  395.         clock_clk=1; clock_clk=0; a1=clock_dat;

  396.         clock_clk=1; clock_clk=0; a2=clock_dat;

  397.         clock_clk=1; clock_clk=0; a3=clock_dat;

  398.         clock_clk=1; clock_clk=0; a4=clock_dat;

  399.         clock_clk=1; clock_clk=0; a5=clock_dat;

  400.         clock_clk=1; clock_clk=0; a6=clock_dat;

  401.         clock_clk=1; clock_clk=0; a7=clock_dat;

  402.         return(ACC);

  403. }

  404. /*****************************************************************************/

  405. //DS1302讀數據(底層協議)

  406. unsigned char read_clock(unsigned char ord){

  407.         unsigned char dd=0;

  408.         clock_clk=0;

  409.         clock_Rst=0;

  410.         clock_Rst=1;

  411.         clock_out(ord);

  412.         dd=clock_in();

  413.         clock_Rst=0;

  414.         clock_clk=1;

  415.         return(dd);

  416. }

  417. /*****************************************************************************/

  418. //向LCM中填寫 年 數據

  419. void lcm_w_yy(void){

  420.         //if(read_clock(0x8d) != yy){

  421.                 yy = read_clock(0x8d);

  422.                 lcm_w_test(0,0x83);

  423.                 lcm_w_word("20");

  424.                 lcm_w_test(0,0x84);

  425.                 lcm_w_test(1,(yy/16)+0x30);        

  426.                 lcm_w_test(1,yy%16+0x30);

  427. }        //}

  428. /*****************************************************************************/

  429. //向LCM中填寫 月 數據

  430. void lcm_w_mo(void){

  431.         //if(read_clock(0x89) != mo){

  432.                 mo = read_clock(0x89);

  433.                 lcm_w_test(0,0x90);

  434.                         if(mo/16 != 0){lcm_w_test(1,(mo/16)+0x30);}        //十位消隱

  435.                         else{lcm_w_test(1,0x20);}//同上                        

  436.                 lcm_w_test(1,mo%16+0x30);

  437.                 lcm_w_test(0,0x91);

  438.                 lcm_w_word("月");

  439. }        //}

  440. /*****************************************************************************/

  441. //星期處理并送入LCM的指定區域

  442. void lcm_w_xq(void){

  443.         unsigned char sel;

  444.         //if(read_clock(0x8b) != xq){

  445.         xq = read_clock(0x8b);

  446.         sel = (read_clock(0x8b))%16; //字節低4位的BCD碼放入sel

  447.         lcm_w_test(0,0x97);//寫入指定區域(97H 第二行第8個字)

  448.         if(sel==7)  {lcm_w_word("日");}    //

  449.           if(sel==6)  {lcm_w_word("六");}    //

  450.           if(sel==5)  {lcm_w_word("五");}    //

  451.           if(sel==4)  {lcm_w_word("四");}    //

  452.           if(sel==3)  {lcm_w_test(1,0xc8);lcm_w_test(1,0xfd);} //此指令等于lcm_w_word("三"); 因為“三”的內碼失效。

  453.           if(sel==2)  {lcm_w_word("二");}    //

  454.           if(sel==1)  {lcm_w_word("一");}    //星期一

  455.         lcm_w_test(0,0x95);

  456.         lcm_w_word("星期");

  457.         //}

  458. }

  459. /*****************************************************************************/

  460. //向LCM中填寫 日 數據

  461. void lcm_w_dd(void){

  462. //        if(read_clock(0x87) != dd){

  463.                 dd = read_clock(0x87);

  464.                 lcm_w_test(0,0x92);

  465.                         if(dd/16 != 0){lcm_w_test(1,(dd/16)+0x30);}        //十位消隱

  466.                         else{lcm_w_test(1,0x20);}//同上        

  467.                 lcm_w_test(1,dd%16+0x30);

  468.                 lcm_w_test(0,0x93);

  469.                 lcm_w_word("日  ");

  470. }        //}

  471. /*****************************************************************************/

  472. //向LCM中填寫 小時 數據

  473. void lcm_w_hh(void){

  474.         if(read_clock(0x85) != hh){

  475.                 hh = read_clock(0x85);

  476.                         if (hh > 0x07 && hh < 0x22 && w == 0){

  477.                                 beep = 0; led_r = 0;

  478.                                 DelayM(100);

  479.                                 beep = 1; led_r = 1;

  480.                         }

  481.                 }

  482.                 lcm_w_test(0,0x88);

  483.                 lcm_w_test(1,(hh/16)+0x30);

  484.                 lcm_w_test(1,hh%16+0x30);

  485. }        //}

  486. /*****************************************************************************/

  487. //向LCM中填寫 分鐘 數據

  488. void lcm_w_mm(void){

  489.         if(read_clock(0x83) != mm){               

  490.                 mm = read_clock(0x83);

  491.                 if( w == 0){                                

  492.                         days();           //節日顯示

  493.                         updata ();        //刷新數據

  494.                 }                                

  495.         }

  496.         lcm_w_test(0,0x89);        

  497.         lcm_w_test(1,0x3a);          //":"

  498.         lcm_w_test(1,(mm/16)+0x30);

  499.         lcm_w_test(1,mm%16+0x30);

  500.         lcm_w_test(1,0x2e);         //"."        

  501. }

  502. /*****************************************************************************/

  503. //刷新數據

  504. void updata (void){

  505.                 lcm_w_hh();//刷新 小時

  506.                 lcm_w_dd();//刷新 日

  507.                 lcm_w_xq();//更新星期值        

  508.                 lcm_w_mo();//刷新 月

  509.                 lcm_w_yy();//刷新 年

  510. }

  511. /*****************************************************************************/

  512. //向LCM中填寫 秒 數據

  513. void lcm_w_ss(void){

  514.         unsigned int i=0;

  515.         unsigned char a=0,b=0,c=0;

  516.         if(read_clock(0x81) != ss){        //判斷是否需要更新

  517.                 ss = read_clock(0x81);        //更新數據

  518.                 lcm_w_test(0,0x8b);                //秒值在LCM上的寫入位置

  519.                 lcm_w_test(1,(ss/16)+0x30);        //寫十位               

  520.                 lcm_w_test(1,ss%16+0x30);        //寫個位

  521.                 led_b = ~led_b;                                //背光閃爍

  522.                 lcm_w_mm();//刷新 分               

  523.         lcm_w_test(0,0x8d);                //溫度在LCM上的寫入位置               

  524.         i=ReadTemperature();//讀溫度并送顯

  525.         a=i/100;

  526.         lcm_w_test(1,a+0x30);        //顯示溫度十位

  527.         b=i/10-a*10;

  528.         lcm_w_test(1,b+0x30);        //個位

  529.         lcm_w_test(1,0x2e);         //"."

  530.         c=i-a*100-b*10;

  531.         lcm_w_test(1,c+0x30); //小位1位               

  532.         lcm_w_word("℃");        //度C

  533. }        }

  534. /*****************************************************************************/

  535. //---主程序---//

  536. main() {

  537.         unsigned char e=0;

  538.         KEY_I = 0;KEY_1 = 1;KEY_2 = 1;KEY_3 = 1;KEY_4 = 1;//初始鍵盤

  539.         yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各數據刷新

  540.                 beep = 0;

  541.                 DelayM(900);

  542.                 beep = 1;

  543.         lcm_init();//初始化液晶顯示器

  544.         lcm_clr();//清屏

  545.         lcm_w_word("  12864LcdClock                  Hello !!       from DoYoung.net");//顯示歡迎字

  546.         //----------|-------1-------|-------3-------|-------2-------|-------4-------|-----//標尺

  547.         DelayM(3000); //顯示等留3秒

  548.         //lcm_w_test(0,0x80);

  549.         //lcm_w_word("[Dis]      [Set]");

  550. while(1){

  551.                 if (w == 0){   //正常走時

  552.                 lcm_w_ss();//刷新 秒

  553.                 }

  554.                 else {                //啟動調時


  555.                 }

  556.                 //------------------------------------------------------------------

  557.                 if (KEY_3 == 0) // 設置時間

  558.               {

  559.                        DelayM(20);           //去抖

  560.                         led_g3 = 0;led_r = 1;

  561.                         if(KEY_3 == 0 && w == 1)  //當是調時狀態 本鍵用于調整下一項

  562.                         {

  563.                                 e++;

  564.                                 if (e >= 6 ){e = 0;}

  565.                                 Set_time(e);//調整                                

  566.                         }

  567.                         if(KEY_3 == 0 && w == 0)  //當是正常狀態時就進入調時狀態

  568.                         {

  569.                                 led_b = 1;//

  570.                                 lcm_clr();//清屏

  571.                                 //yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各數據刷新

  572.                                 w=1;          //進入調時                                

  573.                                 lcm_w_test(0,0x9e);

  574.                                 lcm_w_word(" [-]");

  575.                                 lcm_w_test(0,0x80);

  576.                                 lcm_w_word("[Esc]");

  577.                                 lcm_w_test(0,0x85);

  578.                                 lcm_w_word("[Next]");

  579.                                 lcm_w_test(0,0x98);

  580.                                 lcm_w_word("[+]");

  581.                                 Set_time(e);//調整

  582.                         }

  583.                        while(KEY_3 == 0);//等待鍵松開

  584.                         led_g3 = 1; led_r = 0;//紅燈亮,表示調時  

  585.               }

  586.                 //------------------------------------------------------------------

  587.                 if (KEY_1 == 0) // 當在調時狀態時就退出調時

  588.               {

  589.                        DelayM(20);led_g1 = 0;led_r = 1;

  590.                        if(KEY_1 == 0 && w == 1){                                

  591.                                 w = 0;          //退出調時

  592.                                 e = 0;                //“下一項”計數器清0                                                               

  593.                         }

  594.                         if(KEY_1 == 0 && w == 0){                                

  595.                                 lcm_clr();//清屏

  596.                                 lcm_w_test(0,0x80);

  597.                                 lcm_w_word("  12864LcdClock V1.01 2006-11-26 Hello !!       from DoYoung.net");

  598.                                 //----------|-------1-------|-------3-------|-------2-------|-------4-------|-----//標尺                                

  599.                                 while(KEY_1 == 0);//等待鍵松開  

  600.                         }

  601.                                 lcm_clr();//清屏

  602.                                 //lcm_w_word("[Dis]      [Set]");

  603.                                 //yy=0xff;mo=0xff;dd=0xff;xq=0xff;hh=0xff;mm=0xff;ss=0xff; //各數據刷新                                

  604.                                 days();           //節日顯示

  605.                                 updata ();        //刷新數據

  606.                                 lcm_w_mm();//刷新 分


  607.                        while(KEY_1 == 0);//等待鍵松開  

  608.                         led_g1 = 1;

  609.               }

  610.                 //------------------------------------------------------------------

  611.                 if (KEY_2 == 0 && w == 1){ // 加減調整{

  612.                        DelayM(20);led_g2 = 0;led_r = 1;

  613.                        if(KEY_2 == 0 && w == 1){                                

  614.                                 Set_time(e);//調整

  615.                         }

  616.                        while(KEY_2 == 0);//等待鍵松開

  617.                         led_g2 = 1; led_r = 0;   

  618.               }

  619.                 //------------------------------------------------------------------

  620.                 if (KEY_4 == 0 && w == 1){ // 加減調整              

  621.                        DelayM(20);        led_g4 = 0;led_r = 1;

  622.                        if(KEY_4 == 0 && w == 1){                                

  623.                                 Set_time(e);//調整

  624.                         }

  625.                        while(KEY_4 == 0);//等待鍵松開

  626.                         led_g4 = 1; led_r = 0;   

  627.               }

  628.            //------------------------------------------------------------------

  629.                  if(KEY_1 == 1 && KEY_2 == 0 && KEY_3 == 1 && KEY_4 == 0){        //時鐘初始化{

  630.                         led_r = 0;

  631.                         DelayM(3000);

  632.                         led_r = 1;

  633.                         if(KEY_1 == 0 && KEY_2 == 0&& KEY_3 == 1&& KEY_4 == 0){

  634.                                 Init_1302();

  635.                                    lcm_w_test(0,0x80);

  636.                                 lcm_clr();//清屏

  637.                                 lcm_w_word("初始化成功!    2007-1-1 00:00.0");

  638.                                 //----------|-------1-------|-------3-------|        

  639.                                 while(1);

  640.                         }

  641.                 }                        

  642. }        }

  643. /*****************************************************************************/

  644. /*

  645. //編程日志

  646. 2007-02-10 修改為正式發布版。

  647. 2007-01-26 用每分鐘刷新數據,防止顯示亂碼。

  648. 2006-11-30

  649. 2006-11-29 時鐘主顯示部分完成。

  650. 2006-11-28 時鐘驅動程序植入完成。

  651. 2006-11-27 LCM驅動程序植入完成。

  652. 2006-11-26 硬件制作完成。

  653. /*****************************************************************************/
復制代碼


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

使用道具 舉報

沙發
ID:517951 發表于 2020-12-18 20:42 | 只看該作者
在上面code中找到與顯示屏連接的語句,是P2 的兩個,可以改為P0 到P3 的任意一個,只要硬件接線沒有做其他用途即可
//引腳定義

sbit   SID   =  P2^1;        //數據

sbit   SCLK  =  P2^2;        //時鐘
回復

使用道具 舉報

板凳
ID:242298 發表于 2020-12-19 01:04 | 只看該作者
rayin 發表于 2020-12-18 20:42
在上面code中找到與顯示屏連接的語句,是P2 的兩個,可以改為P0 到P3 的任意一個,只要硬件接線沒有做其他 ...

我是需要把上面代碼的p0-p7口改成p1-p7,謝謝,怎么改啊
回復

使用道具 舉報

地板
ID:824490 發表于 2020-12-19 11:30 | 只看該作者
滿屏的if ......還大都是并列關系
一般來說超過3個并列的if....就考慮用SWICTH....CASE了,
回復

使用道具 舉報

5#
ID:160500 發表于 2020-12-19 12:31 | 只看該作者
凡是涉及到P0的都改為P1,P1的都改為你現在要使用的就ok
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线播放91| 天天爽综合网 | 免费毛片网站在线观看 | 天天干,夜夜操 | 久久久免费在线观看 | 一区二区三区欧美 | 91久久网站 | 亚洲 欧美 综合 | 欧美日韩国产不卡 | 欧美一区二区免费在线 | 九色91视频 | 国产精品亚洲精品 | 久久久久久久久91 | 99国产精品久久久久老师 | 国产69久久精品成人看动漫 | 欧美日韩在线成人 | 精品视频一二区 | 91国内精品久久 | 精品久久精品 | 99欧美精品 | 综合网视频| 激情91 | 成人av网页 | 中文字幕精品视频 | 欧美成年黄网站色视频 | 婷婷亚洲综合 | 亚洲日日夜夜 | 国产精品三级 | 国产区精品在线观看 | 麻豆久久 | 国产欧美一区二区三区久久 | 天天操人人干 | 日本免费在线观看视频 | 国产精品99久久久久久大便 | 日韩中文一区二区三区 | 久久久精品综合 | 欧美精品一区三区 | 久久一区精品 | 欧美一区二区 | 夜夜撸av| 亚洲精品乱码8久久久久久日本 |