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

📄 复件 main.c

📁 用PIC单片机实现64位整数的运算,在控制算法中经常要用到
💻 C
字号:
#include	<pic.h>
#define LCD_RS RD1
#define LCD_RW RD2
#define LCD_E RD3
#define LCD_DATA PORTD


#define BAND1 RE0
#define BAND2 RE1
unsigned long temp;//用来存放临时输入数据
const unsigned long cons[]={100000000,10000000,1000000,100000,10000,1000,100,10};
__CONFIG(HS & WDTDIS & PWRTEN & BORDIS & LVPDIS & WRTEN & UNPROTECT);

void wait10()//延时10ms
{
unsigned int d=250;
while(--d){;}
}
void wait2s()//延时2s
{
unsigned long d=280000;
while(--d){;}
}
LCD_BUSY()//显示屏忙检测
{
PORTD=0;
TRISD=0xF0;
LCD_RS=0;
LCD_RW=1;
LCD_E=1;
do{;}
while(RD7!=0);
}

void WR_LCD(char cmd,char data)//显示屏写命令或数据
{
char tmp;
LCD_BUSY();
tmp=data;
TRISD=0x00;
PORTD=0;
LCD_DATA=data&0B11110000;
if(cmd=='D')LCD_RS=1;
LCD_E=1;
NOP();
LCD_E=0;
tmp=tmp<<4;
LCD_DATA=tmp&0B11110000;
if(cmd=='D')LCD_RS=1;
LCD_E=1;
NOP();
LCD_E=0;
}

LCD_INIT()//显示屏初始化
{
TRISD=0x00;
WR_LCD(' ',0x38);
wait10();
WR_LCD(' ',0x38);
wait10();
WR_LCD(' ',0x38);
wait10();
WR_LCD(' ',0B00101100);//四位数据、两行显示、5*10点阵
WR_LCD(' ',0B00000001);//清屏
WR_LCD(' ',0x08);//关显示
//WR_LCD(' ',0B00000110);//读写一个字符后,地址指针加1,整屏不动
//WR_LCD(' ',0B00000111);//读写一个字符后,地址指针加1,整屏左移
WR_LCD(' ',0B00001100);//开显示
//WR_LCD(' ',0B11010000);//显示光标移到第二行第16字符
//WR_LCD(' ',0B10000000);//显示光标移到第一行第1字符
}

void display(unsigned long tt)
{
unsigned char i,j;
unsigned char disp_hr[9]="         ";
for(i=0;i<8;i++)
	{
		if(tt>=cons[i])
		{
		tt=tt-cons[i];
		disp_hr[i]=0x31;
		for(j=i+1;j<9;j++)disp_hr[j]=0x30;
		}
		while(tt>=cons[i])
		{
		tt=tt-cons[i];
		disp_hr[i]=disp_hr[i]+1;
		}
	}
disp_hr[i]=0x30+tt;
WR_LCD('C',0B11000000);//显示光标移到第二行第1字符

for(i=0;i<9;i++)
{
WR_LCD('D',disp_hr[i]);
}
}

//主程序*/
void main()
{
unsigned int k;
TRISA=0x00;
TRISB=0xFF;
TRISC=0x00;
TRISE=0x0F;
RBPU=0;
PORTB=0;
//LCD_INIT();
temp=8000;
display(temp);
wait10();
while(1)
{
	if((RB1==0)&&(RB2==1))
	{
	wait10();
		if((RB1==0)&&(RB2==1))
		{
		for(k=1000;k>0;k--)
			{
			if((RB2==0)&&(RB1==0))
				{
				wait10();
				if((RB2==0)&&(RB1==0))
					{
					temp=temp+1000;
					break;
					}
				}
			if((RB2==1)&&(RB1==1))
				{
				wait10();
				if((RB2==1)&&(RB1==1))
					{
					temp=temp-1000;
					break;
					}
				}			
			}
		}
	}
display(temp);
}
}

void interrupt itrt(void)
{
if(T0IE &&T0IF)
	{
	T0IF=0;
	}
if(TMR1IE &&TMR1IF)
	{
	TMR1IF=0;
	}
}

⌨️ 快捷键说明

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