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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機模擬手機撥號的proteus仿真圖和源碼

  [復制鏈接]
跳轉到指定樓層
樓主
手機撥號仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define u8 unsigned char
  4. #define u16 unsigned int
  5. #define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}
  6. sbit BEEP=P1^0;
  7. sbit LCD_RS=P2^0;
  8. sbit LCD_RW=P2^1;
  9. sbit LCD_EN=P2^2;
  10. void DelayMS(u16 ms);
  11. bit LCD_Busy_Check();
  12. void LCD_Set_Position(u8 Position);
  13. void Write_LCD_command(u8 cmd);
  14. void Write_LCD_data(u8 dat);
  15. //--標題字符串
  16. char code Title_Text[]={"intput number:  "};
  17. char code Wrong_Text[]={"wrong number!   "};
  18. char code Calling_Text[]={"phone calling!  "};
  19. //--鍵盤拔號與鍵盤符號映射表
  20. u8 code key_Table[]={'1','2','3','4','5','6','7','8','9','*','0','#'};
  21. //--鍵盤拔號數字緩沖
  22. u8 Dial_Code_Str[]={"                "};
  23. u8 keyNo=0xff;
  24. int tCount=0;
  25. //------------------------------------  //延時 //------------------------------------
  26. void DelayMS(u16 x)
  27. {
  28.         u8 i;
  29.         while(x--)
  30.         for(i=0;i<120;i++);
  31. }
  32. //-------------------------------- //在LCD指定的行上顯示字符串 //--------------------------------
  33. void Display_String(u8 *str,u8 LineNo)
  34. {
  35.         u8 k;
  36.         LCD_Set_Position(LineNo);
  37.         for(k=0;k<16;k++)
  38.         Write_LCD_data(str[k]);
  39. }
  40. //---------------------------------------------- //忙檢查 //---------------------------------------------
  41. bit LCD_Busy_Check()
  42. {
  43.         bit LCD_Status;
  44.         LCD_RS=0;//寄存器選擇
  45.         LCD_RW=1;//讀狀態寄存器
  46.         LCD_EN=1;//開始讀
  47.         DelayMS(1);
  48.         LCD_Status=(bit)(P0&0x80) ;
  49.         LCD_EN=0;
  50.         return LCD_Status;
  51. }
  52. //--------------------------------------------------- //寫LCD命令 //----------------------------------------------------
  53. void Write_LCD_Command(u8 cmd)
  54. {
  55.         while((LCD_Busy_Check()&0x80)==0x80);//忙等待
  56.         LCD_RS=0;//選取擇命令寄存器
  57.         LCD_RW=0;//寫
  58.         LCD_EN=0;
  59.         _nop_();
  60.         _nop_();
  61.         P0=cmd;
  62.         DelayNOP();
  63.         LCD_EN=1;
  64.         DelayNOP();
  65.         LCD_EN=0;
  66. }
  67. //----------------------------------------- //發送數據 //----------------------------------------
  68. void Write_LCD_Data(u8 Str)
  69. {
  70.         while((LCD_Busy_Check()&0x80)==0x80);//忙等待
  71.         LCD_RS=1;
  72.         LCD_RW=0;
  73.         LCD_EN=0;
  74.         P0=Str;
  75.         DelayNOP();
  76.         LCD_EN=1;
  77.         DelayMS(1);
  78.         LCD_EN=0;
  79. }
  80. //------------------------------------------------- //LCD初始化 //-------------------------------------------------
  81. void Initialize_LCD()
  82. {
  83.         Write_LCD_Command(0x38);
  84.         DelayMS(5);
  85.         Write_LCD_Command(0x0C);//清屏
  86.         DelayMS(5);
  87.         Write_LCD_Command(0x06);//字符進入模式,屏幕不動,字符后移。
  88.         DelayMS(5);
  89.         Write_LCD_Command(0x01);//顯示開,關光標。
  90.         DelayMS(5);
  91. }
  92. //-------------------------------------- //設置顯示位置 //--------------------------------------
  93. void LCD_Set_Position(u8 Position)
  94. {
  95.         Write_LCD_Command(Position | 0x80);
  96. }
  97. //----------------------------------------------- //t0控制按鍵聲音 //-----------------------------------------------
  98. void T0_INT() interrupt 1
  99. {
  100.         TH0=-400/256;
  101.         TL0=-400%256;
  102.         BEEP=~BEEP;
  103.         if(++tCount==200)
  104.         {
  105.         tCount=0;
  106.         TR0=0;
  107.         }
  108. }
  109. //------------------------- //鍵盤掃描 //------------------------  
  110. u8 Getkey()
  111. {
  112.         u8 i,j,k=0;
  113.         u8 keyScanCode[]={0xef,0xdf,0xbf,0x7f};//鍵盤掃描碼
  114.         u8 keyCodeTable[]={0xee,0xed,0xeb,0xde,0xdd,0xdb,0xbe,0xbd,0xbb,0x7e,0x7d,0x7b};
  115.         P3=0x0f; //掃描鍵盤獲取按鍵序號
  116.         if(P3!=0X0F)
  117.         {
  118.                 for(i=0;i<4;i++)
  119.                 { P3=keyScanCode[i];
  120.                          for(j=0;j<3;j++)
  121.                          { k=i*3+j;
  122.                                 if(P3==keyCodeTable[k])
  123.                                 return k;
  124.                         }
  125.                 }
  126.         }
  127.         else
  128.                 return 0xff;
  129. }
  130. //------------------------------- //main//--------------------------------
  131. void main()
  132. {
  133.         int i=0,j;
  134.         int c=0;
  135.         P0=P2=P1=0XFF;
  136.         IE=0X82;
  137.         TMOD=0X01;
  138.         Initialize_LCD(); //LCD初始化
  139.         Display_String(Title_Text,0x00);//在第一行顯示標題
  140.         while(1)
  141.         {
  142.                 keyNo=Getkey();//獲取按鍵值
  143.                 if(keyNo==0xff)
  144.                 continue;//無按鍵時繼續掃描
  145.                 if(keyNo==0x09)
  146.                 {
  147.                         Dial_Code_Str[i]=0;
  148.                         Dial_Code_Str[i-1]=0;
  149.                         i=i-2;
  150.                         if(i<-1)
  151.                         {
  152.                                 i=-1;
  153.                         }
  154.                 }
  155.               //刪除鍵
  156.        
  157.                 else if(keyNo==0x0b)
  158.                 {
  159.                         if(i==11&&c==0)
  160.                         {
  161.                                 Display_String(Calling_Text,0x00);
  162.                                 while(c==0)
  163.                                 {
  164.                                         TR0=1;
  165.                                         DelayMS(1500);
  166.                                         keyNo=Getkey();
  167.                                         if(keyNo==0x0b)
  168.                                         {
  169.                                                 break;
  170.                                         }
  171.                                 }
  172.                                 c=1;
  173.                                  
  174.                         }
  175.                         else if(i==11&&c==1)
  176.                         {
  177.                                   Display_String(Title_Text,0x00);
  178.                                   for(j=0;j<16;j++) Dial_Code_Str[j]=' '; i=0;
  179.                                   c=0;
  180.                         }
  181.                         else
  182.                         {
  183.                                 Display_String(Wrong_Text,0x00);
  184.                                 DelayMS(3000);
  185.                                 Display_String(Title_Text,0x00);
  186.                         }
  187.                         Dial_Code_Str[i]=0;
  188.                         i=i-1;
  189.                         if(i<-1)
  190.                         {
  191.                                 i=-1;
  192.                         }
  193.                 }
  194.                 else{
  195.                 Dial_Code_Str[i]=key_Table[keyNo];//將待顯示字符放入待顯示的拔號串中
  196.                 }
  197.                 Display_String(Dial_Code_Str,0x40);//在第二行顯示號碼
  198.                 if(++i==11)//超過11位時清空
  199.                 {
  200.                         for(j=0;j<16;j++) Dial_Code_Str[j]=' '; i=0;
  201.                 }
  202.                 TR0=1;//T0中斷控制按鍵聲音
  203.                 while(Getkey()!=0xff);//等待按鍵釋放
  204.         }
  205. }
復制代碼

所有資料51hei提供下載:
手機撥號.zip (71.02 KB, 下載次數: 93)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:422637 發表于 2018-11-8 18:10 | 只看該作者
你好,請問在嗎?我想參考你這個作品設計一個結課作品,可以麻煩你給我講解一下嗎?
回復

使用道具 舉報

板凳
ID:761557 發表于 2020-5-27 21:49 | 只看該作者
#號鍵沒有用嗎
回復

使用道具 舉報

地板
ID:798289 發表于 2020-7-6 11:40 | 只看該作者
手機撥號器跟電話撥號器一樣嗎
回復

使用道具 舉報

5#
ID:6813 發表于 2020-7-9 08:58 | 只看該作者

youyong
回復

使用道具 舉報

6#
ID:823392 發表于 2021-1-3 15:47 | 只看該作者
里面的仿真文件如何打開?
回復

使用道具 舉報

7#
ID:328014 發表于 2021-1-3 20:32 | 只看該作者
405072537 發表于 2021-1-3 15:47
里面的仿真文件如何打開?

dsn用Proteus7.8打開,其他版本都不行的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区免费视频 | 国产99精品 | 久久日韩精品 | 99福利 | 国产www在线 | 亚洲国产精品精华素 | 久久首页| 成人性视频免费网站 | 小早川怜子xxxxaⅴ在线 | 国内毛片毛片毛片毛片 | 国产亚洲精品美女久久久久久久久久 | 天天看天天操 | 一区二区三区四区在线播放 | 99re视频在线 | 国产精品免费福利 | 全部免费毛片在线播放网站 | 美女在线视频一区二区三区 | 91在线视频观看免费 | 一区二区三区不卡视频 | 国产精品成人国产乱一区 | 欧美在线日韩 | 亚洲综合激情 | 国产精品黄色 | 国内精品视频在线观看 | 久久久夜色精品亚洲 | 暴草美女 | 欧美寡妇偷汉性猛交 | 91在线观看免费 | 国产成人精品一区二区三区在线观看 | 日韩在线观看网站 | 成人欧美一区二区三区1314 | 中文日韩字幕 | 亚洲精品乱码久久久久久久久久 | 欧美精品在线一区二区三区 | 久久新| 成人毛片视频免费 | 日韩久久久久久 | 激情一区二区三区 | 成人在线精品视频 | 久久久美女 | 午夜小视频在线播放 |