|
我程序只運行到了這里, if(k3==1) {
LED[0]=a%10; //顯示計數(shù)
LED[1]=a/10%10;
LED[2]=a/100%10;
LED[3]=a/1000;
}
后面的就不顯示了,啥回事?
全程序如下:
- /*
- MCLKO/NRST/SCL_2/MOSI/RxD_3/T1CLKO/T0/INT2/P5.4
- Vcc
- SDA_2/SS/TxD_3/T0CLKO/T1/INT3/P5.5
- Gnd
- P3.3/TxD_2/INT1/MISO/SDA
- P3.2/RxD_2/INT0/SCLK/SCL
- P3.1/TxD
- P3.0/RxD/INT4
- */
- #include "8g.h"
- #include "intrins.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define EX3 0x20
- void LED4_Display (void); // LED顯示
- void LED_OUT(uchar X); // LED單字節(jié)串行移位函數(shù)
- unsigned char code LED_0F[]; // LED字模表
- unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
- unsigned char disbuf[4]={0,0,0,0};
- sbit DIO = P3^2; //串行數(shù)據(jù)輸入
- sbit RCLK = P3^3; //時鐘脈沖信號——上升沿有效
- sbit SCLK = P5^4; //打入信號————上升沿有效
- sbit IN3=P5^5; //對射光藕
- sbit k31=P3^1;
- //sbit IN3=P1^2;
- //sbit IN4=P1^3;
- //sbit LED=P2^0;
- /******************************************************************************************
- 使用數(shù)組對數(shù)碼管預(yù)先定義
- /*****************************************************************************************/
- unsigned int motor1=0; //計左電機碼盤脈沖值
- unsigned int speed1=0; //計左電機碼盤脈沖值
- unsigned int k=0,a=0,k2;
- unsigned char k3=2;
- uchar LED[8]; //用于LED的8位顯示緩存
- void LED4_Display (void)
- {
- unsigned char code *led_table; // 查表指針
- uchar i;
- //顯示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;
- //顯示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;
- //顯示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;
- //顯示第4位
- led_table = LED_0F + LED[3];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x08);
- RCLK = 0;
- RCLK = 1;
- }
- void LED_OUT(uchar X)
- {
- uchar i;
- for(i=8;i>=1;i--)
- {
- if (X&0x80) DIO=1; else DIO=0;
- X<<=1;
- SCLK = 0;
- SCLK = 1;
- }
- }
- unsigned char code LED_0F[] =
- {// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
- };
- //
- /*********************************************************************************************
- 外部中斷
- /********************************************************************************************/
- void INT_init (void)
- {
- INTCLKO |= EX3; //使能INT3下降沿中斷
- EA = 1; //中斷總開關(guān)
- }
- /********************************************************************************************
- 定時器0初始化
- /********************************************************************************************/
- void T0_init (void)
- {
- AUXR |= 0x80; //定時器時鐘1T模式
- TMOD &= 0xF0; //設(shè)置定時器模式
- TL0 = 0; //設(shè)置定時初始值
- TH0 = 0; //設(shè)置定時初始值計數(shù)初值
- TR0 = 1; //啟動定時器
- ET0 = 1; //使能定時器中斷
- }
- /********************************************************************************************
- //延遲函數(shù)
- /********************************************************************************************/
- void DELAY_MS (unsigned int a)
- {
- unsigned int i;
- while( a-- != 0)
- {
- for(i = 0; i < 600; i++);
- }
- }
- /*********************************************************************************************
- 主程序
- /********************************************************************************************/
- void main(void)
- {
- P1M0 = 0x00;
- P1M1 = 0x00;
- P3M0 = 0x00;
- P3M1 = 0x00;
- P5M0 = 0x00;
- P5M1 = 0x00;
- INT_init();
- T0_init();
- IN3=1;//光藕初始化
- k3=1; //按鍵默認(rèn)顯示速度
- while (1)
- {
- if(k31==0&&k3==1)
- {
- DELAY_MS (10);
- if(k31==0&&k3==1)
- {
- k3=2;//顯示速度
- }
- }
- if(k31==0&&k3==2)
- {
- DELAY_MS (10);
- if(k31==0&&k3==2)
- {
- k3=1;//顯示計數(shù)
- }
- }
- if(a>9999)
- {a=0;}
- LED4_Display ();
- }
- }
- /*********************************************************************************************
- 外部中斷INT3計算電機1的脈沖
- /********************************************************************************************/
- void INT3_Isr() interrupt 11
- {
- motor1++;
- a++;
- }
- /*********************************************************************************************
- 外部中斷INT1計算電機2的脈沖
- /********************************************************************************************/
- void TM0_Isr() interrupt 1
- {
- TH0=(65536-1000)/256; //16位計數(shù)寄存器T0高8位, 12MHZ時1000微秒
- TL0=(65536-1000)%256; //16位計數(shù)寄存器T0低8位,
- k++; //k自加1
- if(k==1000)
- {
- k=k2;
- k=0; //重新定義k的值
- speed1=motor1*60; // 轉(zhuǎn)/min
- motor1=0; //重新定義motor1的值
- }
- if(k3==1)
- {
-
- LED[0]=a%10; //顯示計數(shù)
- LED[1]=a/10%10;
- LED[2]=a/100%10;
- LED[3]=a/1000;
- }
- if(k3==2)
- {
- LED[3]=speed1/10;//顯示速度
- LED[2]=speed1%10;
- LED[1]=5;
- LED[0]=8;
- }
-
-
- }
復(fù)制代碼
|
|