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

📄 控制.c

📁 这是采用KeilC51进行编写的单片机程序
💻 C
字号:
 
/****************************************************************
   1   2   3   4 
   5   6   7   8
   star
******************************************************************/
#include "reg52.h"
unsigned int  Volt;
/*unsigned char buff[8]; 
unsigned char num=0;      
*/#define    key_0  0
#define    key_1  1
#define    key_2  2
#define    key_3  3
#define    key_4  4
#define    key_5  5
#define    key_6  6
#define    key_7  7
#define    key_8  8
#define    key_9  9
#define    key_star 0x0a
#define    key_nul  255

unsigned char idata p_led =50;
sbit       P1_4=P1^4;
sbit       P1_5=P1^5;
sbit       P1_6=P1^6;
sbit       P1_7=P1^7;
//
// 按键扫描程序:如果有键值则返回键值,无键值返回 key_nul
//

unsigned char rKey( void )
{
    unsigned char temp= key_nul ;	//无按键值
    P1=0xff ;     // 读键时先对P1口置1
    P1= 0xfe ;     // 将p1.0置0,实现读第一列值    1111 1110
    if ( !P1_4 )
          temp= key_1 ;
    if ( !P1_5 )
          temp= key_5;
    if ( !P1_6 )
          temp= key_star ;
     
//第二行
    P1= 0xfd ;    // 将p1.1置0,实现读第二列值    1111 1101
    if ( !P1_4 )
          temp= key_2 ;
    if ( !P1_5 )
          temp= key_6 ;
 
//第三行
    P1= 0xfb ;    // 将p1.2置0,实现读第三列值      1111 1011
	if ( !P1_4 )
          temp= key_3 ;
    if ( !P1_5 )
          temp= key_7 ;
         
//第四行
    P1= 0xf7 ;    // 将p1.3置0,实现读第四列值         1111 0111
    if ( !P1_4 )
          temp= key_4 ;
    if ( !P1_5 )
          temp= key_8 ;
     
    return( temp ) ;
}

//
//  响应用户按的一个键, 返回一个正确的键值
//
unsigned char read_key( void )     //  aa= getch() ;
{
     unsigned char i;
     unsigned int j;
     for( ; rKey( )!= key_nul ; );     // 等待用户松开按键 即无返回键值
     for( j= 0; j< 1000; j++ ) ;      // 延时,起到消抖作用
     for( ; rKey( )!= key_nul ; );     // 等待用户松开按键 即无返回键值

loop:
     for ( ; rKey( )== key_nul; );     // 等待用户重新按键
     i=rKey( );                       // 第一次读入按键值
     for ( j= 0; j< 1000; j++ );      // 延时,起到消抖作用
                         // 和第二次读回来比较,如果相等,返回键值,如果不等继续等键值
     if ( i== rKey())
	 {
	 	return ( i ) ;
	 }
      
     else
     {
     	goto loop;
     }
}

void Delay( void )
{
	unsigned int i;
	for( i=0; i<1000 ;i++ ) ;
}


/*void	INT() interrupt	4	//采用中断方式实现与PC通信
{	
	unsigned char i;
	EA=0;               	//关中断
	if(RI)					//判断何种中断,RI或TI
	{
		
		RI=0;				//清接收标志位
		buff[num]=SBUF;			//接收到的数据送P0口,数码管显示
		num++;
		if(num>7)
		{
			num=0;

		}
	}
	else					//发送完成标志位清0
	{
		TI=0;
	}
	EA=1;					//开中断
}
void	send()
{
	  EA=0;
      SBUF=rKey();
	  while(!TI);
	  TI=0;
	  num=0;
	  EA=1;
}

*/
#define  DIS_NULL   0x0a
char code LEDCODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00} ;
unsigned char DisBuff[4]={9,8,7,6},LedP=0;
unsigned char num[8]={0x89,0x73,0xf3,0x81,0xca,0x91,0xb3,0x6d};
//unsigned char buff[8]={0x99,0x82,0x88,0x99,0xd1,0xb3,0x73,0x55};
// 每2ms执行一回中断的中断程序, 实现LED数码管动态显示

void timero(void) interrupt 1    // time0中断 中断号为 1
{        
	unsigned char temp ;
	TL0= ( 65536-1000 ) % 256 ;
	TH0= ( 65536-1000) / 256 ;
	P2= P2 & 0xf0 ;		// P2 同 1111 0000 与 
	P2= P2 | 1<<LedP ; 		//0000 0001 | 0000 0000
    if(LedP==1&&DisBuff[LedP]!=DIS_NULL)
		P0= LEDCODE[DisBuff[LedP]]+0x80;
	else 
		P0= LEDCODE[DisBuff[LedP]] ;
	LedP++ ;
	if( LedP >=4 ) LedP= 0;
}


void PrintT( void )
{   
    Volt=num[rKey()-1];
	Volt=Volt*50;
	Volt=Volt/255; 
	DisBuff[3]= read_key(); 
	DisBuff[0]= Volt%10;
	DisBuff[1]= Volt/10;
}
void  main( void )
{
	unsigned long DispNum= 0 ;
	unsigned char i ;
	TMOD= 0x01 ;		// 模式配置,time0 16位计数方式
	TR0= 1 ;			// time0 计数开始
	ET0= 1 ;			// 允许产生中断
	TL0= ( 65536-2000 ) % 256 ;
	TH0= ( 65536-2000 ) / 256 ;// 总中断有效
	
	/*TMOD^= 0x20;			//使用T1计数器
	TL1 = 0xfd;				//9600bps
	TH1 = 0xfd;
	SCON = 0x50;			//允许接收
	PCON = 0x00;*/

	ES=1;					//开串口中断/			
	EA=1;					//开总中断
	TR1 = 1;	
	for( i= 0; i< 4; i++ ) DisBuff[i]= DIS_NULL;  
	for( ; ; )
	{   
		ES=1;					//开串口中断/			
		EA=1;					//开总中断
		TR0= 1 ;			// time0 计数开始
		ET0= 1 ;			// 允许产生中断
		TR1 = 1;	
		REN=1;
		if(rKey( )!=key_nul)
		send( );
        PrintT( ) ;

	}
}


⌨️ 快捷键说明

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