|
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- //---------------1302引腳定義-----------------------
- sbit RST=P1^0; //RST=1時(shí)允許操作1302
- sbit SCLK=P1^1; //1302時(shí)鐘腳,低電平到高電平跳變時(shí)寫(xiě)入
- sbit IO=P1^2; //IO寫(xiě)入或讀出數(shù)據(jù)腳,串行形式。
- //---------------1602引腳定義------------------------
- sbit E=P1^5; //使能端,E=1允許讀寫(xiě)操作,E=0禁止。
- sbit RW=P1^4; //RW=1讀出數(shù)據(jù),RW=0寫(xiě)入數(shù)據(jù)。
- sbit RS=P1^3; //RS=1讀寫(xiě)數(shù)據(jù)寄存器,RS=0讀寫(xiě)指令寄存器。
- sbit ACC7=ACC^7;
- //---------------1302,1602共用延時(shí)程序------------------------
- void delay(int m)
- {
- int i,j;
- for(i=0;i<m;i++)
- for(j=0;j<10;j++);
- }
- //------------------寫(xiě)1302程序-----------------------------
- void Wr1302(uchar wr)
- {
- uchar i;
- SCLK=0; //sclk低電平到高電平跳變時(shí)寫(xiě)入數(shù)據(jù)
- for(i=0;i<8;i++)
- {
- IO=wr & 0x01; //寫(xiě)入1302數(shù)據(jù),IO端口
- SCLK=1; //sclk低電平到高電平跳變時(shí)寫(xiě)入數(shù)據(jù)
- wr>>=1; //右一位
- delay(20);
- SCLK=0; //關(guān)閉
- }
- }
- //-----------------讀1302程序------------------------
- uchar Rd1302()
- {
- uchar i;
- IO=1; //允許數(shù)據(jù)輸入輸出
- for(i=0;i<8;i++)
- {
- ACC>>=1; //ACC右一位
- ACC7=IO; //ACC第7位必須是高電平
- SCLK=1; //時(shí)鐘高電平向低電平的跳變寫(xiě)入一個(gè)數(shù)據(jù)
- delay(20);
- SCLK=0;
- };
- return ACC;
- }
- //------------突發(fā)寫(xiě)程序----------------------------------
- void TWr1302(uchar x[])
- {
- int i;
- RST=0; //復(fù)位,低電平有效
- Wr1302(0xbe);
- for(i=0;i<8;i++)
- Wr1302(x[i]);
- }
- //-----------突發(fā)讀程序------------------------------------
- void TRead(uchar x[])
- {
- uchar i;
- RST=1; //高電平復(fù)位信號(hào)無(wú)效
- Wr1302(0xbf); //1302突發(fā)讀寄存器
- for(i=0;i<7;i++)
- x[i]=Rd1302(); //讀1302的數(shù)據(jù)
- RST=0; //高電平復(fù)位信號(hào)有效
- }
-
- //--------------1302啟動(dòng)程序---------------------------------
- void Cmd_wr(c,d)
- {
- RST=1; //RST=1時(shí)允許對(duì)1302操作
- Wr1302(c); //讀1302,寫(xiě)入指令字
- Wr1302(d); //讀1302,寫(xiě)入指令字
- RST=0; //禁止對(duì)1302操作
- }
- //---------------寫(xiě)入指令1602 ------------------------
- void WR_cmd(uint cmd)
- {
- RW=0; //向1602lcd寫(xiě)入指令或數(shù)據(jù)允許位
- P0=cmd; //將數(shù)據(jù)送到P1口
- RS=0; //向1602寫(xiě)入指令
- E=1; //從高電平到低電平的跳變寫(xiě)入一個(gè)數(shù)據(jù)
- delay(1);
- E=0;
- }
- //===============1602寫(xiě)入數(shù)據(jù)=====================
- void WR_data(uint dat)
- {
- RS=1; //向1602寫(xiě)入指令
- RW=0; //向1602lcd寫(xiě)入指令或數(shù)據(jù)允許位
- P0=dat; //將數(shù)據(jù)送到P1口
- E=1; //1602時(shí)鐘從高電平向低電平的跳變寫(xiě)入一個(gè)數(shù)據(jù)
- delay(1);
- E=0;
- }
- //==============1602初始化程序===================
- void init1602(void)
- {
- WR_cmd(0x38); //模式設(shè)置為8位數(shù)據(jù)總線,顯示2行數(shù)據(jù) 5x7點(diǎn)陣/字符
- WR_cmd(0x0c); // 打開(kāi)顯示
- WR_cmd(0x06); //顯示模式設(shè)置為寫(xiě)入新的數(shù)據(jù)光標(biāo)右移
- WR_cmd(0x01); //清屏顯示
- delay(10);
- }
- //===============1602顯示程序===================
- void display(char strlen,uchar *table) //一個(gè)變量前加*說(shuō)明此變量時(shí)指針形式
- {
- uchar i;
- for(i=0;i<strlen;i++) //判一行16個(gè)數(shù)據(jù)是否都寫(xiě)入進(jìn)1602
- {
- WR_data(table[i]); //數(shù)據(jù)寫(xiě)入1602
- }
- delay(20); //延時(shí)20us
- }
- //==============1602與1302主程序=====================
- void main(void)
- { uchar a[8]={0x00,0x57,0x12,0x06,0x07,0x06,0x18,0x00}; //00秒57分12時(shí)06日07月06-5周18年
- uchar Y[16]={0x32,0x30,0x00,0x00,0x2d,0x00,0x00,0x2d,
- 0x00,0x00,0x2d,0x57,0x65,0x65,0x6b,0x00}; //定義1602第一行顯示的字符
- uchar H[16]={0x00,0x00,0x3a,0x00,0x00,0x3a,0x00,0x00,
- 0x2d,0x2d,0x4f,0x4b,0x2d,0x21,0x00,0x00}; //定義1602第二行顯示的字符
-
- uchar b[7]; //讀出的數(shù)據(jù)存儲(chǔ)位置
- Cmd_wr(0x8e,0x00); //啟動(dòng)1302,0x8e寫(xiě)保護(hù)中寫(xiě)單元地址,只能讀不再寫(xiě)。
- // TWr1302(a); //突發(fā)寫(xiě)入(可以試驗(yàn)是否能寫(xiě)入,能寫(xiě)入就正常,測(cè)試時(shí)使用)
- // Cmd_wr(0x8e,0x00); //禁止寫(xiě)入1302
- init1602();
- delay(20);
- while(1) //循環(huán)
- {
- TRead(b); //突發(fā)讀,可以讀到b數(shù)組中
- Y[2]=(0x30+b[6]/16); //0x30是ASCII阿拉伯?dāng)?shù)字的首地址
- Y[3]=(0x30+b[6]%16);
- Y[5]=(0x30+b[4]/16);
- Y[6]=(0x30+b[4]%16);
- Y[8]=(0x30+b[3]/16);
- Y[9]=(0x30+b[3]%16);
- if(b[5]==1)
- Y[15]=7+0x30;
- else
- Y[15]=b[5]-1+0x30;
- H[0]=(0x30+b[2]/16);
- H[1]=(0x30+b[2]%16);
- H[3]=(0x30+b[1]/16);
- H[4]=(0x30+b[1]%16);
- H[6]=(0x30+b[0]/16);
- H[7]=(0x30+b[0]%16);
- // E=0;
- // Cmd_wr(0x8e,0x00); //WP寫(xiě)保護(hù)位設(shè)置為不工作方式
-
- WR_cmd(0x80); //第一行顯示地址
- display(16,Y);
- WR_cmd(0x80+0x40); //第二行顯示地址
- display(16,H);
- }
- }
復(fù)制代碼 |
|