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

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

QQ登錄

只需一步,快速開(kāi)始

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

51單片機(jī)密碼門(mén)禁系統(tǒng)綜合實(shí)驗(yàn) proteus仿真+程序源碼

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:300927 發(fā)表于 2018-10-18 19:12 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
采用51單片機(jī)設(shè)計(jì)門(mén)禁系統(tǒng),4X4鍵盤(pán)用戶(hù)輸入密碼,錯(cuò)誤蜂鳴器叫一聲,正確LED閃爍,12864作為用戶(hù)界面,初始顯示“歡迎光臨”,正確與錯(cuò)誤時(shí)12864有相應(yīng)的提示。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #define        uchar unsigned char
  3. #define uint unsigned int
  4. #define _nop {}                                                        //空操作
  5. #define PAGEADD 0xb8        //頁(yè)地址起始
  6. #define TIERADD 0x40                //行地址起始          
  7. #define DIS_STARADD 0xc0          //開(kāi)始命令

  8. uchar row,column,c;
  9.        
  10. sbit CS2 = P3 ^ 3;                                                       
  11. sbit CS1 = P3 ^ 4;                                                       
  12. sbit E   = P3 ^ 5;        //定義使能端                                               
  13. sbit RW  = P3 ^ 6;                                                       
  14. sbit DI  = P3 ^ 7;                               
  15.        
  16. sbit INT = P3 ^ 2;        //外部中斷0引腳
  17. sbit buzzer = P3 ^ 0;
  18. sbit P3_1 = P3 ^ 1;
  19. sbit LED = P3 ^ 1;
  20.        
  21. uchar flog = 0;
  22. uchar flog1 = 0;
  23. //鍵值數(shù)組
  24. uchar cc[] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
  25. /****************************
  26. 漢字顯示
  27. *****************************/
  28. uchar code table2[] = {                     //加code在ROM
  29.                 //-- 密 --
  30.      0x10,0x4C,0x24,0x04,0xF4,0x84,0x4D,0x56,0x24,0x24,0x14,0x84,0x24,0x54,0x0C,0x00,//16字節(jié)
  31.      0x00,0x01,0xFD,0x41,0x40,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0xFC,0x00,0x00,0x00,
  32.                 //-- 碼 --
  33.      0x02,0x82,0xF2,0x4E,0x43,0xE2,0x42,0xFA,0x02,0x02,0x02,0xFF,0x02,0x80,0x00,0x00,
  34.      0x01,0x00,0x7F,0x20,0x20,0x7F,0x08,0x09,0x09,0x09,0x0D,0x49,0x81,0x7F,0x01,0x00,
  35.                 //-- 正 --
  36.      0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0xC2,0x83,0x02,0x00,0x00,
  37.      0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,
  38.                 //-- 確 --
  39.      0x04,0x84,0xE4,0x9C,0x84,0xC6,0x24,0xF0,0x28,0x27,0xF4,0x2C,0x24,0xF0,0x20,0x00,
  40.      0x01,0x00,0x7F,0x20,0x20,0xBF,0x40,0x3F,0x09,0x09,0x7F,0x09,0x89,0xFF,0x00,0x00,        //半個(gè)屏
  41.     //-- 歡 --
  42.                 0x04, 0x34, 0xC4, 0x04, 0xC4, 0x3C, 0x20, 0x10, 0x0F, 0xE8, 0x08, 0x08, 0x28, 0x18, 0x00, 0x00,
  43.     0x10, 0x08, 0x06, 0x01, 0x82, 0x8C, 0x40, 0x30, 0x0C, 0x03, 0x0C, 0x10, 0x60, 0xC0, 0x40, 0x00,
  44.     //-- 迎 --
  45.                 0x40, 0x42, 0x44, 0xC8, 0x00, 0xFC, 0x04, 0x02, 0x82, 0xFC, 0x04, 0x04, 0x04, 0xFE, 0x04, 0x00,
  46.     0x00, 0x40, 0x20, 0x1F, 0x20, 0x47, 0x42, 0x41, 0x40, 0x7F, 0x40, 0x42, 0x44, 0x63, 0x20, 0x00,
  47.     //-- 光 --
  48.                 0x40, 0x40, 0x42, 0x44, 0x58, 0xC0, 0x40, 0x7F, 0x40, 0xC0, 0x50, 0x48, 0x46, 0x64, 0x40, 0x00,
  49.     0x00, 0x80, 0x40, 0x20, 0x18, 0x07, 0x00, 0x00, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x70, 0x00,
  50.     //-- 臨 --
  51.                 0x00, 0xFC, 0x00, 0xFF, 0x40, 0x20, 0x10, 0x0C, 0x2B, 0x48, 0xC8, 0x08, 0x08, 0x8C, 0x08, 0x00,
  52.     0x00, 0x1F, 0x00, 0xFF, 0x00, 0xFF, 0x41, 0x41, 0x41, 0x7F, 0x41, 0x41, 0x41, 0xFF, 0x01, 0x00,
  53.     //-- 密 --
  54.     0x10, 0x4C, 0x24, 0x04, 0xF4, 0x84, 0x4D, 0x56, 0x24, 0x24, 0x14, 0x84, 0x24, 0x54, 0x0C, 0x00,
  55.     0x00, 0x01, 0xFD, 0x41, 0x40, 0x41, 0x41, 0x7F, 0x41, 0x41, 0x41, 0x41, 0xFC, 0x00, 0x00, 0x00,
  56.     //-- 碼 --
  57.     0x02, 0x82, 0xF2, 0x4E, 0x43, 0xE2, 0x42, 0xFA, 0x02, 0x02, 0x02, 0xFF, 0x02, 0x80, 0x00, 0x00,
  58.     0x01, 0x00, 0x7F, 0x20, 0x20, 0x7F, 0x08, 0x09, 0x09, 0x09, 0x0D, 0x49, 0x81, 0x7F, 0x01, 0x00,
  59.     //-- 錯(cuò) --
  60.     0x80, 0x40, 0x70, 0xCF, 0x48, 0x48, 0x48, 0x48, 0x7F, 0x48, 0x48, 0x7F, 0xC8, 0x68, 0x40, 0x00,
  61.     0x00, 0x02, 0x02, 0x7F, 0x22, 0x12, 0x00, 0xFF, 0x49, 0x49, 0x49, 0x49, 0xFF, 0x01, 0x00, 0x00,
  62.     //-- 誤 --
  63.     0x40, 0x42, 0xC4, 0x0C, 0x00, 0x40, 0x5E, 0x52, 0x52, 0xD2, 0x52, 0x52, 0x5F, 0x42, 0x00, 0x00,
  64.     0x00, 0x00, 0x7F, 0x20, 0x12, 0x82, 0x42, 0x22, 0x1A, 0x07, 0x1A, 0x22, 0x42, 0xC3, 0x42, 0x00,

  65. };
  66. //延遲函數(shù)
  67. void Delay_nms(uchar n)
  68. {
  69.         uchar a;
  70.         for (; n>0; n--)
  71.                 for (a = 0; a<100; a++);
  72. }
  73. //檢查狀態(tài)
  74. void LCD_Busy()
  75. {
  76.         uchar busy;
  77.         E = 0;           //RW=1,E信號(hào)下降沿鎖存DB7~DB0;RW=1,E=1,DDRAM數(shù)據(jù)讀到DB7~DB0
  78.         DI = 0;          //DB7~DB0為指令數(shù)據(jù)
  79.         RW = 1;
  80.         while (1)
  81.         {
  82.                 E = 1;         //DDRAM數(shù)據(jù)讀到DB7~DB0
  83.                 _nop;
  84.                 _nop;
  85.                 busy = P2;//讀狀態(tài)標(biāo)志寄存器
  86.                 _nop;
  87.                 E = 0;        //        下降沿鎖存DB7~DB0
  88.                 if ((busy & 0x90) == 0)//檢測(cè)BF和RST(復(fù)位重啟)位,兩者都為零時(shí)表示可以進(jìn)行寫(xiě)入
  89.                         break;
  90.         }
  91. }
  92. //左屏輸入指令
  93. void WRCommand_L(uchar command)
  94. {
  95.         CS1 = 1;
  96.         CS2 = 0;
  97.         LCD_Busy();        //檢查狀態(tài)
  98.         DI = 0;           //DB7~DB0為指令數(shù)據(jù)
  99.         _nop;
  100.         RW = 0;
  101.         _nop;
  102.         E = 1;
  103.         _nop;
  104.         P2 = command;
  105.         _nop;
  106.         E = 0;        //RW=0,E下降沿?cái)?shù)據(jù)寫(xiě)到DB7~DB0
  107.         _nop;
  108. }
  109. //右屏輸入指令
  110. void WRCommand_R(uchar command)
  111. {
  112.         CS1 = 0;
  113.         CS2 = 1;
  114.         LCD_Busy();
  115.         DI = 0;//指令
  116.         _nop;
  117.         RW = 0;          //寫(xiě)
  118.         _nop;
  119.         E = 1;
  120.         _nop;
  121.         P2 = command;
  122.         _nop;
  123.         E = 0;
  124.         _nop;
  125. }
  126. //左屏輸入數(shù)據(jù) (寫(xiě)一個(gè)字節(jié)的顯示數(shù)據(jù))
  127. void WRdata_L(uchar ucdata)
  128. {
  129.         CS1 = 1;
  130.         CS2 =0;
  131.         LCD_Busy();
  132.         DI = 1;           //DB7~DB0為顯示數(shù)據(jù)
  133.         _nop;               
  134.         RW = 0;
  135.         _nop;
  136.         E = 1;
  137.         _nop;
  138.         P2 = ucdata;
  139.         _nop;
  140.         E = 0;
  141.         _nop;
  142. }
  143. //右屏輸入數(shù)據(jù)
  144. void WRdata_R(uchar ucdata)
  145. {
  146.         CS1 =0;
  147.         CS2 = 1;
  148.         LCD_Busy();
  149.         DI =1;
  150.         _nop;
  151.         RW = 0;
  152.         _nop;
  153.         E = 1;
  154.         _nop;
  155.         P2 = ucdata;
  156.         _nop;
  157.         E = 0;
  158.         _nop;
  159. }
  160. //左屏顯示
  161. //字符為16*16顯示,分為兩部分寫(xiě)入32字節(jié)。前16個(gè)字節(jié)寫(xiě)入第一頁(yè)(16*8) 后16個(gè)字節(jié)寫(xiě)入第二頁(yè)(16*8)
  162. void C_display_L(uchar C_Pagenum, uchar C_Tiernum, uchar C_Temp)                                //C_Pagenum:頁(yè),C_Tiernum:行char C_Temp:第幾個(gè)字符
  163. {
  164.         uchar k;
  165.         C_Pagenum = PAGEADD | C_Pagenum;        //首頁(yè)地址為 0xb8                       
  166.         C_Tiernum = TIERADD | C_Tiernum;          //首行地址為 0x40
  167.         WRCommand_L(C_Pagenum);          //左屏輸入
  168.         WRCommand_L(C_Tiernum);
  169.         for (k = 0; k<16; k++)
  170.         {
  171.                 WRdata_L(table2[C_Temp * 32 + k]);           //左屏輸入數(shù)據(jù)
  172.         };
  173.         C_Pagenum = C_Pagenum + 1;                                                        //下頁(yè)
  174.         WRCommand_L(C_Pagenum);
  175.         WRCommand_L(C_Tiernum);
  176.         for (k = 0; k<16; k++)
  177.         {
  178.                 WRdata_L(table2[C_Temp * 32 + k + 16]);
  179.         }
  180. }
  181. //右屏顯示
  182. void C_display_R(uchar C_Pagenum, uchar C_Tiernum, uchar C_Temp)
  183. {
  184.         uchar k;
  185.         C_Pagenum = PAGEADD | C_Pagenum;
  186.         C_Tiernum = TIERADD | C_Tiernum;
  187.         WRCommand_R(C_Pagenum);
  188.         WRCommand_R(C_Tiernum);
  189.         for (k = 0; k<16; k++)
  190.         {
  191.                 WRdata_R(table2[C_Temp * 32 + k]);
  192.         }
  193.         C_Pagenum = C_Pagenum + 1;
  194.         WRCommand_R(C_Pagenum);
  195.         WRCommand_R(C_Tiernum);
  196.         for (k = 0; k<16; k++)
  197.         {
  198.                 WRdata_R(table2[C_Temp * 32 + k + 16]);
  199.         }
  200. }
  201. //清除所有顯示寄存器
  202. void CLR_DisplayRAM()
  203. {
  204.         uchar C_page, i, k;
  205.         for (i = 0; i<8; i++)
  206.         {
  207.                 C_page = PAGEADD | i;//清除起始頁(yè)為0       
  208.                 WRCommand_L(C_page);  //清除起始頁(yè)寫(xiě)入
  209.                 WRCommand_L(TIERADD);        //清除起始行地址寫(xiě)入
  210.                 WRCommand_R(C_page);
  211.                 WRCommand_R(TIERADD);
  212.                 for (k = 0; k<64; k++)
  213.                 {
  214.                         WRdata_L(0x00);
  215.                         WRdata_R(0x00);   //lcm的ram自動(dòng)加1,只允許循環(huán)64次
  216.                 }
  217.         }
  218. }
  219. //LCD初始化
  220. void Init_LCD(void)
  221. {
  222.         CLR_DisplayRAM();//          清除所有顯示寄存器
  223.         WRCommand_L(DIS_STARADD);
  224.         WRCommand_R(DIS_STARADD);//           設(shè)置顯示起始列地址0xc0
  225.         WRCommand_L(0x3f);
  226.         WRCommand_R(0x3f);
  227. }
  228. //延遲函數(shù)
  229. void delay()
  230. {
  231.         uchar i;
  232.         uchar j;
  233.         for(i = 0;i < 100;i++)
  234.         {
  235.                 for(j = 200;j>0;j--);
  236.         }
  237. }
  238. //鍵盤(pán)掃描
  239. char keyscan()
  240. {
  241.         uchar cord_h,cord_l;
  242.         uchar key=0;
  243.         P1=0xf0;
  244.         if(P1!=0xf0)
  245.         {
  246.                 delay();  //消抖動(dòng)
  247.                 if(P1!=0xf0)
  248.                 {
  249.                         cord_l=P1;
  250.                         P1=0x0f;
  251.                         cord_h=P1;
  252.                         key=cord_l|cord_h; //鍵值
  253.                 }
  254.         }
  255.         P1=0xf0;
  256.         return key;
  257. }
  258. //密碼輸入成功
  259. void Pass()
  260. {
  261.                 uchar a = 0, pagenum = 0,i =0;
  262.                 LED = 1;
  263.                 Init_LCD();                //lcd初始化

  264.                         //中文顯示“密碼正確”
  265.                         pagenum = 0;//從第一排開(kāi)始顯示
  266.                         for (a = 0; a<4; a++)
  267.                         {
  268.                                 C_display_L(pagenum, a * 16, a);
  269.                         }
  270.                        
  271.                         //中文顯示“歡迎光臨”
  272.                                 pagenum = 2;//從第二排開(kāi)始顯示
  273.                         for (a = 0; a<4; a++)
  274.                         {
  275.                                 C_display_R(pagenum, a * 16, a + 4);
  276.                         }
  277.                         while(1);
  278.         }
  279.         //按鍵中斷(int0)
  280. void IntoPro() interrupt 0
  281. {
  282.         uchar a = 0,pagenum = 0,i = 0,key;
  283.         flog1++;  //記錄按鍵的次數(shù)
  284.         key=keyscan();        //掃描鍵盤(pán)是否按下
  285.        
  286.         CLR_DisplayRAM();  //清屏
  287.        
  288.         if(key == cc[0])  //判斷第一位密碼是否正確,正確flog++
  289.         {
  290.         flog=flog+1;}                                        //P3_1 = 0;
  291.         if(key == cc[1])
  292.         {if(flog % 3 == 1)                                                                
  293.                 flog=flog+1;}                                        //P3_1 = 1;
  294.         if(key== cc[2])
  295.         {if(flog % 3 == 2)                                                                
  296.                 flog=flog+1;}                                        //P3_1 = 0;                                       
  297.         if(key == cc[3])
  298.         {if(flog % 3 == 0)
  299.         {                                                                               
  300.                 P3_1 = 1;Pass();        //顯示密碼正確信  led燈亮
  301.                 }
  302.                 }                                                                       
  303.         if(flog1 % 4 == 0)           //密碼錯(cuò)誤
  304.         {
  305.                 buzzer = 1;           //蜂鳴器響
  306.                 delay();
  307.                 buzzer = 0;

  308.                 Init_LCD();                      //lcd初始化

  309.                 pagenum = 0;//從第一排開(kāi)始顯示
  310.                 //顯示按鍵錯(cuò)誤
  311.                 for (a = 0; a<4; a++)
  312.                         {
  313.                                 C_display_L(pagenum, a * 16, a + 8);
  314.                         }
  315.         }
  316. }

  317. void main()
  318. {
  319.         LED = 0;
  320.         buzzer = 0;//蜂鳴器關(guān)閉
  321.         P1 = 0xf0;
  322.        
  323.         EA = 1;           //中斷總允許
  324.         EX0 = 1;  //外部中斷0
  325.         IT0 = 1;   //下降沿觸發(fā)
  326.        
  327.         while(1);
  328.        
  329. }
復(fù)制代碼


所有資料51hei提供下載:
實(shí)驗(yàn)七.rar (99.17 KB, 下載次數(shù): 223)


評(píng)分

參與人數(shù) 2黑幣 +60 收起 理由
wyhnb + 10
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:447716 發(fā)表于 2018-12-17 09:53 | 只看該作者
原理圖能不能弄完整的
回復(fù)

使用道具 舉報(bào)

板凳
ID:465293 發(fā)表于 2019-1-9 18:46 | 只看該作者
對(duì)啊,求完整的圖
回復(fù)

使用道具 舉報(bào)

地板
ID:681148 發(fā)表于 2020-1-4 17:25 | 只看該作者
求完整圖
回復(fù)

使用道具 舉報(bào)

5#
ID:723897 發(fā)表于 2020-4-21 09:27 | 只看該作者
也沒(méi)有仿真圖啊,仿真圖都是空白的
回復(fù)

使用道具 舉報(bào)

6#
ID:684234 發(fā)表于 2020-5-5 16:28 | 只看該作者
打不開(kāi)
回復(fù)

使用道具 舉報(bào)

7#
ID:795721 發(fā)表于 2020-7-7 11:25 | 只看該作者
所以按什么會(huì)  密碼正確啊
回復(fù)

使用道具 舉報(bào)

8#
ID:641349 發(fā)表于 2020-11-3 19:56 來(lái)自手機(jī) | 只看該作者
浪跡zj 發(fā)表于 2020-7-7 11:25
所以按什么會(huì)  密碼正確啊

1234是密碼
回復(fù)

使用道具 舉報(bào)

9#
ID:912576 發(fā)表于 2021-5-1 16:45 來(lái)自手機(jī) | 只看該作者
為什么開(kāi)始的時(shí)候顯示器不能亮
回復(fù)

使用道具 舉報(bào)

10#
ID:938867 發(fā)表于 2021-6-16 20:47 | 只看該作者
有原理圖嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 蜜桃视频在线观看免费视频网站www | 精品一区二区三区不卡 | 成人一区二区三区在线观看 | 亚洲在线成人 | 亚洲一区二区av | 精精国产xxxx视频在线播放7 | 久久国产精品久久久久久 | 天天躁日日躁aaaa视频 | 精品欧美一区二区在线观看视频 | 国产综合av | 国产精品入口麻豆www | 欧美一区二区三区在线观看 | 中文字幕在线第二页 | 日韩国产中文字幕 | 国产成人精品一区二三区在线观看 | 成人午夜毛片 | 亚洲福利网站 | 91极品尤物在线播放国产 | 久久久一区二区三区 | 久久久久国产一区二区三区四区 | 九九久久久 | 99热视| 三级成人片 | 日韩午夜影院 | 操视频网站| 国产一区二区三区视频在线观看 | 国产激情免费视频 | 久久久国产精品 | 国产色网 | 一区二区三区免费 | 99re在线视频观看 | av永久免费 | 国产精品成人在线 | 亚洲毛片| 天天色天天射天天干 | 在线国产一区二区 | 欧美日韩成人网 | 日韩欧美一级片 | 欧美在线一区二区三区 | 最新黄色毛片 | 在线黄av |