找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機電子密碼鎖程序

[復(fù)制鏈接]
ID:461447 發(fā)表于 2019-5-11 20:44 | 顯示全部樓層 |閱讀模式
0.png

單片機源程序如下:
  1. #include "Absacc.h"
  2. #define C8255_A XBYTE[0x7F00]  //8255 端口地址定義
  3. #define C8255_B XBYTE[0x7F01]
  4. #define C8255_C XBYTE[0x7F02]
  5. #define C8255_CON  XBYTE[0x7F03]

  6. unsigned char a[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  7.                                         0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
  8. unsigned char b[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 顯示緩沖

  9. unsigned char key_down;
  10. unsigned char key_value;
  11. unsigned char key_count;
  12. void delay(unsigned int time)
  13. {
  14.         unsigned int i;
  15.         for(i=0; i<time; i++);
  16. }
  17. void keyscan() // 按鍵掃描函數(shù)
  18. {
  19.         unsigned char cc;
  20.         C8255_A = 0x00; //X1 ~ X4 置 0
  21.         cc = C8255_C;  // 得到 Y1 ~ Y4 的值
  22.         key_down = (~cc) & 0x0f;
  23. }
  24. void display() // 顯示函數(shù)
  25. {
  26.         unsigned char i, j = 0xDF;
  27.         for(i=0; i<6; i++)
  28.         {
  29.                 C8255_A = 0xFF;
  30.                 C8255_B = a[b[i]]; // 查表輸出顯示
  31.                 C8255_A = j;
  32.                 delay(0x100);
  33.                 j = (j>>1)|(j<<7);
  34.         }
  35. }
  36. void clear()  // 清屏
  37. {
  38.         C8255_B = 0x00;
  39. }
  40. void writebuffer()
  41. {
  42.         b[key_count] = key_value;
  43.         key_count--;
  44.         if(key_count == -1)
  45.         key_count = 5;
  46.         display();
  47.         clear();
  48.         keyscan();
  49.         while(key_down) // 鍵盤消抖
  50.         {
  51.                 display();
  52.                 clear();
  53.                 keyscan();
  54.         }
  55. }
  56. void getkey()  // 得到按鍵值
  57. {
  58.         unsigned char value;
  59.         unsigned char i, j = 0xFE;
  60.         for(i=0; i<4; i++)
  61.         {
  62.                 C8255_A = j;
  63.                 value = C8255_C;
  64.                 if(!(value & 0x01)) // 行 1
  65.                 {
  66.                         key_value = i + 0;
  67.                         writebuffer();
  68.                         return;
  69.                 }
  70.                 if(!(value & 0x02)) // 行 2
  71.                 {
  72.                         key_value = i + 4;
  73.                         writebuffer();
  74.                         return;
  75.                 }
  76.                 if(!(value & 0x04)) // 行 3
  77.                 {
  78.                         key_value = i + 8;
  79.                         writebuffer();
  80.                         return;
  81.                 }
  82.                 if(!(value & 0x08)) // 行 4
  83.                 {
  84.                         key_value = i + 12;
  85.                         writebuffer();
  86.                         return;
  87.                 }
  88.                 j <<= 1;
  89.         }
  90. }
  91. void main()
  92. {
  93.         C8255_CON = 0x81;  //8255 初始化
  94.         key_count = 5;
  95.         while(1)
  96.         {
  97.                 display(); // 顯示
  98.                 clear();  // 清屏
  99.                 keyscan(); // 按鍵掃描
  100.                 if(key_down)  // 判是否有鍵按下
  101.                 {
  102.                         display();
  103.                         delay(0x80);
  104.                         clear();
  105.                         keyscan();
  106.                         if(key_down)
  107.                         {
  108.                                 getkey();  // 得到按鍵值
  109.                         }
  110.                 }
  111.         }
  112. }
復(fù)制代碼

所有資料51hei提供下載:
課程設(shè)計.zip (293.17 KB, 下載次數(shù): 4)
keshetu.doc (256.5 KB, 下載次數(shù): 3)


回復(fù)

使用道具 舉報

ID:122829 發(fā)表于 2019-6-8 13:54 | 顯示全部樓層
這里面哪來的8255~~
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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