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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電子廣告牌系統設計(原理圖+源程序+論文)

[復制鏈接]
跳轉到指定樓層
樓主
基于51單片機制作的電子廣告牌系統設計

原理圖:



論文預覽:





源程序如下:
  1. #include <reg51.h>

  2. #define uint  unsigned int
  3. #define uchar unsigned char
  4. //#define x1    0x80  //第一行坐標
  5. #define x2    0x88        //第三行坐標
  6. #define x3    0x90        //第二行坐標
  7. //#define x4    0x98        //第四行坐標

  8. #define comm  0                //指令標志
  9. #define dat   1                //數據標志

  10. sbit cs   = P0^0;        //高電平為數據,低電平為指令
  11. sbit std  = P0^1;        //數據輸出位
  12. sbit sclk = P0^2;        //時鐘
  13. sbit psb  = P0^3;   //H=并口; L=串口;
  14. sbit rst  = P0^4;   //Reset Signal 低電平有效


  15. uchar code tab[]={
  16. "計算機發送數據:"
  17. };
  18. uchar code num[]={
  19. "0123456789ABCDEF"
  20. };
  21. uchar buffer[6];        //接收數據緩沖區
  22. uchar display[12];        //顯示數據緩沖器
  23. uchar k=0;

  24. void wr_lcd (uchar dat_comm,uchar content);        // 串行傳輸數據
  25. void delay (uint us);                                                // 延時
  26. void init_lcd(void);                                            //初始化lcd
  27. void init_serial(void);                                                // 初始化串行中斷
  28. void chn_disp(uchar code *chn,uchar j);                //顯示漢字或字符
  29. void convert(uchar *point);                                        // 數據轉換
  30. void chn_disp1(void);                                                // 顯示串口送入數據
  31. void clrram(void);                                                        // 清DDRAM


  32. /******************主程序******************/
  33. void main()
  34. {
  35.         SP=0x5f;
  36.         init_serial();      //初始化串口
  37.         init_lcd();                        //初始化LCD
  38.         clrram();                        //清屏
  39.         chn_disp(tab,0);          //顯示第1行"計算機發送數據:"
  40.         while(1)
  41.         {
  42.                 if(k==6)                //6個數據已接收到
  43.                 {
  44.                         k=0;
  45.                         convert(buffer);//轉換接收數據緩沖區數據
  46.                         chn_disp1();        //顯示6個接收數據
  47.                 }        
  48.         }
  49. }

  50. /****************初始化lcd****************/
  51. void init_lcd(void)
  52. {
  53.         rst=1;                                 //液晶復位端無效
  54.         psb=0;                                 //串行輸出
  55.         wr_lcd (comm,0x30);  //基本指令動作   
  56.         wr_lcd (comm,0x01);  //清屏,地址指針指向00H
  57.         delay (100);
  58.         wr_lcd (comm,0x06);  //光標的移動方向
  59.         wr_lcd (comm,0x0c);  //開顯示,關游標
  60. }
  61. /****************初始化串行中斷****************/
  62. void init_serial(void)
  63. {
  64.         SCON = 0x50;                //8位串行口模式1,允許接收,REN=1
  65.         TMOD|= 0x20;                //定時器1工作在模式2
  66.         TH1 = 0xfd;                        //波特率位9600,晶振頻率位11.0592MHz
  67.         TL1 = 0xfd;
  68.         ES = 1;             //使能串行口中斷
  69.         EA = 1;                                //使能全局中斷
  70.         TR1 = 1;                        //啟動定時器1
  71. }
  72. /****************串口中斷服務程序****************/
  73. void serial_IT(void) interrupt 4
  74. {
  75.         if(RI==1)
  76.         {
  77.                 RI=0;
  78.                 buffer[k++]=SBUF;//將串口接收數據送入接收數據緩沖區
  79.         }
  80. }

  81. /**************顯示漢字或字符**************/
  82. void chn_disp(uchar code *chn,uchar j)
  83. {
  84.         uchar i;
  85.         wr_lcd (comm,0x30);  //基本指令動作  
  86.         wr_lcd (comm,0x80);         //設定DDRAM地址至00H
  87.         for (i=0;i<16;i++)
  88.                 wr_lcd (dat,chn[j*16+i]);//顯示第j行字符
  89. }

  90. /******************數據轉換*******************/
  91. void convert(uchar *point)
  92. {
  93.         uchar i,j1,j2;
  94.         for(i=0;i<6;i++)                        //將接收數據緩沖區數據變為10進制數并存入顯示數據緩沖區
  95.         {
  96.                 j1=point[i]/16;                         //高4位
  97.                 j2=point[i]%16;                  //低4位
  98.                 display[2*i]=num[j1];        //換算成顯示碼
  99.                 display[2*i+1]=num[j2];
  100.         }
  101. }

  102. /**************顯示串口送入數據**************/
  103. void chn_disp1(void)
  104. {
  105.         uchar i;
  106.         wr_lcd(comm,0x30);                           //基本指令動作
  107.         wr_lcd(comm,x3);                           //設定DDRAM地址至10H
  108.         for(i=0;i<3;i++)
  109.         {
  110.                 wr_lcd(dat,display[2*i]);  //將顯示碼送入第二行顯示
  111.                 wr_lcd(dat,display[2*i+1]);
  112.                 wr_lcd(comm,x3+2*i+2);
  113.         }
  114.         wr_lcd(comm,x2);                           //設定DDRAM地址至08H
  115.         for(i=0;i<3;i++)
  116.         {
  117.                 wr_lcd(dat,display[2*i+6]);//將顯示碼送入第三行顯示
  118.                 wr_lcd(dat,display[2*i+7]);
  119.                 wr_lcd(comm,x2+2*i+2);
  120.         }
  121. }

  122. /******************清DDRAM******************/
  123. void clrram(void)
  124. {
  125.         wr_lcd (comm,0x30);                           //基本指令動作
  126.         wr_lcd (comm,0x01);                           //清除顯示,并將DDRAM清零
  127.         delay (180);
  128. }

  129. /******************       ******************/
  130. void wr_lcd(uchar dat_comm,uchar content)
  131. {
  132.         uchar a,i,j;
  133.         delay(50);
  134.         a=content;                        //指令碼或數據碼
  135.         cs=1;                                //發送數據
  136.         sclk=0;                                
  137.         std=1;                                //發送5個"1",作為數據起始位
  138.         for(i=0;i<5;i++)
  139.         {
  140.                 sclk=1;
  141.                 sclk=0;
  142.         }
  143.         std=0;                                //發送第6位,R/W=0,寫數據
  144.         sclk=1;               
  145.         sclk=0;
  146.         if(dat_comm)                //發送第7位RS
  147.                 std=1;                        //若為高電平,發送數據
  148.         else                                
  149.                 std=0;                        //若為低電平,發送指令
  150.         sclk=1;
  151.         sclk=0;
  152.         std=0;                                //發送第8位"0"
  153.         sclk=1;
  154.         sclk=0;
  155.         for(j=0;j<2;j++)    //將數據位分兩個字節發送
  156.         {
  157.                 for(i=0;i<4;i++)//發送數據高4位或低4位
  158.                 {
  159.                         a=a<<1;
  160.                         std=CY;
  161.                         sclk=1;
  162.                         sclk=0;
  163.                 }
  164.                 std=0;
  165.                 for(i=0;i<4;i++)//發送4位"0"
  166.                 {
  167.                         sclk=1;
  168.                         sclk=0;
  169.                 }
  170.         }
  171. }

  172. /******************延時******************/
  173. void delay(uint us)   //delay time
  174. {
  175.         while(us--);
  176. }

復制代碼



單片機電子廣告牌系統設計(電路原理圖+單片機源程序+論文)下載:


全部文件下載:
電子廣告牌.zip (1.9 MB, 下載次數: 121)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:262954 發表于 2017-12-18 09:03 | 只看該作者
很好!
回復

使用道具 舉報

板凳
ID:850293 發表于 2021-1-7 15:09 | 只看該作者
有仿真嘛
回復

使用道具 舉報

無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区视频播放 | 中文字幕亚洲欧美 | 亚洲小视频在线观看 | 91九色视频在线 | 欧美日韩三区 | 国产激情91久久精品导航 | 亚洲精品9999 | 亚洲一区av在线 | 九九热在线精品视频 | 毛片免费视频 | 一级黄片一级毛片 | 久久精品欧美一区二区三区麻豆 | 红桃视频一区二区三区免费 | 亚洲一区成人 | www.亚洲一区二区三区 | 亚洲另类视频 | 精品国产一区二区三区在线观看 | 国产精品一区二区久久 | 国产精品区二区三区日本 | 国产精品久久久久久久久久妞妞 | 羞羞视频在线观看 | 免费a国产 | 欧美h视频 | 激情国产| 久久天堂| 成人在线一区二区三区 | 激情91 | 国产一区二区三区视频免费观看 | 伊人久麻豆社区 | 懂色中文一区二区在线播放 | 久草新在线 | 中文字幕一区二区三区不卡 | 欧美激情视频一区二区三区免费 | 国内精品久久久久久影视8 最新黄色在线观看 | 嫩草研究影院 | 成年人黄色小视频 | 国产精品一区二区福利视频 | 日韩一区二区三区视频在线播放 | 午夜免费网站 | 91精品久久久久久久久中文字幕 | 国产精品毛片久久久久久久 |