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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的智能搶答器程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:352412 發表于 2018-6-15 11:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
搶答器
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. sbit RS = P2^0; //定義端口
  4. sbit RW = P2^1;
  5. sbit EN = P2^2;
  6. sbit s  = P2^7;
  7. sbit s0 = P1^0;
  8. sbit s1 = P1^1;
  9. sbit s2 = P1^2;
  10. sbit s3 = P1^3;
  11. sbit s4 = P1^4;
  12. sbit s5 = P1^5;
  13. sbit s6 = P1^6;
  14. sbit s7 = P1^7;
  15. sbit beep = P3^7;

  16. #define RS_CLR RS=0
  17. #define RS_SET RS=1
  18. #define RW_CLR RW=0
  19. #define RW_SET RW=1
  20. #define EN_CLR EN=0
  21. #define EN_SET EN=1
  22. #define DataPort P0

  23. unsigned char table[10] ={'0','1','2','3','4','5','6','7','8','9'};
  24. unsigned char shu,key,count=0;
  25. unsigned char flag=0;
  26. unsigned char DATA,num;

  27. //uS 延時函數
  28. void DelayUs2x(unsigned char t)
  29. {
  30.         while(--t);
  31. }

  32. //mS 延時函數
  33. void DelayMs(unsigned int t)
  34. {
  35.         while(t--)
  36. {
  37. //延時 1mS
  38. DelayUs2x(245);
  39. DelayUs2x(245);
  40. }
  41. }

  42. //判忙函數
  43. bit LCD_Check_Busy(void)
  44. {
  45.         DataPort= 0xFF;
  46.         RS_CLR;
  47.         RW_SET;
  48.         EN_CLR;
  49.         _nop_();
  50.         EN_SET;
  51.         return (bit)(DataPort & 0x80);
  52. }

  53. //寫入命令函數
  54. void LCD_Write_Com(unsigned char com)
  55. {
  56.         while(LCD_Check_Busy()); // 忙則等待
  57.         RS_CLR;
  58.         RW_CLR;
  59.         EN_SET;
  60.         DataPort= com;
  61.         _nop_();
  62.         EN_CLR;
  63. }

  64. // 寫入數據函數
  65. void LCD_Write_Data(unsigned char Data)
  66. {
  67.         while(LCD_Check_Busy()); // 忙則等待
  68.         RS_SET;
  69.         RW_CLR;
  70.         EN_SET;
  71.         DataPort= Data;
  72.         _nop_();
  73.         EN_CLR;
  74. }

  75. //清屏函數
  76. void LCD_Clear(void)
  77. {
  78.         LCD_Write_Com(0x01);
  79.         DelayMs(5);
  80. }

  81. //寫入字符串函數
  82. void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  83. {
  84.         if (y == 0)
  85.         {
  86.                 LCD_Write_Com(0x80 + x); //表示第一行
  87.         }
  88.         else
  89.         {
  90.                 LCD_Write_Com(0xC0 + x); //表示第二行
  91.         }
  92.         while (*s)
  93.         {                 
  94.                 LCD_Write_Data( *s);
  95.                 s ++;
  96.         }
  97. }

  98. //寫入字符函數
  99. void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
  100. {
  101.         if (y == 0)
  102.         {
  103.                 LCD_Write_Com(0x80 + x);
  104.         }
  105.         else
  106.         {
  107.                 LCD_Write_Com(0xC0 + x);
  108.         }
  109.                 LCD_Write_Data( Data);
  110. }

  111. //初始化函數
  112. void LCD_Init(void)
  113. {
  114.         LCD_Write_Com(0x38); //顯示模式設置
  115.         DelayMs(5);         
  116.         LCD_Write_Com(0x38);
  117.         DelayMs(5);
  118.         LCD_Write_Com(0x38);
  119.         DelayMs(5);
  120.         LCD_Write_Com(0x38);
  121.         LCD_Write_Com(0x08); //顯示關閉
  122.         LCD_Write_Com(0x01); //顯示清屏
  123.         LCD_Write_Com(0x06); //顯示光標移動設置
  124.         DelayMs(5);
  125.         LCD_Write_Com(0x0C); //顯示開及光標設置
  126. }

  127. //定時器中斷子程序
  128. void Timer0_isr(void)interrupt 1
  129. {
  130.         unsigned char temp,temp1,i,j=2;
  131.         TH0=(65536-50000)/256;// 重新賦值 50ms
  132.         TL0=(65536-50000)%256;
  133.         // beep=~beep;
  134.         // DelayMs(100);
  135.         i++;
  136.         if(i==20)
  137.         {
  138.                 i=0;
  139.                 DATA--;
  140.                 if(DATA>0)
  141.                 {
  142.                         DelayMs(50);
  143.                         temp=DATA/10;
  144.                         temp1=DATA%10;
  145.                         LCD_Write_Char(7,1,table[temp]);
  146.                         LCD_Write_Char(8,1,table[temp1]);
  147.                 }
  148.                 else if(DATA==0)
  149.                 {
  150.                         P1=0xFF;
  151.                         ET0=0;
  152.                         DelayMs(50);
  153.                         LCD_Write_Char(7,1,'0');
  154.                         LCD_Write_Char(8,1,'0');
  155.                         for(;j--;j>0)
  156.                         {                        
  157.                                 beep=0;
  158.                                 DelayMs(500);
  159.                                 beep=1;
  160.                         }
  161.                 }
  162.         }
  163. }

  164. void beepon(void)
  165. {
  166.         unsigned char i;
  167.         for(i=0;i<10;i++)
  168.         {
  169.                 beep=0;
  170.                 DelayMs(50);
  171.                 beep=1;
  172.         }
  173. }

  174. unsigned char keyscan(void)
  175. {
  176.         unsigned char scan1;
  177.         scan1=P1;
  178.         if(scan1!=0xff)
  179.         {
  180.                 DelayMs(30);
  181.                 if(scan1==P1)
  182.                 {
  183.                         switch(scan1)
  184.                         {
  185.                                 case 0xff:
  186.                                 scan1 = 0;
  187.                                 break;
  188.                                 case 0xfe:
  189.                                 scan1 = 1;
  190.                                 break;
  191.                                 case 0xfd:
  192.                                 scan1 = 2;
  193.                                 break;
  194.                                 case 0xfb:
  195.                                 scan1 = 3;
  196.                                 break;
  197.                                 case 0xf7:
  198.                                 scan1 = 4;
  199.                                 break;
  200.                                 case 0xef:
  201.                                 scan1 = 5;
  202.                                 break;
  203.                                 case 0xdf:
  204.                                 scan1 = 6;
  205.                                 break;
  206.                                 case 0xbf:
  207.                                 scan1 = 7;
  208.                                 break;
  209.                                 case 0x7f:
  210.                                 scan1 = 8;
  211.                                 break;
  212.                         }
  213.                 }
  214.         }
  215.         else
  216.         scan1=0;
  217.         return(scan1);
  218. }

  219. void display(void)
  220. {
  221.         unsigned char a,b;
  222.         key=keyscan();
  223.         if(key!=0 & flag==0 )
  224.         {
  225.                 ET0=0;
  226.                 count++;
  227.                 DelayMs(200);         
  228.                 LCD_Write_Char(10,0,table[key]);
  229.                 flag=1;
  230.                 a=(shu-DATA)/10;
  231.                 b=(shu-DATA)%10;
  232.                 LCD_Write_Char(7,1,table[a]);
  233.                 LCD_Write_Char(8,1,table[b]);
  234.         }
  235. }

  236. void main(void)
  237. {
  238.         unsigned char k;
  239.         unsigned a,b;
  240.         LCD_Init(); //初始化液晶
  241.         DelayMs(20); //延時有助于穩定
  242.         LCD_Clear(); //清屏
  243.         LCD_Write_String(0,1,"time");
  244.         LCD_Write_String(0,0,"xuanshou");
  245.         //Init_Timer0(); //定時器 0 初始化
  246.         while(count==0)
  247.         {         
  248.                 if(s0==0)
  249.                 {
  250.                         DelayMs(10);
  251.                         if(s0==0)
  252.                         {
  253.                                 count++;
  254.                                 while(count==1)
  255.                                 {
  256.                                         if(s==0)
  257.                                         {
  258.                                                 DelayMs(10);
  259.                                                 if(s==0)
  260.                                                 {
  261.                                                         while(!s);
  262.                                                         count++;
  263.                                                 }
  264.                                         }
  265.                         if(s1==0)
  266.                         {
  267.                                 DelayMs(10);
  268.                                 if(s1==0)
  269.                                 {
  270.                                         while(!s1);
  271.                                         {
  272.                                                 DATA++;
  273.                                                 shu=DATA;
  274.                                                 if (DATA==31) {DATA=0;count=0;}
  275.                                                 a=DATA/10;         
  276.                                                 b=DATA%10;
  277.                                                 LCD_Write_Char(7,1,table[a]);
  278.                                                 LCD_Write_Char(8,1,table[b]);
  279.                                         }
  280.                                 }
  281.                         }
  282. }
  283.         while(count==2)
  284.         {
  285. TMOD |= 0x01; //使用模式 1,16 位定時器,使用 "|"符號可以在 使用多個定時器時不受影響
  286. TH0=(65536-50000)/256;// 重新賦值 50ms
  287. TL0=(65536-50000)%256;
  288. EA=1; //總中斷打開
  289. ET0=1; //定時器中斷打開
  290. TR0=1; //定時器開關
  291.         
  292. }
  293.         }
  294. }
  295.                 }
  296.         }
復制代碼


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

使用道具 舉報

沙發
ID:975218 發表于 2021-10-26 20:56 | 只看該作者
大佬,有proteus原理圖嗎?
回復

使用道具 舉報

板凳
ID:262 發表于 2021-10-26 23:12 | 只看該作者
電子專業新人 發表于 2021-10-26 20:56
大佬,有proteus原理圖嗎?

仿真可以參考這個:http://www.zg4o1577.cn/bbs/dpj-123579-1.html
或者找其他的 論壇里面有上百個
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 玖玖爱365| 日韩国产欧美一区 | 涩涩视频在线观看免费 | 中文字幕视频在线 | 婷婷综合久久 | 国产精品欧美大片 | 一级免费a | 日本三级网址 | 中文字幕一区在线观看视频 | 成人精品国产一区二区4080 | 亚洲精品成人 | 国产精品中文字幕在线 | 欧美手机在线 | 国产精品久久久久久久久久久久冷 | 综合精品久久久 | 国产视频1区 | 精品日韩一区二区 | 91九色视频| 欧美高清免费 | 日韩欧美在线观看 | 精品国产乱码久久久久久影片 | 男女羞羞视频网站 | 亚洲一区二区av在线 | 欧美综合一区二区 | 日本三级电影在线观看视频 | 国产精品亚洲综合 | 在线a视频网站 | 久久亚洲美女 | 成人精品免费视频 | 伊人伊人网| 在线免费观看日本 | 亚洲成人网在线 | 日韩一区中文字幕 | 中文字幕日韩三级 | 国产精品久久久久久av公交车 | 国产精品日韩 | 午夜影院视频在线观看 | 四虎影院免费在线 | 国产小视频在线观看 | 欧美日韩视频 | 91精产国品一二三区 |