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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機+lcd1602液晶屏打字機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:137190 發表于 2016-9-27 19:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

完整程序下載:
1602液晶屏打字機.zip (21.45 KB, 下載次數: 13)

  1. /********************************************************************************************
  2. 程序名:    1602液晶屏時鐘程序
  3. 編寫人:    杜洋 
  4. 編寫時間:  2009年7月6日
  5. 硬件支持:  LCD1602液晶屏  STC12C2052 外部12MHZ晶振
  6. 說明備注:    使用2402液晶屏程序,與1602液晶屏程序完全兼容
  7. /********************************************************************************************/
  8. #include <STC12C2052AD.h>                                                // 包含頭文件 //
  9. /********************************************************************************************/
  10. typedef unsigned char      uint8;          // 無符號8位整型變量 //

  11. /********************************************************************************************
  12. // 引腳定義 // (使用者根據實際更改)
  13. /********************************************************************************************/
  14. #define                LCM2402_DB0_DB7                P1                        // 定義LCM2402的數據總線
  15. sbit LCM2402_RS   = P3 ^ 2;                                        // 定義LCM2402的RS控制線
  16. sbit LCM2402_RW   = P3 ^ 3;                                        // 定義LCM2402的RW控制線
  17. sbit LCM2402_E    = P3 ^ 4;                                        // 定義LCM2402的E控制線
  18. sbit LCM2402_Busy = P1 ^ 7;                                        // 定義LCM2402的測忙線(與LCM2402_DB0_DB7關聯)
  19. /********************************************************************************************
  20. // 定義LCM2402指令集 // (詳細請見技術手冊)
  21. /********************************************************************************************/
  22. #define                        CMD_clear                0x01             // 清除屏幕
  23. #define                        CMD_back                0x02             // DDRAM回零位
  24. #define                        CMD_dec1                0x04             // 讀入后AC(指針)減1,向左寫
  25. #define                        CMD_add1                0x06             // 讀入后AC(指針)加1,向右寫
  26. #define                        CMD_dis_gb1                0x0f             // 開顯示_開光標_開光標閃爍
  27. #define                        CMD_dis_gb2                0x0e             // 開顯示_開光標_關光標閃爍
  28. #define                        CMD_dis_gb3                0x0c             // 開顯示_關光標_關光標閃爍
  29. #define                        CMD_OFF_dis                0x08             // 關顯示_關光標_關光標閃爍
  30. #define                        CMD_set82                0x38             // 8位總線_2行顯示
  31. #define                        CMD_set81                0x30             // 8位總線_1行顯示(上邊行)
  32. #define                        CMD_set42                0x28             // 4位總線_2行顯示
  33. #define                        CMD_set41                0x20             // 4位總線_1行顯示(上邊行)
  34. #define                        lin_1                        0x80             // 4位總線_1行顯示(上邊行)
  35. #define                        lin_2                        0xc0             // 4位總線_1行顯示(上邊行)

  36. /********************************************************************************************
  37. // 讀LCM忙程序 [底層協議] // (所有底層協議都無需關注)
  38. // LCM2402測忙,若LCM2402處于忙狀態,本函數將等待至非忙狀態 //
  39. /********************************************************************************************/
  40. void LCM2402_TestBusy(void){
  41.            LCM2402_DB0_DB7 = 0xff;                //設備讀狀態
  42.            LCM2402_RS = 0;
  43.            LCM2402_RW = 1;
  44.            LCM2402_E = 1;
  45.            while(LCM2402_Busy);                //等待LCM不忙
  46.            LCM2402_E = 0;                                //
  47. }
  48. /********************************************************************************************
  49. // 寫指令程序 //
  50. // 向LCM2402寫命令 本函數需要1個指令集的入口參數 //
  51. /********************************************************************************************/
  52. void LCM2402_WriteCMD(uint8 LCM2402_command) {
  53.           LCM2402_TestBusy();
  54.           LCM2402_DB0_DB7 = LCM2402_command;
  55.           LCM2402_RS = 0;
  56.           LCM2402_RW = 0;
  57.           LCM2402_E = 1;
  58.           LCM2402_E = 0;
  59. }
  60. /********************************************************************************************
  61. // 寫數據程序 //
  62. // 向LCM2402寫數據 //
  63. /********************************************************************************************/
  64. void LCM2402_WriteData(uint8 LCM2402_data){
  65.     LCM2402_TestBusy();
  66.         LCM2402_DB0_DB7 = LCM2402_data;
  67.           LCM2402_RS = 1;
  68.           LCM2402_RW = 0;
  69.           LCM2402_E = 1;
  70.           LCM2402_E = 0;
  71. }
  72. /********************************************************************************************
  73. // 打印字符串程序 // (本函數調用指針函數)
  74. // 向LCM發送一個字符串,長度48字符之內
  75. // 第一行位置 0x00~0x17  第二行位置 0x40~0x57
  76. // 應用舉例:print(0x80,"doyoung.net"); //在第一行第一位處從左向右打印doyoung.net字符串
  77. /********************************************************************************************/
  78. void print(uint8 a,uint8 *str){
  79.         LCM2402_WriteCMD(a | 0x80);
  80.         while(*str != '\0'){
  81.                 LCM2402_WriteData(*str++);
  82.         }
  83.         *str = 0;
  84. }
  85. /********************************************************************************************
  86. // 打印單字符程序 //
  87. // 第一行位置 0x00~0x17  第二行位置 0x40~0x57
  88. // 向LCM發送一個字符,以十六進制(0x00)表示
  89. // 應用舉例:print(0xc0,0x30); //在第二行第一位處打印字符“0”
  90. /********************************************************************************************/
  91. void print2(uint8 a,uint8 t){
  92.                 LCM2402_WriteCMD(a | 0x80);
  93.                 LCM2402_WriteData(t);
  94. }
  95. /********************************************************************************************
  96. // LCM2402初始化 //(使用者可自定義,加 * 號程序行必須保留但可修改)
  97. /********************************************************************************************/
  98. void LCM2402_Init(void){
  99.           LCM2402_WriteCMD(CMD_set82);        //* 顯示模式設置:顯示2行,每個字符為5*7個像素
  100.           LCM2402_WriteCMD(CMD_clear);        //  顯示清屏
  101.           LCM2402_WriteCMD(CMD_back);                //* 數據指針指向第1行第1個字符位置
  102.           LCM2402_WriteCMD(CMD_add1);                //  顯示光標移動設置:文字不動,光標右移
  103.           LCM2402_WriteCMD(CMD_dis_gb3);         //  顯示開及光標設置:顯示開,光標開,閃爍開
  104. }
  105. /********************************************************************************************/
  106. //                        以上是LCM2402驅動程序                        //
  107. /*********************************************************************************************/

  108. /********************************************************************************************
  109. 串口初始化程序:波特率4800,(終端設置:4800,8,無,1,無)
  110. /********************************************************************************************/
  111. void Init_COM(void){
  112.         TMOD = 0x20;        //定時器工作方式設置,定時器1方式2
  113.         SCON = 0x50;        //串口工作方式1,允許串口接收   
  114.         TH1 = 0xF3;                //定時器初值高8位設置
  115.         TL1 = 0xF3;                //定時器初值低8位設置
  116.         PCON = 0x80;        //波特率倍頻
  117.         TR1 = 1;                //定時器啟動   
  118. }

  119. /********************************************************************************************
  120. 主程序:實現接收數據并把接收到的數據發送出去
  121. /********************************************************************************************/
  122. void main(){
  123.    unsigned char dat,li=0x80;
  124.    Init_COM();                //串口初始化
  125.    LCM2402_Init();        //LCM2402初始化
  126.    print(0x80," DoYoung Studio "); //在第一行打印LOGO字符
  127.    print(0x40,"Input your words"); //在第二行打印LOGO字符
  128.    while(1){
  129.        if (RI == 1){                //接收中斷標志位為1時
  130.                         dat = SBUF;                //接收數據 SBUF 為單片機的接收發送緩沖寄存器
  131.             RI = 0;                        //令接收中斷標志位為0(軟件清零)
  132.                     SBUF = dat;                //將接收的數據發送回PC
  133.                         while(TI == 0);
  134.                         TI = 0;
  135.                         print2(li,dat); //在第一行顯示串口字符串
  136.                         li++;
  137.                         if(li > 0x8f){
  138.                                 li = 0x40;
  139.                         }
  140.                         if(li > 0x4f && li < 0x80){
  141.                                 li = 0x80;
  142.                         }
  143.                 }
  144.    }
  145. }
  146. /********************************************************************************************/

  147. /*************************************************************
  148. * 杜洋工作室 DoYoung Studio
  149. * 分享創意電子 Share ideas of electronic
  150. /*************************************************************/
復制代碼



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

使用道具 舉報

沙發
ID:7485 發表于 2016-9-27 19:47 | 只看該作者
電腦打字,串口發送,單片機接收,送1602顯示?
回復

使用道具 舉報

板凳
ID:137190 發表于 2016-9-28 00:36 | 只看該作者
ahshmj 發表于 2016-9-27 19:47
電腦打字,串口發送,單片機接收,送1602顯示?

是的就是這個流程,電腦上要打開串口調試助手。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一二区成人影院电影网 | 亚洲a人| 岛国av在线免费观看 | 青青久久 | 国产这里只有精品 | 日本视频免费 | 亚洲国产精品人人爽夜夜爽 | 大久| 色网站在线免费观看 | 91精品国产综合久久香蕉麻豆 | av片在线播放 | 91av在线不卡 | 日本a∨精品中文字幕在线 亚洲91视频 | 国产欧美在线视频 | 欧美成人一区二区三区 | 成年视频在线观看福利资源 | 一级h片 | 精品国产一区二区三区性色av | 日韩一区在线播放 | 91九色porny首页最多播放 | av网站在线播放 | 国产成人精品免费视频大全最热 | 成年男女免费视频网站 | 久久99久久 | 超碰97人人人人人蜜桃 | 国产一区二区视频免费在线观看 | 九色91视频 | 天天干com | 麻豆av在线免费观看 | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 精品九九九 | 国产a区| 亚洲男人天堂网 | 成人1区2区| 亚洲精品小视频在线观看 | 综合久久综合久久 | 久久青| 久久久久久久久久久久91 | 人人干人人干人人干 | 日韩和的一区二区 | 亚洲一区中文字幕 |