欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10013|回復: 2
收起左側

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

[復制鏈接]
ID:114320 發表于 2016-4-18 15:09 | 顯示全部樓層 |閱讀模式
基于51單片機制作的電子廣告牌系統設計

原理圖:
0.png


論文預覽:
1.png 2.png




源程序如下:
  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. }

復制代碼



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

全部文件下載:
電子廣告牌.zip (1.9 MB, 下載次數: 121)
回復

使用道具 舉報

ID:262954 發表于 2017-12-18 09:03 | 顯示全部樓層
很好!
回復

使用道具 舉報

ID:850293 發表于 2021-1-7 15:09 | 顯示全部樓層
有仿真嘛
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表