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

QQ登錄

只需一步,快速開始

搜索
查看: 2288|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)12864電子鎖程序

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 250 黑幣 回復(fù)本帖可獲得 50 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
樓主
ID:682017 發(fā)表于 2020-1-12 13:34 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
電子密碼鎖
1. 采用 LCD12864 顯示;
2. 矩陣式按鍵輸入密碼,密碼長(zhǎng)度 6 位;
3. 具有密碼修改功能,可存儲(chǔ) 3 組密碼;
4. 密碼輸入正確則屏幕顯示正確的提示,屏幕顯示提示:密碼正確!  
5密碼輸入錯(cuò)誤,屏幕顯示提示:密碼錯(cuò)誤!請(qǐng)重新輸入。連續(xù)錯(cuò)誤次數(shù)達(dá)到 3 次,并有紅色 LED 燈亮。
求大神幫 ,有源碼,能在開發(fā)板上使用

單片機(jī)源程序如下:
  1. #include "lcd12864.h"


  2. //寫數(shù)據(jù)
  3. void WriteDataLCD(unsigned char WDLCD)
  4. {
  5. ReadStatusLCD(); //檢測(cè)忙
  6. LCD_RS = 1;
  7. LCD_RW = 0;
  8. LCD_Data = WDLCD;
  9. LCD_E = 1;
  10. LCD_E = 1;
  11. LCD_E = 1;
  12. LCD_E = 0;
  13. }

  14. //寫指令
  15. void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
  16. {
  17. if (BuysC) ReadStatusLCD(); //根據(jù)需要檢測(cè)忙
  18. LCD_RS = 0;
  19. LCD_RW = 0;
  20. LCD_Data = WCLCD;
  21. LCD_E = 1;
  22. LCD_E = 1;
  23. LCD_E = 1;
  24. LCD_E = 0;  
  25. }

  26. //讀數(shù)據(jù)
  27. unsigned char ReadDataLCD(void)
  28. {
  29. LCD_RS = 1;
  30. LCD_RW = 1;
  31. LCD_E = 0;
  32. LCD_E = 0;
  33. LCD_E = 1;
  34. return(LCD_Data);
  35. }

  36. //讀狀態(tài)
  37. unsigned char ReadStatusLCD(void)
  38. {
  39. LCD_Data = 0xFF;
  40. LCD_RS = 0;
  41. LCD_RW = 1;
  42. LCD_E = 1;
  43. while (LCD_Data & Busy); //檢測(cè)忙信號(hào)
  44. LCD_E = 0;
  45. return(LCD_Data);
  46. }

  47. void LCDInit(void) //LCM初始化
  48. {
  49. WriteCommandLCD(0x30,1); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
  50. WriteCommandLCD(0x01,1); //顯示清屏
  51. WriteCommandLCD(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
  52. WriteCommandLCD(0x0C,1); // 顯示開及光標(biāo)設(shè)置
  53. }
  54. void LCDClear(void) //清屏
  55. {
  56. WriteCommandLCD(0x01,1); //顯示清屏
  57. WriteCommandLCD(0x34,1); // 顯示光標(biāo)移動(dòng)設(shè)置
  58. WriteCommandLCD(0x30,1); // 顯示開及光標(biāo)設(shè)置
  59. }
  60. void LCDFlash(void)        //閃爍效果
  61. {
  62. WriteCommandLCD(0x08,1); //顯示清屏
  63. Delay400Ms();
  64. WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
  65. Delay400Ms();
  66. WriteCommandLCD(0x08,1); //顯示清屏
  67. Delay400Ms();
  68. WriteCommandLCD(0x0c,1); // 顯示開及光標(biāo)設(shè)置
  69. Delay400Ms();
  70. WriteCommandLCD(0x08,1); //顯示清屏
  71. Delay400Ms();
  72. }
  73. //按指定位置顯示一個(gè)字符
  74. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  75. {
  76. if(Y<1)
  77.          Y=1;
  78. if(Y>4)
  79.          Y=4;
  80. X &= 0x0F; //限制X不能大于16,Y不能大于1
  81. switch(Y){
  82.         case 1:X|=0X80;break;
  83.         case 2:X|=0X90;break;
  84.         case 3:X|=0X88;break;
  85.         case 4:X|=0X98;break;
  86.         }
  87. WriteCommandLCD(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
  88. WriteDataLCD(DData);
  89. }

  90. //按指定位置顯示一串字符
  91. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char  *DData)
  92. {
  93. unsigned char ListLength,X2;
  94.   ListLength = 0;
  95.   X2=X;
  96. if(Y<1)
  97.          Y=1;
  98. if(Y>4)
  99.          Y=4;
  100. X &= 0x0F; //限制X不能大于16,Y在1-4之內(nèi)
  101. switch(Y){
  102.         case 1:X2|=0X80;break;        //根據(jù)行數(shù)來選擇相應(yīng)地址
  103.         case 2:X2|=0X90;break;
  104.         case 3:X2|=0X88;break;
  105.         case 4:X2|=0X98;break;
  106.         }
  107. WriteCommandLCD(X2, 1); //發(fā)送地址碼
  108.   while (DData[ListLength]>=0x20) //若到達(dá)字串尾則退出
  109.   {
  110.    if (X <= 0x0F) //X坐標(biāo)應(yīng)小于0xF
  111.     {
  112.      WriteDataLCD(DData[ListLength]); //
  113.      ListLength++;
  114.          X++;
  115.          Delay5Ms();
  116.     }
  117.   }
  118. }



  119. //5ms延時(shí)
  120. void Delay5Ms(void)
  121. {
  122. unsigned int TempCyc = 5552;
  123. while(TempCyc--);
  124. }

  125. //400ms延時(shí)
  126. void Delay400Ms(void)
  127. {
  128. unsigned char TempCycA = 5;
  129. unsigned int TempCycB;
  130. while(TempCycA--)
  131. {
  132.   TempCycB=7269;
  133.   while(TempCycB--);
  134. };
  135. }
復(fù)制代碼

所有資料51hei提供下載:
新建文件夾 (2).zip (1.96 KB, 下載次數(shù): 35)


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

使用道具 舉報(bào)

沙發(fā)
ID:110278 發(fā)表于 2020-3-6 16:12 | 只看該作者
挺好用的。
回復(fù)

使用道具 舉報(bào)

板凳
ID:702057 發(fā)表于 2020-3-7 13:39 | 只看該作者
看上去不錯(cuò),一樣能用吧!
回復(fù)

使用道具 舉報(bào)

地板
ID:701661 發(fā)表于 2020-3-8 03:14 | 只看該作者
寫的很詳細(xì),目測(cè)應(yīng)該能用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表