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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

LCD1602為什么會(huì)顯示這樣?沒有加ds1302是好的,加了之后就這樣了

[復(fù)制鏈接]
ID:782437 發(fā)表于 2020-6-21 08:08 | 顯示全部樓層 |閱讀模式
10黑幣
這個(gè)問題是不是那個(gè)程序程序錯(cuò)誤?
如ds1302..h  或者 LCD1602.h
  1. #ifndef _DS1302_H_
  2. #define _DS1302_H_
  3. #define uchar unsigned char
  4. sbit SCLK=P2^3;  //ds1302時(shí)鐘線定義
  5. sbit IO=P2^4;    //數(shù)據(jù)線
  6. sbit RST=P2^5;         //復(fù)位線
  7. uchar sec,min,hour,day,mon,year,week;
  8. //uchar n_year,n_mon,n_day;//農(nóng)歷顯示的函數(shù)

  9. /*------------------------------------------------
  10.                     DS1302編程部分
  11. ------------------------------------------------*/

  12. void write_1302(uchar add,uchar dat) //寫操作 (寫地址+寫數(shù)據(jù))
  13. {
  14.         uchar i;
  15.         RST=1;                 //把復(fù)位線拉高
  16.         for(i=0;i<8;i++)
  17.         {
  18.                 SCLK=0;//時(shí)鐘信號(hào)為低,開始寫地址
  19.                 IO = add & 0x01;            
  20.                 add >>= 1;                 //把地址右移一位
  21.                 SCLK=1;                         //時(shí)鐘線拿高
  22.         }
  23.         for(i=0;i<8;i++)
  24.         {
  25.                 SCLK=0;//時(shí)鐘信號(hào)為低,開始寫數(shù)據(jù)
  26.                 IO = dat & 0x01;            
  27.                 dat >>= 1;                 //把地址右移一位
  28.                 SCLK=1;                         //時(shí)鐘線拿高
  29.         }
  30.         SCLK=0;
  31.         RST=0;//寫操作結(jié)束
  32.         IO =0;
  33. }
  34. uchar read_1302(uchar add)        //讀操作(寫地址+讀數(shù)據(jù))
  35. {
  36.         uchar i,value;
  37.         RST=0;
  38.         SCLK=0;
  39.         RST=1;                 //把復(fù)位線拉高
  40.         for(i=0;i<8;i++)
  41.         {
  42.                 SCLK=0;//時(shí)鐘信號(hào)為低,開始寫地址
  43.                 IO = add & 0x01; //讓IO保存add的最低位           
  44.                 add >>= 1;                 //把地址右移一位
  45.                 SCLK=1;                         //時(shí)鐘線拿高
  46.         }
  47.         for(i=0;i<8;i++)
  48.         {
  49.                
  50.                 value >>= 1;         //把數(shù)據(jù)右移一位
  51.                 if(IO == 1)  value |= 0x80; // 將數(shù)據(jù)放在value的最高位,達(dá)到保存數(shù)據(jù)的結(jié)果
  52.                 SCLK=0;//時(shí)鐘信號(hào)為低,開始寫數(shù)據(jù)        
  53.                 SCLK=1;                         //時(shí)鐘線拿高
  54.         }
  55.         SCLK=0;
  56.         RST=0;//讀操作結(jié)束
  57.         IO =0;
  58.         return value;                 //返回讀出來的數(shù)據(jù)
  59. }
  60. uchar BCD_Decimal(uchar bcd)
  61. {
  62. uchar Decimal;
  63. Decimal=bcd>>4;
  64. return(Decimal=Decimal*10+(bcd&=0x0F));
  65. }
  66. /*************把要的時(shí)間 年月日 都讀出來***************/
  67. void read_time()
  68. {        
  69.     sec = BCD_Decimal(read_1302(0x81));
  70.         min = BCD_Decimal(read_1302(0x83));
  71.         hour  = BCD_Decimal(read_1302(0x85));
  72.         day  = BCD_Decimal(read_1302(0x87));
  73.         mon = BCD_Decimal(read_1302(0x89));
  74.         year=BCD_Decimal(read_1302(0x8d));
  75.         week=BCD_Decimal(read_1302(0x8b));

  76. //        Conversion(0,year,mon,day);        //農(nóng)歷轉(zhuǎn)換                                    
  77. //        n_year = year_moon ;
  78. //        n_mon  = month_moon ;
  79. //        n_day  = day_moon ;

  80. }
  81.                                                 //秒  分   時(shí)   日   月  年   星期         
  82. //uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //寫地址
  83. //uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //讀地址
  84. //uchar code tab1[]={"2020-06-19 FRI"};
  85. //uchar code tab2[]={"10:32:48"};

  86. /*************把要寫的時(shí)間 年月日 都寫入ds1302里***************/
  87. void write_time()
  88. {
  89.     uchar temp;
  90.     write_1302(0x80,sec|0x00);//允許寫
  91.         write_1302(0x8e,0x00);                        //打開寫保護(hù)
  92.         sec= (tab2[6]-0x30)*10+(tab2[7]-0x30);
  93.         temp=(sec)/10*16+(sec)%10;
  94.         write_1302(0x80,0x00|temp);

  95.         min= (tab2[3]-0x30)*10+(tab2[4]-0x30);
  96.         temp=(min)/10*16+(min)%10;
  97.         write_1302(0x82,0x00|temp);

  98.         hour= (tab2[0]-0x30)*10+(tab2[1]-0x30);
  99.         temp=(hour)/10*16+(hour)%10;
  100.         write_1302(0x84,0x00|temp);

  101.         day= (tab1[8]-0x30)*10+(tab1[9]-0x30);
  102.         temp=(day)/10*16+(day)%10;
  103.         write_1302(0x86,0x00|temp);

  104.         mon= (tab1[5]-0x30)*10+(tab1[6]-0x30);
  105.         temp=(mon)/10*16+(mon)%10;
  106.         write_1302(0x88,0x00|temp);

  107.         write_1302(0x8e,0x80);                        //關(guān)閉寫保護(hù)
  108. }
  109. //*************把數(shù)據(jù)保存到ds1302 RAM中**0-31*************/
  110. //void write_1302ram(uchar add,uchar dat)
  111. //{
  112. //        add <<= 1;     //地址是從第二位開始的
  113. //        add &= 0xfe;   //把最低位清零  是寫的命令
  114. //        add |= 0xc0;   //地址最高兩位為 1  
  115. //        write_1302(0x8e,0x00);
  116. //        write_1302(add,dat);        
  117. //        write_1302(0x8e,0x80);
  118. //}
  119. //*************把數(shù)據(jù)從ds1302 RAM讀出來**0-31*************/
  120. //uchar read_1302ram(uchar add)
  121. //{
  122. //        add <<= 1;     //地址是從第二位開始的
  123. //        add |= 0x01;   //把最高位置1  是讀命令
  124. //        add |= 0xc0;   //地址最高兩位為 1  
  125. //        return(read_1302(add));        
  126. //}                                                                                                                 



  127. /*************初始化ds1302時(shí)間***************/
  128. void init_ds1302()
  129. {
  130.         RST = 0;        //第一次讀寫數(shù)據(jù)時(shí)要把IO口拿低
  131.         SCLK=0;
  132.         IO= 0;
  133.         write_time();
  134. }

  135. #endif

  136. #ifndef _LCD1602_H_
  137. #define _LCD1602_H_
  138. #define uchar unsigned char
  139. #define uint unsigned int
  140. uchar sec,min,hour,day,min,year,week;
  141. sbit RS = P2^0;   //寄存器選擇信號(hào) H:數(shù)據(jù)寄存器          L:指令寄存器
  142. sbit RW = P2^1;          //讀寫選擇信號(hào) H:讀          L:寫
  143. sbit EN = P2^2;          //片選信號(hào)   下降沿觸發(fā)
  144. #define yh 0x80  //第一行的初始位置
  145. #define er 0x80+0x40 //第二行初始位置
  146. uchar code tab1[]={"2020-06-19 FRI"};
  147. uchar code tab2[]={"10:32:48"};
  148. /***********************延時(shí)函數(shù)************************/
  149. void delay(uint xms)//延時(shí)函數(shù)
  150. {
  151.         uint x,y;
  152.         for(x=xms;x>0;x--)
  153.          for(y=110;y>0;y--);
  154. }
  155. void delay_uint(uint q)
  156. {
  157.         while(q--);
  158. }
  159. /*------------------------------------------------
  160.               寫入命令函數(shù)
  161. ------------------------------------------------*/
  162. void LCD_Write_Cmd(uchar cmd)
  163. {  

  164. RS=0; //        選擇指令寄存器
  165. RW=0;//寫操作
  166. EN=0;//正跳變,將命令寫入液晶模塊
  167. P0=cmd; //將命令送入P0
  168. delay_uint(3);
  169. EN=1;
  170. delay_uint(25);
  171. EN=0;
  172. }
  173. /*------------------------------------------------
  174.               寫入數(shù)據(jù)函數(shù)
  175. ------------------------------------------------*/
  176. void LCD_Write_Data(uchar Data)
  177. {
  178. RS=1; //選擇數(shù)據(jù)寄存器
  179. RW=0; //寫操作
  180. EN=0;
  181. P0= Data; //將數(shù)據(jù)送入P0
  182. delay_uint(3);
  183. EN=1;
  184. delay_uint(25);
  185. EN=0;
  186. }
  187. /*------------------------------------------------
  188.               寫入星期函數(shù)
  189. ------------------------------------------------*/
  190. void LCD_Write_week(uchar week)
  191. {     
  192.     LCD_Write_Cmd(yh+0x0d);//將星期顯示到LCD的第一行的13位
  193.          switch(week)
  194.         {
  195.                 case 1:LCD_Write_Data('M');
  196.                            LCD_Write_Data('O');
  197.                            LCD_Write_Data('N');
  198.                            break;
  199.            
  200.                 case 2:LCD_Write_Data('T');
  201.                            LCD_Write_Data('U');
  202.                            LCD_Write_Data('E');
  203.                            break;
  204.                
  205.                 case 3:LCD_Write_Data('W');
  206.                            LCD_Write_Data('E');
  207.                            LCD_Write_Data('D');
  208.                            break;
  209.                
  210.                 case 4:LCD_Write_Data('T');
  211.                            LCD_Write_Data('H');
  212.                            LCD_Write_Data('U');
  213.                            break;
  214.                
  215.                 case 5:LCD_Write_Data('F');
  216.                            LCD_Write_Data('R');
  217.                            LCD_Write_Data('I');
  218.                            break;
  219.                
  220.                 case 6:LCD_Write_Data('S');
  221.                            LCD_Write_Data('T');
  222.                            LCD_Write_Data('A');
  223.                            break;
  224.                
  225.                 case 7:LCD_Write_Data('S');
  226.                            LCD_Write_Data('U');
  227.                            LCD_Write_Data('N');
  228.                            break;  
  229.          }
  230. }

  231. /*------------------------------------------------
  232.               寫入時(shí)分秒函數(shù)
  233. ------------------------------------------------*/
  234. void LCD_Write_sfm(uchar add,uchar dat)
  235. {
  236. uchar gw,sw;//定義十位 個(gè)位
  237. gw=dat%10;
  238. sw=dat/10;
  239. LCD_Write_Cmd(er+add); ///將時(shí)分秒顯示到LCD的第二行的add位
  240. LCD_Write_Data(0x30+sw);
  241. LCD_Write_Data(0x30+gw);//0x30=48  十進(jìn)制數(shù)+48=等于其ascll值   lcd1602為字符型  
  242. }
  243. /*------------------------------------------------
  244.               寫入年月日函數(shù)
  245. ------------------------------------------------*/
  246. void LCD_Write_nyr(uchar add,uchar dat)
  247. {
  248. uchar gw,sw;//定義十位 個(gè)位
  249. gw=dat%10;
  250. sw=dat/10;
  251. LCD_Write_Cmd(yh+add); ///將時(shí)分秒顯示到LCD的第二行的add位
  252. LCD_Write_Data(0x30+sw);
  253. LCD_Write_Data(0x30+gw);//0x30=48  十進(jìn)制數(shù)+48=等于其ascll值   lcd1602為字符型  
  254. }
  255. /*------------------------------------------------
  256.               寫入字符串函數(shù)
  257. ------------------------------------------------*/
  258. void LCD_Write_String(uchar x,uchar y,uchar *s)
  259. {     
  260. if (x == 0)
  261.          {     
  262.          LCD_Write_Cmd(0x80 + y);     //表示第一行
  263.          }
  264. else
  265.          {      
  266.          LCD_Write_Cmd(0xC0 + y);      //表示第二行
  267.          }        
  268. while (*s)
  269.          {     
  270. LCD_Write_Data( *s);     
  271. s ++;     
  272.          }
  273. }
  274. /*------------------------------------------------
  275.         開機(jī)液晶顯示函數(shù)
  276. ------------------------------------------------*/
  277. void Init_1602()  //初始化液晶
  278. {  
  279.   LCD_Write_String(0,2,"Hello world");
  280. }
  281. /*------------------------------------------------
  282.               初始化函數(shù)
  283. ------------------------------------------------*/
  284. void LCD_Init(void)
  285. {
  286.    uchar i;
  287.    LCD_Write_Cmd(0x38);//顯示模式設(shè)置:16x2顯示,5x7點(diǎn)陣,8位數(shù)據(jù)接口
  288.    LCD_Write_Cmd(0x0c);    //顯示模式設(shè)置:顯示開,有光標(biāo)
  289.    LCD_Write_Cmd(0x06);   //顯示模式設(shè)置:光標(biāo)右移,字符不移
  290.    LCD_Write_Cmd(0x01);        //清屏
  291.    Init_1602();
  292.    delay(1000);
  293.    LCD_Write_Cmd(yh+2);//字符寫入的位置--第一行第2位
  294.            for(i=0;i<14;i++)
  295.         {
  296.         LCD_Write_Data(tab1[i]);
  297.         }
  298.         LCD_Write_Cmd(er+4);
  299.         for(i=0;i<8;i++)                                                                          
  300.         {
  301.         LCD_Write_Data(tab2[i]);
  302.         }

  303.    }


  304. #endif
復(fù)制代碼



3.PNG
回復(fù)

使用道具 舉報(bào)

ID:584814 發(fā)表于 2020-6-23 17:54 | 顯示全部樓層
沒加之前是好的,基本說明1602部分沒問題,看圖感覺是數(shù)據(jù)沒正確讀出。
回復(fù)

使用道具 舉報(bào)

ID:788182 發(fā)表于 2020-6-23 22:04 | 顯示全部樓層
是不是拐角連接問題,外部沒問題的話,多半是程序邏輯問題了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产99久久久国产精品 | a亚洲精品 | 日韩免费视频一区二区 | 在线91| 91综合在线视频 | 91视在线国内在线播放酒店 | 欧美久久久久久 | 国产精品91久久久久久 | 欧美日韩国产一区二区三区 | 日韩免费网站 | 国产毛片久久久 | 久草免费在线视频 | 国产在线精品一区二区 | 国产伦精品一区二区三区精品视频 | 国产蜜臀97一区二区三区 | 91免费电影 | 狠狠综合久久av一区二区老牛 | 亚洲一区国产 | 成人福利网站 | 高清视频一区二区三区 | 国产一区二区日韩 | 国产精品欧美精品 | 国产亚洲精品久久久久久豆腐 | 日韩欧美在线精品 | av色在线 | 黄色国产区 | 国产精品久久久久不卡 | 亚洲午夜网 | 亚洲精品国产偷自在线观看 | 久久精品天堂 | 亚洲在线一区二区 | 欧美九九九 | 免费在线成人 | 国产操操操 | 99久久精品免费看国产小宝寻花 | 久久99精品久久 | 久久久久精 | 色偷偷噜噜噜亚洲男人 | 成人午夜黄色 | 欧美日韩精品一区二区 | 亚洲欧美一区二区三区视频 |