STC 單片機行列式按鍵測試 LCD12864輸出顯示

/*控制器測試程序IAP15W4K61S4板2017 1  9***/

/*按鍵測試按鍵2017 1 10  12864串口 *******/ 

#include <STC15F2K60S2.h>
               #include "intrins.h"
               #define  uint unsigned int  
               #define  uchar unsigned char
               uint        k;
               sbit        OUTA=P1^7;
               sbit        OUTA0=P5^3;
               sbit        OUTA1=P0^5;
               sbit        OUTA2=P5^2;
               sbit        OUTA3=P0^6;
               sbit        OUTA4=P0^4;
               sbit        OUTA5=P0^7;
               sbit        OUTA6=P0^3;
               sbit        OUTA7=P6^0;
               sbit        OUTA8=P0^2;
               sbit        OUTA9=P6^1;
               sbit        OUTB0=P6^2;
               sbit        OUTB1=P6^3;
               sbit        OUTB2=P1^1;
               sbit        OUTB3=P1^0;
               sbit        OUTB4=P4^7;
               sbit        OUTB5=P1^2;
               sbit        OUTB6=P1^3;
               sbit        OUTB7=P1^4;
               sbit        OUTB8=P1^5;
               sbit        OUTB9=P1^6;
               sbit        OUTC0=P7^5;
               sbit        OUTC1=P7^4;
               sbit        OUTC2=P2^7;
               sbit        OUTC3=P2^0;
               sbit        OUTC4=P2^1;
               sbit        OUTC5=P2^3;
               sbit        OUTC6=P2^2;
               sbit        OUTC7=P2^4;
               sbit        OUTC8=P2^5;
               sbit        OUTC9=P2^6;
               sbit        KEYOUT1=P3^4;  //5^3
               sbit        KEYOUT2=P3^0;  //0^5/*1>0*/
               sbit        KEYOUT3=P6^6;  //5^2
               sbit        KEYOUT4=P6^4;  //0^6
               sbit        KEY0=P3^2;       /*按鍵1使用中斷*/
               sbit        KEY1=P4^0;       /*按鍵2OUT  3.4 IN4.0*/
               sbit        KEY2=P3^1;       /*按鍵3OUT  3.0 IN3.1*/
               sbit        KEY3=P4^0;       /*按鍵4OUT  3.0 IN4.0*/
               sbit        KEY4=P6^7;       /*按鍵5OUT  3.0 IN6.7*/
               sbit        KEY5=P6^5;       /*按鍵6OUT  3.0 IN6.5*/
               sbit        KEY6=P3^1;       /*按鍵7OUT  3.4 IN3.1*/
               sbit        KEY7=P6^7;       /*按鍵8OUT  3.4 IN6.7*/
               sbit        KEY8=P6^5;       /*按鍵9OUT  3.4 IN6.5*/
               sbit        KEY9=P6^5;       /*按鍵10OUT 6.6 IN6.5*/
               sbit        KEYA=P4^0;       /*按鍵11OUT 6.4 IN4.0*/
               sbit        KEYB=P3^3;       /*按鍵12使用中斷*/
               sbit        KEYC=P3^1;       /*按鍵13OUT 6.6 IN3.1*/
               sbit        KEYD=P4^0;       /*按鍵14OUT 6.6 IN4.0*/
               sbit        KEYE=P6^7;       /*按鍵15OUT 6.6 IN6.7*/
               sbit        KEYF=P3^1;       /*按鍵16OUT 6.4 IN3.1*/
               sbit        KEYG=P6^7;       /*按鍵18OUT 6.4 IN6.7*/
               sbit     PB=P2^1;
               sbit     CS=P4^6;             //PIN 6        
               sbit     SID=P0^0;            //PIN 5   
               sbit     SCLK=P0^1;             //PIN 4        
               uint     aa=0;
               
/*------------------延時子程序------------------------*/ 
               void     delay_1ms(uint x) 
               {
               int i, j;
               for (i=0; i<x; i++)
               for (j=0; j<50; j++);
               }
/*------------------延時1mS子程序------------------------*/
              void Delay1ms()        //@11.0592MHz
              {
               unsigned char i, j;
               _nop_();
               _nop_();
               _nop_();
               i =5;
               j = 19;
                do
                  {
                while (--j);
                } 
                while (--i);
               }
/*------------------延時子程序------------------------*/ 
               void delay(uint t) 
               { 
               uint i,j; 
               for(i=0;i<t;i++) 
               for(j=0;j<1200;j++); 
               } 
/*------------------寫命令到LCD-----------------------*/ 
               void write_com(unsigned char cmdcode) 
               { 
               uchar i; 
               uchar i_data,temp_data1,temp_data2; 
               EA=0;
               i_data=0xf8; 
               delay_1ms(10); 
               CS=1; 
               SCLK=0; 
                for(i=0;i<8;i++) 
                { 
                SID=(bit)(i_data&0x80); 
                SCLK=0; 
                SCLK=1; 
                i_data=i_data<<1; 
                } 
               i_data=cmdcode; 
               i_data&=0xf0; 
                for(i=0;i<8;i++) 
                { 
                SID=(bit)(i_data&0x80); 
                SCLK=0; 
                SCLK=1; 
                i_data=i_data<<1; 
                } 
               i_data=cmdcode; 
               temp_data1=i_data&0xf0; 
               temp_data2=i_data&0x0f; 
               temp_data1>>=4; 
               temp_data2<<=4; 
               i_data=temp_data1|temp_data2; 
               i_data&=0xf0; 
                for(i=0;i<8;i++) 
                { 
                SID=(bit)(i_data&0x80); 
                SCLK=0; 
                SCLK=1; 
                i_data=i_data<<1; 
                } 
               CS=0; 
               EA=1;
               } 
/*-------------------寫數據到LCD----------------------*/ 
               void write_data(unsigned char Dispdata) 
               { 
               uchar i; 
               uchar i_data,temp_data1,temp_data2; 
               EA=0;
               i_data=0xfa; 
               delay_1ms(10); 
               CS=1; 
                for(i=0;i<8;i++) 
                { 
                SID=(bit)(i_data&0x80); 
                SCLK=0; 
                SCLK=1; 
                i_data=i_data<<1; 
                } 
               i_data=Dispdata; 
               i_data&=0xf0; 
                for(i=0;i<8;i++) 
                { 
                SID=(bit)(i_data&0x80); 
                SCLK=0; 
                SCLK=1; 
                i_data=i_data<<1; 
                } 
               i_data=Dispdata; 
               temp_data1=i_data&0xf0; 
               temp_data2=i_data&0x0f; 
               temp_data1>>=4; 
               temp_data2<<=4; 
               i_data=temp_data1|temp_data2; 
               i_data&=0xf0; 
                for(i=0;i<8;i++) 
                { 
                SID=(bit)(i_data&0x80); 
                SCLK=0; 
                SCLK=1; 
                i_data=i_data<<1; 
                } 
               CS=0; 
               EA=1;
               } 
/*------------------初始化LCD屏-----------------------*/ 
               void lcd_init() 
               { 
               uchar comdata; 
               delay_1ms(100); 
               comdata=0x30; 
               write_com(comdata); /*功能設置:一次送8位數據,基本指令集*/ 
               comdata=0x04; 
               write_com(comdata); /*點設定:顯示字符/光標從左到右移位,DDRAM地址加1*/ 
               comdata=0x0f; 
               write_com(comdata); /*顯示設定:開顯示,顯示光標,當前顯示位反白閃動*/ 
               comdata=0x01; 
               write_com(comdata); /*清DDRAM*/ 
               comdata=0x02; 
               write_com(comdata); /*DDRAM地址歸位*/ 
               comdata=0x80; 
               write_com(comdata); /*把顯示地址設爲0X80,即爲第一行的首位*/ 
               }

/*----顯示機器運行中---------------------*/
               void disrun()
               {  
                write_com(0x91);                 /*地址*/
                write_data(0XBB);                /*半個字符*/
                write_data(0XFA);                /*個位*/ 
                write_com(0x92);                 /*地址*/
                write_data(0XC6);                /*半個字符*/
                write_data(0XF7);                /*個位*/ 
                write_com(0x93);                 /*地址*/
                write_data(0XD4);                /*半個字符*/
                write_data(0XCB);                /*個位*/ 
                write_com(0x94);                 /*地址*/
                write_data(0XD0);                /*半個字符*/
                write_data(0XD0);                /*個位*/ 
                write_com(0x95);                 /*地址*/
                write_data(0XD6);                /*半個字符*/
                write_data(0XD0);                /*個位*/ 
               }
/**************顯示按鍵**************************/
               void diakey()
               {
                write_com(0x80);    /*---按---*/ 
                write_data(0xB0);
                write_data(0xB4);                               
                write_com(0x81);    /*---鍵---*/ 
                write_data(0xBC);
                write_data(0xFC);   
               }
/*--------------- 1 數字 顯示 -----------*/
                void  DISONE()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB1);                                 
               } 
/*--------------- 2 數字 顯示 -----------*/
                void  DISTWO()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB2);                                 
               } 
/*--------------- 3 數字 顯示 -----------*/
                void  DISTHREE()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB3);                                 
               } 
/*--------------- 4 數字 顯示 -----------*/
                void  DISFOUR()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB4);                                 
               } 
/*--------------- 5 數字 顯示 -----------*/
                void  DISFIVE()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB5);                                 
               } 
/*--------------- 6 數字 顯示 -----------*/
                void  DISSIX()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB6);                                 
               } 
/*--------------- 7 數字 顯示 -----------*/
                void  DISSEVEN()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB7);                                 
               } 
/*--------------- 8 數字 顯示 -----------*/
                void  DISEIGHT()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB8);                                 
               } 
/*--------------- 9 數字 顯示 -----------*/
                void  DISNINE()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xB9);                                 
               } 
/*--------------- A 數字 顯示 -----------*/
                void  DISA()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC1);                                 
               } 
/*--------------- B 數字 顯示 -----------*/
                void  DISB()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC2);                                 
               } 
/*--------------- C 數字 顯示 -----------*/
                void  DISC()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC3);                                 
               } 
/*--------------- D 數字 顯示 -----------*/
                void  DISD()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC4);                                 
               } 
/*--------------- E 數字 顯示 -----------*/
                void  DISE()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC5);                                 
               } 
/*--------------- F 數字 顯示 -----------*/
                void  DISF()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC6);                                 
               } 
/*--------------- F 數字 顯示 -----------*/
                void  DISG()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC7);                                 
               } 
/*--------------- F 數字 顯示 -----------*/
                void  DISH()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xA3);
                write_data(0xC8);                                 
               } 
/*----------------清除 數字 顯示 -----------*/
               void  clear()
               {   
                write_com(0x82);            /*---CLEAR---*/ 
                write_data(0xB6);
                write_data(0xA0);                                 
                            
               } 
/*----------------定時器中斷 -----------*/
              void timer0() interrupt 1
               { 
               aa=aa+1;
               TH0=0X53;
               TL0=0X32;
               if(aa==300)
               OUTA=!OUTA,
               aa=0;
               }  
/*-------------------主程序----------------------*/ 
              void main()
              {
               P0M0=0;
               P0M1=0;
               P4M0=0;
               P4M1=0;
               AUXR=0X80;        //STC系列的1T 設置     KEYB
               lcd_init() ;                         /*液晶復位*/
               TMOD=0X01;
               TH0=0X53;
               TL0=0X32;
               EA=1;
               ET0=1;
               TR0=1;
               lcd_init();
               PB=0;  
               disrun();
               KEYOUT1=1;
               KEYOUT2=1;
               KEYOUT3=1;
               KEYOUT4=1;
               OUTA0=1;
               OUTA1=1;
               OUTA2=1;
               OUTA3=1;
               OUTA4=1;
               OUTA5=1;
               OUTA6=1;
               OUTA7=1;
               OUTA8=1;
               OUTA9=1;
               OUTB0=1;
               OUTB1=1;
               OUTB2=1;
               OUTB3=1;
               OUTB4=1;
               OUTB5=1;
               OUTB6=1;
               OUTB7=1;
               OUTB8=1;
               OUTB9=1;
               OUTC0=1;
               OUTC1=1;
               OUTC2=1;
               OUTC3=1;
               OUTC4=1;
               OUTC5=1;
               OUTC6=1;
               OUTC7=1;
               OUTC8=1;
               OUTC9=1;
               while(1)
               {
               OUTA0=0;
               delay(200); 
               OUTA0=1;
               OUTA1=0;
               delay(200);
               OUTA1=1;
               OUTA2=0;
               delay(200);
               OUTA2=1;
               OUTA3=0;
               delay(200);
               OUTA3=1;
               OUTA4=0;
               delay(200);
               OUTA4=1;
               OUTA5=0;
               delay(200);
               OUTA5=1;
               OUTA6=0;
               delay(200);
               OUTA6=1;
               OUTA7=0;
               delay(200);
               OUTA7=1;
               OUTA8=0;
               delay(200);
               OUTA8=1;
               OUTA9=0;
               delay(200);
               OUTA9=1;
               OUTB0=0;
               delay(200);
               OUTB0=1;
               OUTB1=0;
               delay(200);
               OUTB1=1;
               OUTB2=0;
               delay(200);
               OUTB2=1;
               OUTB3=0;
               delay(200);
               OUTB3=1;
               OUTB4=0;
               delay(200);
               OUTB4=1;
               OUTB5=0;
               delay(200);
               OUTB5=1;
               OUTB6=0;
               delay(200);
               OUTB6=1;
               OUTB7=0;
               delay(200);
               OUTB7=1;
               OUTB8=0;
               delay(200);
               OUTB8=1;
               OUTB9=0;
               delay(200);
               OUTB9=1;
               OUTC0=0;
               delay(200);
               OUTC0=1;
               OUTC1=0;
               delay(200);
               OUTC1=1;
               OUTC2=0;
               delay(200);
               OUTC2=1;
               OUTC3=0;
               delay(200);
               OUTC3=1;
               OUTC4=0;
               delay(200);
               OUTC4=1;
               OUTC5=0;
               delay(200);
               OUTC5=1;
               OUTC6=0;
               delay(200);
               OUTC6=1;
               OUTC7=0;
               delay(200);
               OUTC7=1;
               OUTC8=0;
               delay(200);
               OUTC8=1;
               OUTC9=0;
               delay(200);
               OUTC9=1;
               delay(200);

                if(!KEY0) 
                {
                 diakey();
                 DISONE();
                }
                if(!KEYB) 
                {
                 diakey();
                 DISC();
                }
                KEYOUT1=0;
                if(!KEY1) 
                {
                 diakey();
                 DISTWO();
                }
                if(!KEY6) 
                {
                 diakey();
                 DISSEVEN();
                }
                if(!KEY7) 
                {
                 diakey();
                 DISEIGHT();
                } 
                if(!KEY8) 
                {
                 diakey();
                 DISNINE();
                }
                KEYOUT1=1;
                KEYOUT2=0;
                if(!KEY2) 
                {
                 diakey();
                 DISTHREE();
                }
                if(!KEY3) 
                {
                 diakey();
                 DISFOUR();
                }
                if(!KEY4) 
                {
                 diakey();
                 DISFIVE();
                } 
                if(!KEY5) 
                {
                 diakey();
                 DISSIX();
                }
                KEYOUT2=1;
                KEYOUT3=0;
                if(!KEY9) 
                {
                 diakey();
                 DISA();
                }
                if(!KEYC) 
                {
                 diakey();
                 DISD();
                }
                if(!KEYD) 
                {
                 diakey();
                 DISE();
                } 
                if(!KEYE) 
                {
                 diakey();
                 DISF();
                }
                KEYOUT3=1;
                KEYOUT4=0;
                if(!KEYA) 
                {
                 diakey();
                 DISB();
                }
                if(!KEYF) 
                {
                 diakey();
                 DISG();
                }
                if(!KEYG) 
                {
                 diakey();
                 DISH();
                } 
                KEYOUT4=1;
                }
              }
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章