|
基于AVRmega16d单片机的简易频率测量仪
[复制链接]
这是学校给的课题 搞很久了还是有错误 谁能帮帮忙修改一下啊
- #include
- #include
- #define uchar unsigned char
- #define uint unsigned int
- #define CON 1000
- uchar Flag=0;
- //uchar Table[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
- // 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
- uchar Table[20]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
- 0x80,0x90 };
- uchar Data[4]={0,0,0,0};
- uint CNT1;
- uint CNT2;
- uint CNT=100;
- void DelayMs(uint i)
- {
- uint j;
- for(;i!=0;i--)
- {
- for(j=2000;j!=0;j--){;}
- }
- }
- void Pre_Display()
- {
- uchar i;
- for(i=0;i<16;i++)
- {
- PORTB=0x00;
- PORTA=Table[i];
- DelayMs(100);
- }
- }
- void Display(uchar *p)
- {
- uchar i,sel=0x08;
- for(i=0;i<4;i++)
- {
- PORTC=~sel;
- PORTA=Table[p[i]];
- DelayMs(2);
- sel=sel>>1;
- }
-
- }
- void HZ(uint i,uchar *p)
- {
- uint TEM;
- p[0]=CON/i;
- TEM=CON%i;
- TEM=TEM*10;
-
- p[1]=TEM/i;
- TEM=TEM%i;
- TEM=TEM*10;
-
- p[2]=TEM/i;
- TEM=TEM%i;
- TEM=TEM*10;
-
- p[3]=TEM/i;
-
- }
- void Init_IO()
- {
- DDRA=0xFF;
- PORTA=0xFF;
- DDRC=0xFF;
- PORTC=0xFF;
- DDRD=0x00;
- PORTD=0x00;
- }
- void Init_Timer1()
- {
- TIMSK=TIMSK|0x20;
- TCCR1B=0x82;
- TIFR=0x20;
- SREG=SREG&0x7f;
- }
- void main()
- {
- uchar i;
- uint TEMP;
- Init_IO();
- PORTA=0xff;
- PORTC=0xf0;
- DelayMs(300);
- PORTC=0xff;
- Pre_Display();
-
- PORTC=0xff;
- Init_Timer1();
- while(1){
- while(TIFR&0x20)//说明发生了下降沿跳变
- {
- //TIFR=TIFR&0xDF; //标志位清零
- //TEMP=ICR1L;
- //CNT2=(ICR1H<<8)+TEMP;
- TIFR|=0x20;
- CNT=ICR1L;
- CNT2=(ICR1H<<8)+ICR1L;
- CNT=CNT2-CNT1;
- Flag++;
- }
- if(Flag==2)
- {
- Flag=0;
- HZ(CNT,Data);
- for(i=0;i<100;i++)
- Display(Data);
-
- CNT=0;CNT1=0;CNT2=0;
- }
- }
-
-
-
-
-
- }
复制代码
|
|