找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9573|回復(fù): 2
收起左側(cè)

單片機(jī)電子廣告牌系統(tǒng)設(shè)計(jì)(原理圖+源程序+論文)

[復(fù)制鏈接]
ID:114320 發(fā)表于 2016-4-18 15:09 | 顯示全部樓層 |閱讀模式
基于51單片機(jī)制作的電子廣告牌系統(tǒng)設(shè)計(jì)

原理圖:
0.png


論文預(yù)覽:
1.png 2.png




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

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

  8. #define comm  0                //指令標(biāo)志
  9. #define dat   1                //數(shù)據(jù)標(biāo)志

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


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

  24. void wr_lcd (uchar dat_comm,uchar content);        // 串行傳輸數(shù)據(jù)
  25. void delay (uint us);                                                // 延時(shí)
  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);                                        // 數(shù)據(jù)轉(zhuǎn)換
  30. void chn_disp1(void);                                                // 顯示串口送入數(shù)據(jù)
  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行"計(jì)算機(jī)發(fā)送數(shù)據(jù):"
  40.         while(1)
  41.         {
  42.                 if(k==6)                //6個(gè)數(shù)據(jù)已接收到
  43.                 {
  44.                         k=0;
  45.                         convert(buffer);//轉(zhuǎn)換接收數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
  46.                         chn_disp1();        //顯示6個(gè)接收數(shù)據(jù)
  47.                 }        
  48.         }
  49. }

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

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

  90. /******************數(shù)據(jù)轉(zhuǎn)換*******************/
  91. void convert(uchar *point)
  92. {
  93.         uchar i,j1,j2;
  94.         for(i=0;i<6;i++)                        //將接收數(shù)據(jù)緩沖區(qū)數(shù)據(jù)變?yōu)?0進(jìn)制數(shù)并存入顯示數(shù)據(jù)緩沖區(qū)
  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. /**************顯示串口送入數(shù)據(jù)**************/
  103. void chn_disp1(void)
  104. {
  105.         uchar i;
  106.         wr_lcd(comm,0x30);                           //基本指令動(dòng)作
  107.         wr_lcd(comm,x3);                           //設(shè)定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);                           //設(shè)定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);                           //基本指令動(dòng)作
  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;                        //指令碼或數(shù)據(jù)碼
  135.         cs=1;                                //發(fā)送數(shù)據(jù)
  136.         sclk=0;                                
  137.         std=1;                                //發(fā)送5個(gè)"1",作為數(shù)據(jù)起始位
  138.         for(i=0;i<5;i++)
  139.         {
  140.                 sclk=1;
  141.                 sclk=0;
  142.         }
  143.         std=0;                                //發(fā)送第6位,R/W=0,寫(xiě)數(shù)據(jù)
  144.         sclk=1;               
  145.         sclk=0;
  146.         if(dat_comm)                //發(fā)送第7位RS
  147.                 std=1;                        //若為高電平,發(fā)送數(shù)據(jù)
  148.         else                                
  149.                 std=0;                        //若為低電平,發(fā)送指令
  150.         sclk=1;
  151.         sclk=0;
  152.         std=0;                                //發(fā)送第8位"0"
  153.         sclk=1;
  154.         sclk=0;
  155.         for(j=0;j<2;j++)    //將數(shù)據(jù)位分兩個(gè)字節(jié)發(fā)送
  156.         {
  157.                 for(i=0;i<4;i++)//發(fā)送數(shù)據(jù)高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++)//發(fā)送4位"0"
  166.                 {
  167.                         sclk=1;
  168.                         sclk=0;
  169.                 }
  170.         }
  171. }

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

復(fù)制代碼



單片機(jī)電子廣告牌系統(tǒng)設(shè)計(jì)(電路原理圖+單片機(jī)源程序+論文)下載:
3.png

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表