|
基于51單片機(jī)制作的電子廣告牌系統(tǒng)設(shè)計(jì)
原理圖:
論文預(yù)覽:
源程序如下:
- #include <reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- //#define x1 0x80 //第一行坐標(biāo)
- #define x2 0x88 //第三行坐標(biāo)
- #define x3 0x90 //第二行坐標(biāo)
- //#define x4 0x98 //第四行坐標(biāo)
- #define comm 0 //指令標(biāo)志
- #define dat 1 //數(shù)據(jù)標(biāo)志
- sbit cs = P0^0; //高電平為數(shù)據(jù),低電平為指令
- sbit std = P0^1; //數(shù)據(jù)輸出位
- sbit sclk = P0^2; //時(shí)鐘
- sbit psb = P0^3; //H=并口; L=串口;
- sbit rst = P0^4; //Reset Signal 低電平有效
- uchar code tab[]={
- "計(jì)算機(jī)發(fā)送數(shù)據(jù):"
- };
- uchar code num[]={
- "0123456789ABCDEF"
- };
- uchar buffer[6]; //接收數(shù)據(jù)緩沖區(qū)
- uchar display[12]; //顯示數(shù)據(jù)緩沖器
- uchar k=0;
- void wr_lcd (uchar dat_comm,uchar content); // 串行傳輸數(shù)據(jù)
- void delay (uint us); // 延時(shí)
- void init_lcd(void); //初始化lcd
- void init_serial(void); // 初始化串行中斷
- void chn_disp(uchar code *chn,uchar j); //顯示漢字或字符
- void convert(uchar *point); // 數(shù)據(jù)轉(zhuǎn)換
- void chn_disp1(void); // 顯示串口送入數(shù)據(jù)
- void clrram(void); // 清DDRAM
- /******************主程序******************/
- void main()
- {
- SP=0x5f;
- init_serial(); //初始化串口
- init_lcd(); //初始化LCD
- clrram(); //清屏
- chn_disp(tab,0); //顯示第1行"計(jì)算機(jī)發(fā)送數(shù)據(jù):"
- while(1)
- {
- if(k==6) //6個(gè)數(shù)據(jù)已接收到
- {
- k=0;
- convert(buffer);//轉(zhuǎn)換接收數(shù)據(jù)緩沖區(qū)數(shù)據(jù)
- chn_disp1(); //顯示6個(gè)接收數(shù)據(jù)
- }
- }
- }
- /****************初始化lcd****************/
- void init_lcd(void)
- {
- rst=1; //液晶復(fù)位端無(wú)效
- psb=0; //串行輸出
- wr_lcd (comm,0x30); //基本指令動(dòng)作
- wr_lcd (comm,0x01); //清屏,地址指針指向00H
- delay (100);
- wr_lcd (comm,0x06); //光標(biāo)的移動(dòng)方向
- wr_lcd (comm,0x0c); //開(kāi)顯示,關(guān)游標(biāo)
- }
- /****************初始化串行中斷****************/
- void init_serial(void)
- {
- SCON = 0x50; //8位串行口模式1,允許接收,REN=1
- TMOD|= 0x20; //定時(shí)器1工作在模式2
- TH1 = 0xfd; //波特率位9600,晶振頻率位11.0592MHz
- TL1 = 0xfd;
- ES = 1; //使能串行口中斷
- EA = 1; //使能全局中斷
- TR1 = 1; //啟動(dòng)定時(shí)器1
- }
- /****************串口中斷服務(wù)程序****************/
- void serial_IT(void) interrupt 4
- {
- if(RI==1)
- {
- RI=0;
- buffer[k++]=SBUF;//將串口接收數(shù)據(jù)送入接收數(shù)據(jù)緩沖區(qū)
- }
- }
- /**************顯示漢字或字符**************/
- void chn_disp(uchar code *chn,uchar j)
- {
- uchar i;
- wr_lcd (comm,0x30); //基本指令動(dòng)作
- wr_lcd (comm,0x80); //設(shè)定DDRAM地址至00H
- for (i=0;i<16;i++)
- wr_lcd (dat,chn[j*16+i]);//顯示第j行字符
- }
- /******************數(shù)據(jù)轉(zhuǎn)換*******************/
- void convert(uchar *point)
- {
- uchar i,j1,j2;
- for(i=0;i<6;i++) //將接收數(shù)據(jù)緩沖區(qū)數(shù)據(jù)變?yōu)?0進(jìn)制數(shù)并存入顯示數(shù)據(jù)緩沖區(qū)
- {
- j1=point[i]/16; //高4位
- j2=point[i]%16; //低4位
- display[2*i]=num[j1]; //換算成顯示碼
- display[2*i+1]=num[j2];
- }
- }
- /**************顯示串口送入數(shù)據(jù)**************/
- void chn_disp1(void)
- {
- uchar i;
- wr_lcd(comm,0x30); //基本指令動(dòng)作
- wr_lcd(comm,x3); //設(shè)定DDRAM地址至10H
- for(i=0;i<3;i++)
- {
- wr_lcd(dat,display[2*i]); //將顯示碼送入第二行顯示
- wr_lcd(dat,display[2*i+1]);
- wr_lcd(comm,x3+2*i+2);
- }
- wr_lcd(comm,x2); //設(shè)定DDRAM地址至08H
- for(i=0;i<3;i++)
- {
- wr_lcd(dat,display[2*i+6]);//將顯示碼送入第三行顯示
- wr_lcd(dat,display[2*i+7]);
- wr_lcd(comm,x2+2*i+2);
- }
- }
- /******************清DDRAM******************/
- void clrram(void)
- {
- wr_lcd (comm,0x30); //基本指令動(dòng)作
- wr_lcd (comm,0x01); //清除顯示,并將DDRAM清零
- delay (180);
- }
- /****************** ******************/
- void wr_lcd(uchar dat_comm,uchar content)
- {
- uchar a,i,j;
- delay(50);
- a=content; //指令碼或數(shù)據(jù)碼
- cs=1; //發(fā)送數(shù)據(jù)
- sclk=0;
- std=1; //發(fā)送5個(gè)"1",作為數(shù)據(jù)起始位
- for(i=0;i<5;i++)
- {
- sclk=1;
- sclk=0;
- }
- std=0; //發(fā)送第6位,R/W=0,寫(xiě)數(shù)據(jù)
- sclk=1;
- sclk=0;
- if(dat_comm) //發(fā)送第7位RS
- std=1; //若為高電平,發(fā)送數(shù)據(jù)
- else
- std=0; //若為低電平,發(fā)送指令
- sclk=1;
- sclk=0;
- std=0; //發(fā)送第8位"0"
- sclk=1;
- sclk=0;
- for(j=0;j<2;j++) //將數(shù)據(jù)位分兩個(gè)字節(jié)發(fā)送
- {
- for(i=0;i<4;i++)//發(fā)送數(shù)據(jù)高4位或低4位
- {
- a=a<<1;
- std=CY;
- sclk=1;
- sclk=0;
- }
- std=0;
- for(i=0;i<4;i++)//發(fā)送4位"0"
- {
- sclk=1;
- sclk=0;
- }
- }
- }
- /******************延時(shí)******************/
- void delay(uint us) //delay time
- {
- while(us--);
- }
復(fù)制代碼
單片機(jī)電子廣告牌系統(tǒng)設(shè)計(jì)(電路原理圖+單片機(jī)源程序+論文)下載:
全部文件下載:
電子廣告牌.zip
(1.9 MB, 下載次數(shù): 121)
2016-4-18 15:09 上傳
點(diǎn)擊文件名下載附件
|
|