加入頭文件,調取writedata 和writecommand函數就可通過,看上去還少一些功能函數,好像程序不完整。現有的已經- #include <reg51.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- uint key_1,pinlv,miao,n,s,o,keyz;
- int delay(int n);
- uint yejingtable[8];
- uint pinlv_s[8];
- void writedata(int x);
- void writecommand(int x);
- uchar keyscan(void)
- {
- char scan, tmp;
- P1=0xf0;
- if((P1&0xf0)!=0xf0)
- {delay(10);
- if((P1&0xf0)!=0xf0)
- {scan=0xfe;
- while((scan&0x10)!=0)
- {
- P1=scan;
- if((P1&0xf0)!=0xf0)
- {tmp=(P1&0xf0)|0xf0;
- while((P1&0xf0)!=0xf0);
- return((~scan)|(~tmp));
- }
- else scan=(scan<<1)|0x01;
- }
- }
- }
- return(0);
- }
- void keychuli()
- {
- keyz=keyscan();
- if (keyz!=0)
- {
- switch(keyz)
- {
- case 0x11:key_1=1;break;
- case 0x21:key_1=2;break;
- case 0x41:key_1=3;break;
- case 0x81:key_1=4;break;
- case 0x12:key_1=5;break;
- case 0x22:key_1=6;break;
- case 0x42:key_1=7;break;
- case 0x82:key_1=8;break;
- case 0x14:key_1=9;break;
- case 0x44:key_1=0;break;
- default:break;
- }
- }
- }
- /*void delay(int w)
- {
- int a;
- for(w=a,w>0,w--)
- for(a=47,a>0,a--);
- }
- */
- delay(int x)
- {int i,j;
- for(i=1;i<x;i++);
- for(j=1;j<1200;j++);
- }
- void chuli()
- {float pinlv_s[7];
- pinlv_s[1]=pinlv/10000%10;
- pinlv_s[2]=pinlv/10000%10;
- pinlv_s[3]=pinlv/1000%10;
- pinlv_s[4]=pinlv/100%10;
- pinlv_s[5]=pinlv/10%10;
- pinlv_s[6]=pinlv%10;
- if (pinlv_s[1]==0)
- {pinlv_s[1]=10;
- if(pinlv_s[2]==0)
- {pinlv_s[2]=10;
- if(pinlv_s[3]==0)
- {pinlv_s[3]=10;
- if(pinlv_s[4]==0)
- {pinlv_s[4]=10;}
- }
- }
- }
- writecommand(0x8a);
- writedata(int yejingtable[pinlv_s[1]]);
- writedata(int yejingtable[pinlv_s[2]]);
- writedata(int yejingtable[pinlv_s[3]]);
- writedata(int yejingtable[pinlv_s[4]]);
- }
- void cepin()
- {
- n=0;
- miao=0;
- TF0=0;
- TMOD=0x15;
- TH1=0x3c;
- TL1=0xb0;
- TH0=0;
- TL0=0;
- ET1=1;
- TCON=0x50;
- while(1)
- {
- if(miao==0&&TF0==1)
- {
- n++;
- TF0=0;
- TH0=0;
- TL0=0;
- }
- if(miao==1)
- {
- pinlv=(n*65536+(TH0*256+TL0));
- chuli();
- n=0;
- miao=0;
- TF0=0;
- TMOD=0x15;
- TH1=0x3c;
- TL1=0xb0;
- TH0=0;
- TL0=0;
- ET1=1;
- TCON=0x50;
- }
- display(1,1, "當前頻率: ");
- display(3,7,"Hz");
- keychuli();
- if(keyz==0x88)
- {TCON=0x0;
- break;}
- }
- }
- void cezhou(void)
- {
- while(1)
- {
- n=0;
- TMOD=0x01;
- TH0=0;
- TL0=0;
- ET0=1;
- TR0=0;
- //while(T0==1);
- while(T0==0);
- TR0=1;
- while(T0==1);
- //while(T0==0);
- TR0=0;
- zhouq=(n*65535+(TH0*256)+TL0);
- if(zhank==0)
- {
- pinlv=zhouqi;
- display(1,1,"當前周期:");
- chuli();
- display(3,7,"us");
- }
- for(t=0,t<10000,t++)
- {
- keychuli();
- if(keyz==0x8||zhank==1)
- goto tuichu;
-
- }
- }
- tuichu : ;
- }
- void cemai()
- {
- while(1)
- {
- n=0;
- TMOD=0x01;
- TH0=0;
- TL0=0;
- ET0=1;
- TR0=0;
- while(T0==1);
- while(T0==0);
- TR0=1;
- while(T0==1);
- TR0=0;
- maik=(n*65535+(TH0*256+TL0));
- if(zhank==0)
- {
- pinlv=maik;
- display(1,1,"當前脈寬:" );
- chuli();
- display(3,7,"us:");
- }
- for (t=0,t<10000,t++ )
- {
- keychuli();
- if(keyz==0x88||zhank==1)
- goto tuichu1;
- }
- }
- tuichu 1:;
- }
- void cezhan()
- {
- float q,x;
- unsigned long m1;
- zhank=1;
- while (1)
- {
- display(1,1,"占空比為:");
- cezhou();
- cemai();
- q=zhouq/1.0;
- x=maik/q;
- m1=x*10000000;
- pinlv s[0]=m1/1000000;
- pinlv s[1]=m1/100000%10;
- pinlv s[2]=m1/10000%10;
- pinlv s[3]=m1/1000%10;
- pinlv s[4]=m1/100%10;
- pinlv s[5]=m1/10%10;
- pinlv s[6]=m1%10;
- writecommand(0x8a);
- writedata(yejingtable[0]);
- writedata(0x2e);
- writedata(yejingtable[pinlv s[0]]);
- writedata(yejingtable[pinlv s[1]]);
- writedata(yejingtable[pinlv s[2]]);
- writedata(yejingtable[pinlv s[3]]);
- writedata(yejingtable[pinlv s[4]]);
- writedata(yejingtable[pinlv s[5]]);
- writedata(yejingtable[pinlv s[6]]);
- for(t=0,t<10000,t++)
- {
- keychuli();
- if(keyz==0x88)
- {TR0=0;
- goto tuichu 2;
- }
- }
- }
- tuichu 2: ;
- }
- voidtimer1(void) interrupt 3 using 0
- {
- uchar miao1;
- TH1=0x3c;
- TL1=0xb0;
- miao1 ++;
- if(miao1==20)
- {
- TCON=0x0;
- miao1=1;
- }
- }
- void timer0 (void) interrupt1 using 0
- {
- TH0=0x0;
- TL0=0x0;
- n++;
- }
- library ieee;
- useieee.std_logic_1164.all;
- useieee.std_logic_arith.all;
- useieee.std_logic_unsigned.all;
- entity trigger is
- Port(
- d,j,k,t:in std_logic;
- clk: in std_logic;
- key:in std_logic_vector(2 downto0);
- q,nq:out std_logic);
- end trigger;
- architecture Behavioral of trigger is
- signal temp:std_logic_vector(2downto 0);
- signal q_temp:std_logic:='0';
- signal clk_fresh:std_logic;
- signal jk:std_logic_vector(1downto 0);
- signal cnt0:integer range 0 to2000000;
- signal cnt:integer range 0to20000000;
- begin
- process (clk,key)
- begin
- if(key="111")then cnt0<=0;
- else if(clk'event' and clk='1')then
- ifcnt0>1999999 then cnt0<=0;
- temp<=key;
- else cnt0<=cnt0+1;
- endif ;
- end if;
- end process;
- process (clk)
- begin
- if(clk'event' and clk='1') then cnt<=cnt+1;
- ifcnt<10000000 then clk_fresh<='0';
- elsif cnt<20000000 then clk_fresh<='1';
- elsif cnt>20000000 then cnt<=0;
- endif;
- endif;
- end process;
- process(clk_fresh)
- befin
- if(clk_fresh'event' andclk_fresh='1') then
- if(temp="110")then
- q_temp<=d;
- elsif (temp="101") then
- jk<=j&k;
- case jk is
- when "00"=>q_temp<=q_temp;
- when "01"=>q-temp<='0';
- when "10"=>q-temp<='1';
- when "11"=>q_temp<=not q_temp;
- when others =>q_temp <=null;
- end case ;
- elsif (temp="011") then
- if(t='0') then
- q_temp<=q_temp;
- else q_temp <=not q_temp;
- q<=q_temp;
- nq<=not q_temp;
- endprocess;
- end behavioral;
- end if
- end
復制代碼 編譯通過 |