⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainok._c

📁 mega8按键数码显示程序
💻 _C
字号:
/***************************************/
/*          使用内部震荡,设置4mhz     */
/****************************************/
 //2007.12---xieming
 //  1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
//  2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
//     通信波特率为19200(Tools->Environment Options...)。
//  3、将PC屏幕光标定位于调试窗口中
#include "iom8v.h"
#include "macros.h"
#define osccal 0x7d  
//内部RC校正常数
#define Vref   500//参考电压值

unsigned int adc_rel;//AD转换结果
unsigned char adc_mux;//AD通道

#define set_bit(x,y)  (x|=(1<<y))
#define clr_bit(x,y)  (x&=~(1<<y))

//PORT B
#define OUT1 5
#define OUT2  4

unsigned int disnm,smode;
unsigned char dis[4];
unsigned char num[12]={
0x3f,//------------------0
0x06,//------------------1
0x5b,//------------------2
0x4f,//------------------3
0x66,//------------------4
0x6d,//------------------5
0x7d,//------------------6
0x27,//------------------7
0x7f,//------------------8
0x6f,//------------------9
0xff,//------------------8.
0x00//-------------------none
};


unsigned char temp[4]={30,35,40,45};

unsigned char sd,su,se,sm;



void delay(int dt) //delay=(0.95dt+1.76)us 
{while(dt) 
{dt--; 
asm("nop"); 
asm("nop"); 
asm("nop"); 
} 
} 
void display(void)
{unsigned char i;
 
 for(i=0;i<4;i++)
  {  clr_bit(PORTD,i);
    PORTB=num[dis[i]];
    delay(10);
	set_bit(PORTD,i);
   }
  
}

unsigned char  keyscan(void)
{ unsigned char keyst,tp;
  keyst=PINC;
  delay(10);
  tp=PINC;
  if(tp!=keyst) return 0;
  keyst=keyst&0x0f;
  if(keyst==0x0f)
   {sd=0;su=0;se=0;sm=0;
   return 0;//no button
   }
   else
   {if(sd||se||su||sm) return 0;
         if((keyst&1)==0) {sd=1;return 1;} //down
    else if((keyst&2)==0) {su=1;return 2;}//up
	else if((keyst&4)==0) {se=1;return 3;}//enter
    else if((keyst&8)==0) {sm=1;return 4;}//mode
	}
}

void main(void) 
{
unsigned int j,keynm,i=0;


    DDRB=0xff;/*PORTb is outPUT PORT*/
	PORTB=0xfF;//
	DDRD=0xff;	//
	PORTD=0x3f;	//
	
    DDRC=0x00;/* input */
	PORTC=0x0f;/* pullup enable */


while(1) 
  {

  
  //dis[0]=11;dis[1]=11;dis[2]=11;dis[3]=11;
 
 
 
  keynm=keyscan();
  if(keynm==4)//set mode
    {smode=smode+1;
	if(smode==5) smode=1;
	 dis[3]=4;
	 display();
	}
  else if(keynm==3)//enter
    {smode=0;
//save set value
	}
	
  if(smode)
	{i=smode-1;
	 switch(keynm)
	   {case 2:
	    temp[i]++;
		if(temp[0]==temp[1])temp[0]=temp[1]-1;
		if(temp[1]==temp[2])temp[1]=temp[2]-1;
		if(temp[2]==temp[3])temp[2]=temp[3]-1;
		if(temp[3]==99)temp[3]=98;
	    break;
		
		case 1:
		temp[i]--;
		if(temp[0]==0)temp[0]=1;
		if(temp[1]==temp[0])temp[1]=temp[0]+1;
		if(temp[2]==temp[1])temp[2]=temp[1]+1;
		if(temp[3]==temp[2])temp[3]=temp[2]+1;
		break;
		default:break;
	   }
	dis[0]=smode;dis[1]=11;
	dis[2]=temp[i]/10;
    dis[3]=temp[i]%10;
	display();
	}
  else
  {
  //disnm=ADC;
    //disnm=ADC;
   dis[0]=disnm/1000;
   dis[1]=disnm/100;dis[1]=dis[1]%10;
   dis[2]=disnm/10;dis[2]=dis[2]%10;
   dis[3]=disnm%10;
   
   display();
   }
  }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -