LQB板子常见问题;20240317自制LQB板子问题。

//#include "stc15.h"
//#include <intrins.h>
//#include <stdio.h>
//#include <absacc.h>  
//typedef     unsigned char   u8;
//typedef     unsigned int    u16;
//typedef     unsigned long   u32;

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef unsigned long DWORD;

//u8 cnt;                           //存储PCA计时溢出次数
//u32 count0;                       //记录上一次的捕获值
//u32 count1;                       //记录本次的捕获值
//u32 length;                       //存储信号的时间长度(count1 - count0)
//float dismm;
//#define CCP_S0 0x10                 //P_SW1.4
//#define CCP_S1 0x20                 //P_SW1.5
延时函数,位操作,选择支路573,LED操作刷新,ULN2003刷新,数码管的刷新
//void delay1ms()		//@11.0592MHz
//{
//	unsigned char i, j;
//	_nop_();
//	i = 11;
//	j = 199;
//	do
//	{
//		while (--j);
//	} while (--i);
//}
//void delayms(int n)		//@11.0592MHz
//{
//	unsigned char i, j;
//  int k;
//	for(k=0;k<n;k++)
//	{
//		 delay1ms();
//	}
//}
***************位操作,置1,清0,取反,判断
//u8 bitSet(u8 temp,u8 pos)
//{
//	temp =temp |(1<<pos);
//	return temp;
//}
//u8 bitReset(u8 temp,u8 pos)
//{
//	temp &=~(1<<pos);
//	return temp;
//}

//u8 bitTog(u8 temp,u8 pos)
//{
//  temp =temp ^(1<<pos);
//	return temp;
//}
//u8 bitRead(u8 temp,u8 pos)
//{
//	u8 res;
//  res =(temp>>pos) &0x01;
//	return res;
//}
***************位操作,置1,清0,取反,判断

***************选择573
//#define LEDY 1  
//#define SMGABCY 2
//#define SMGCOMY 3
//#define ULNY 4
//#define NONE 5
//void xz573(u8 x)
//{
//	switch(x)
//	{
//		case LEDY:
//			P2=(P2&0x1F)|0x80;  //Y4  1000 0000
//		break;
//		
//		case SMGABCY:
//			P2=(P2&0x1F)|0xe0;  //Y7  1110 0000
//			break;
//		case SMGCOMY:
//			P2=(P2&0x1F)|0xc0;  //Y6  1100
//			break;
//		case ULNY:
//			P2=(P2&0x1F)|0xa0;  //Y5  1010
//			break;			
//		case NONE:
//			P2=P2&0x1F;
//			break;
//	}
//}

LED___________________---
//#define L1 0
//#define L2 1
//#define L3 2

//u8 u8LED=0xff;

//void LEDonx(u8 i)  //0
//{
//	u8LED = bitReset(u8LED,i);
//}
//void LEDoffx(u8 i)  //0
//{
//	u8LED = bitSet(u8LED,i);
//}

//void LEDtog(u8 i)
//{
//	u8LED =bitTog(u8LED,i);
//}
//void LEDdis(u8 temp)
//{
//	//关闭所有的通道
//	xz573(NONE);
//	//刷新P0数据
//	u8LED=temp;
//	P0=u8LED;
//  xz573(LEDY);
//	xz573(NONE);
//}

*************蜂鸣器继电器
//u8 u8ULN=0x00;

//void JDQonx()  //0
//{
//	u8ULN = bitSet(u8ULN,4);
//}
//void JDQoffx()  //0
//{
//	u8ULN = bitReset(u8ULN,4);
//}

//void FMQonx()  //0
//{
//	u8ULN = bitSet(u8ULN,6);
//}
//void FMQoffx()  //0
//{
//	u8ULN = bitReset(u8ULN,6);
//}
//void ULNdis(u8 temp)
//{
//	//关闭所有的通道
//	xz573(NONE);
//	//刷新P0数据
//	u8ULN=temp;
//	P0=u8ULN;
//  xz573(ULNY);
//	xz573(NONE);
//}
**********************************数码管,定时器动态扫描
位码,段码,显示扫描,定时扫描,字符串翻译到LED8函数;
///*************  本地常量声明    **************/
//u8 code t_display[]={                       //标准字库,共阴极,比赛共阳,取反
   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F
//    0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y
//    0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
//    0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1

//u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  //注意数码管的数据LED8[0]是不是对应TCOM[0]还是TCOM[8]
u8 code T_COM[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};    //位码
///*************  本地变量声明    **************/
//u8  LED8[8];        //显示缓冲
//u8  display_index=0;  //显示位索引
//bit B_1ms;          //1ms标志
//u8  SMGbuf[20];
///********************** 显示扫描函数 ************************/
void DisplayScan(void)
{   
    Send_595(~T_COM[display_index]);                //输出位码
    Send_595(t_display[LED8[display_index]]);   //输出段码

    P_HC595_RCLK = 1;
    P_HC595_RCLK = 0;                           //锁存输出数据
    if(++display_index >= 8)    display_index = 0;  //8位结束回0
}

///********************** 显示扫描函数 ************************/
//void DisplayScan(void)
//{   
//	//位取0,消隐
//		 // XBYTE [0xC000] = 0x00;

//	
//		  xz573(NONE);
//			P0=0x00; 
//	    xz573(SMGCOMY);
//	    xz573(NONE);
//		//位选择
//	 // XBYTE [0xC000] = T_COM[display_index];
//	
//			xz573(NONE);
//			P0=T_COM[display_index]; 
//	    xz573(SMGCOMY);
//	    xz573(NONE);
//	//段码
	XBYTE [0xE000] = LED8[display_index];
//	
//			xz573(NONE);
//			P0=LED8[display_index]; //记得取反
//	    xz573(SMGABCY);
//	    xz573(NONE);
	
//	 //锁存输出数据,这里是8个数码管
//    if(++display_index >= 8)    display_index = 0;  //8位结束回0
//}
//void SMGconv()
//{
//	u8 i=0,j=0,temp=0;
//	while(SMGbuf[i]!=0)
//	{
//		switch(SMGbuf[i])
//		{
//			case '0':temp=~t_display[0];break;
//			case '1':temp=~t_display[1];break;
//			case '2':temp=~t_display[2];break;
//			case '3':temp=~t_display[3];break;
//			case '4':temp=~t_display[4];break;
//			case '5':temp=~t_display[5];break;
//			case '6':temp=~t_display[6];break;
//			case '7':temp=~t_display[7];break;
//			case '8':temp=~t_display[8];break;
//			case '9':temp=~t_display[9];break;
//			case 'A':temp=~0x77;break;
//			case 'B':temp=~0x7C;break;
//		  case 'P':temp=~0x73;break;
//			case '-':temp=~0x40;break;
//			default:temp=0xFF;break;
//		}
//		if(SMGbuf[i+1]=='.')
//		{
//			temp &=0x7f;
//			i++;
//		}
//		i++;
//		
//		LED8[j]=temp;
//		j++;
//	
//	}
//}


***********************按键操作
//int aaa=12;

//int longtime=0;
//u8 longkeyflag=0;

//u8 key10ms=0;
//u8 key10msflag=0;

//u8 keyRead1(void)
//{
//	u8 keyx=0;
//	if(P30==0)keyx=7;
//	else if(P31==0)keyx=6;
//	else if(P32==0)keyx=5;
//	else if(P33==0)keyx=4;
//	return keyx;
//}

//u8 keyRead4(void)   //开发板
//{
//	u8 keyx=0;
//	
//	P44=0;P42=1;P35=1;P34=1;
//	if(P30==0)keyx=7;
//	else if(P31==0)keyx=6;
//	else if(P32==0)keyx=5;
//	else if(P33==0)keyx=4;
//	
//	P44=1;P42=0;P35=1;P34=1;
//	if(P30==0)keyx=11;
//	else if(P31==0)keyx=10;
//	else if(P32==0)keyx=9;
//	else if(P33==0)keyx=8;
//	
//	P44=1;P42=1;P35=0;P34=1;
//	if(P30==0)keyx=15;
//	else if(P31==0)keyx=14;
//	else if(P32==0)keyx=13;
//	else if(P33==0)keyx=12;
//	
//	P44=1;P42=1;P35=1;P34=0;
//	if(P30==0)keyx=19;
//	else if(P31==0)keyx=18;
//	else if(P32==0)keyx=17;
//	else if(P33==0)keyx=16;
//	
//	return keyx;
//}

//u8 keyRead40(void)   //仿真的,没有P4
//{
//	u8 keyx=0;
//	
//	P24=0;P22=1;P35=1;P34=1;
//	if(P30==0)keyx=7;
//	else if(P31==0)keyx=6;
//	else if(P32==0)keyx=5;
//	else if(P33==0)keyx=4;
//	
//	P24=1;P22=0;P35=1;P34=1;
//	if(P30==0)keyx=11;
//	else if(P31==0)keyx=10;
//	else if(P32==0)keyx=9;
//	else if(P33==0)keyx=8;
//	
//	P24=1;P22=1;P35=0;P34=1;
//	if(P30==0)keyx=15;
//	else if(P31==0)keyx=14;
//	else if(P32==0)keyx=13;
//	else if(P33==0)keyx=12;
//	
//	P24=1;P22=1;P35=1;P34=0;
//	if(P30==0)keyx=19;
//	else if(P31==0)keyx=18;
//	else if(P32==0)keyx=17;
//	else if(P33==0)keyx=16;
//	
//	return keyx;
//}


//void KeyProc()
//{
//	u8 keydown;
//	u8 keyup;
//	u8 keyx;
//	u8 keyold;
//	
//	if(key10msflag==1)
//	{
//		key10msflag=0;
//	}
//	else return;
//	keyx=keyRead1();//仿真
//	//keyx=keyRead40();//仿真
//	//	keyx=keyRead4();//开发板
//	keydown = keyx&(keyold^keyx);
//	keyup =~keyx&(keyold^keyx);
//	keyold=keyx;
//	
//	if(keydown)
//	{
//		longtime=0;
		
		if(keydown==7)aaa=aaa+10;
		if(keydown==6)aaa=aaa-10;

		sprintf(SMGbuf,"PPPPPP%2d",(unsigned int)aaa);
		SMGconv();
//	}
//	if(keyup)
//	{
//		if(longkeyflag==0)
//		{
//			if(keyup==7)aaa=aaa+10;
//			if(keyup==6)aaa=aaa-10;

			sprintf(SMGbuf,"PPPPPP%2d",(unsigned int)aaa);
			SMGconv();
//		}
//		else longkeyflag=0;
//	
//		
		sprintf(SMGbuf,"AAAAAA%2d",(unsigned int)keyup);
		SMGconv();
//	}
//	
//	if(keyold &&(longtime>1000))
//	{
//		longtime=0;
//		longkeyflag=1;
//		if(keyold==7)aaa=aaa+1;
//		if(keyold==6)aaa=aaa-1;
//		sprintf(SMGbuf,"BBBBBB%2d",(unsigned int)aaa+20);
//		SMGconv();	
//	}
//	
//}













//float wendu=12.56;
//int sec=12;
//int cnt1ms=0;
///* define constants */
//#define FOSC 11059200L
//#define T1MS (65536-FOSC/12/1000)   //1ms timer calculation method in 12T mode
///********************** Timer0 1ms中断函数 ************************/
//void timer0 (void) interrupt 1
//{
//	TL0 = T1MS;		//仿真软件的传统51单片机需要重新设置定时初值
//	TH0 = T1MS>>8;		//设置定时初值

//   // B_1ms = 1;      //1ms标志
//	
//		cnt1ms++;
//		key10ms++;
//	  longtime++;
//		if(key10ms==10)
//		{
//			key10msflag=1;
//			key10ms=0;
//		}
//			
//		if(cnt1ms==1000) //边界处理
//		{
//			cnt1ms=0;
//	 		sec++;
//			if(sec==59)sec=0;
//			
//			
//		}
//		
//	 if(cnt1ms%300==0) //1ms的倍数
//		{

				wendu+=0.01;
				if(wendu>25.5)
					wendu=5.2;
//		}
//		
//		
//		if(cnt1ms%20==0) //1ms的倍数
//		{
			sprintf(SMGbuf,"PPPPP%03d",(unsigned int)sec);
			SMGconv();
			
				sprintf(SMGbuf,"P-AB%5.2f",wendu);
				SMGconv();
//			
//				KeyProc();//20ms读取一次按键
//		}
//		if(cnt1ms%1==0) //1ms的倍数
//		{
//				DisplayScan();  //1ms扫描显示一位	
//		}

//}
//void Delay125us()		//@11.0592MHz
//{
//	unsigned char i, j;

//	_nop_();
//	_nop_();
//	i = 2;
//	j = 84;
//	do
//	{
//		while (--j);
//	} while (--i);
//}
********************************************************main
//void main()
//{
//	int i;
//	
//	LEDdis(0xff);//开机关闭LED灯
//  ULNdis(0x00);//开机关闭继电器和蜂鸣器

//	sprintf(SMGbuf,"        ");//熄灭数码管
//	SMGconv();

//	AUXR &= 0x7F;		//定时器时钟12T模式
//	//TMOD &= 0xF0;		//开发板设置定时器模式
//	TMOD |= 0x01;		//仿真Proteus设置定时器模式
//  TL0 = T1MS;		//设置定时初值
//	TH0 = T1MS>>8;		//设置定时初值
//	TF0 = 0;		//清除TF0标志
//	TR0 = 1;		//定时器0开始计时

//	ET0=1;//定时器0中断
//	EA=1;//单片机总中断
//	
//	
//	while(1)
//	{
//		for(i=0;i<8;i++)
//		{
//			
//		}

//	}
//	
//}
#include <stc15.h>
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();};
unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char tab[8]={11,11,11,11,11,11,11,11};
unsigned int distance=0;
unsigned int dis;
sbit TX=P1^0;//发送
sbit RX=P1^1;//接收
bit flag_wave=0;
 void Delay12us()		//@11.0592MHz
{
	unsigned char i;

	_nop_();
	_nop_();
	_nop_();
	i = 30;
	while (--i);
}

 
 
void HC_138(unsigned char m)
{
	switch(m)
	{
		case(4):P2|=0X80;P2&=0X9F;break;
		case(5):P2|=0XA0;P2&=0XBF;break;
		case(6):P2|=0XC0;P2&=0XDF;break;
		case(7):P2|=0XE0;P2&=0XFF;break;
	}
}
 
void allinit()
{
	HC_138(4);P0=0xff;
	HC_138(5);P0=0x00;
	HC_138(6);P0=0x00;
	HC_138(7);P0=0xff;
}
 
void time0init()///定时器0 /
{
//	TMOD|=0X01;
//	TH0=(65536-1000)/256;
//	TL0=(65536-1000)%256;
	
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	EA=1;
	TR0=1;
	ET0=1;
}
void time1init()//定时器1
{
	AUXR &= 0xBF;		//定时器时钟12T模式
	TMOD &= 0x0F;		//设置定时器模式
	TF1=0;
	TH1=0;
	TL1=0;
	TR1=0;
}

void display()
{
	static int i=0;
	HC_138(6);
	P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];
	P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];
	P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];
	P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];P0=wei[i];
	HC_138(7);
	P0=duan[tab[i]];	P0=duan[tab[i]];	P0=duan[tab[i]];
	P0=duan[tab[i]];	P0=duan[tab[i]];	P0=duan[tab[i]];
	P0=duan[tab[i]];	P0=duan[tab[i]];	P0=duan[tab[i]];
	P0=duan[tab[i]];	P0=duan[tab[i]];	P0=duan[tab[i]];
	i++;
	if(i==8)i=0;
	
}
void time0() interrupt 1
{
	static int i=0,m=0;
//	TH0=(65535-1000)/256;
//	TL0=(65536-1000)%256;
	
 display();
	m++;
	if(m==500)
	{
		m=0;
		flag_wave=1;
	}
}
 
void send_wave()
{
	unsigned char i=8;
	while(i--)
	{
		TX=1;
			//somenop;somenop;somenop;somenop;somenop;
	Delay12us();
		TX=0;
		//somenop;somenop;somenop;somenop;somenop;
		Delay12us();
	}
}
 
unsigned int get_distance()
{
	TH1=0;
	TL1=0;
	send_wave();
	TR1=1;
	while((RX==1)&(TF1==0));
	TR1=0;
	if(TF1==1)
	{
		distance=999;
		TF1=0;
	}
	if(RX==0)
	{
		//100 1.7
		distance=(((TH1<<8)|TL1)*0.017);
		RX=1;
	}
	return distance;
}
 
void main()
{
	allinit();
	time0init();
	time1init();
	while(1)
	{
		if(flag_wave==1)
		{
			dis=get_distance();
			flag_wave=0;
		}
	  tab[0]=dis/100;
		tab[1]=dis%100/10;
		tab[2]=dis%10;
	}
}


 
 

超声波问题。
数码管问题,不知道为什么,需要消隐,传输数据之后,需要等待多几个毫秒才行,不知道是不是芯片的问题,74HC573芯片,或者是74HC2,74HC138的问题。

导致数据传输不行。不同板子不太一样。奇怪。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值