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

📄 zuopin3.c

📁 这里有很多我自己做的凌阳单片机源程序
💻 C
字号:
//认真研究时序图,按时间顺序操作硬件
//针对HJD162A型号的lcd显示器
//IOA0--rs,IOA1--rw,IOA2--E,IOA8~OA15--DB0~DB7,IOB0--key1,IOB1--key2;
#include<spce061a_chf.h>
#define	Uint	unsigned int
typedef struct
{
	Uint bit0  : 1;
	Uint bit1  : 1;
	Uint bit2  : 1;
	Uint bit3  : 1;
	Uint bit4  : 1;
	Uint bit5  : 1;
	Uint bit6  : 1;
	Uint bit7  : 1;
	Uint bit8  : 1;
	Uint bit9  : 1;
	Uint bit10 : 1;
	Uint bit11 : 1;
	Uint bit12 : 1;
	Uint bit13 : 1;
	Uint bit14 : 1;
	Uint bit15 : 1;
}Bit;

typedef struct
{
	Uint bytel  : 8;
	Uint byteh  : 8;
}Byte;
	
typedef union
{
	Bit bit;
	Byte byte;
	Uint port;
}UNport;


#define PA    			((volatile UNport *)(0x7000))
#define PA_Buffer		((volatile UNport *)(0x7001))
#define PA_Dir   		((volatile UNport *)(0x7002))
#define PA_Attrib   	((volatile UNport *)(0x7003))
#define	PA_Latch   		((volatile UNport *)(0x7004))
#define	PB    			((volatile UNport *)(0x7005))
#define	PB_Buffer   	((volatile UNport *)(0x7006))
#define	PB_Dir   		((volatile UNport *)(0x7007))
#define	PB_Attrib   	((volatile UNport *)(0x7008))
#define	P0_0		PA->bit.bit0
#define	P0_1		PA->bit.bit1
#define	P0_2		PA->bit.bit2
#define	P0_3		PA->bit.bit3
#define	P0_4		PA->bit.bit4
#define	P0_5		PA->bit.bit5
#define	P0_6		PA->bit.bit6
#define	P0_7		PA->bit.bit7
#define	P0_8		PA->bit.bit8
#define	P0_9		PA->bit.bit9
#define	P0_10		PA->bit.bit10
#define	P0_11		PA->bit.bit11
#define	P0_12		PA->bit.bit12
#define	P0_13		PA->bit.bit13
#define	P0_14		PA->bit.bit14
#define	P0_15		PA->bit.bit15
#define	P1_0		PB->bit.bit0
#define	P1_1		PB->bit.bit1
#define	P1_2		PB->bit.bit2
#define	P1_3		PB->bit.bit3
#define	P1_4		PB->bit.bit4
#define	P1_5		PB->bit.bit5
#define	P1_6		PB->bit.bit6
#define	P1_7		PB->bit.bit7
#define	P1_8		PB->bit.bit8
#define	P1_9		PB->bit.bit9
#define	P1_10		PB->bit.bit10
#define	P1_11		PB->bit.bit11
#define	P1_12		PB->bit.bit12
#define	P1_13		PB->bit.bit13
#define	P1_14		PB->bit.bit14
#define	P1_15		PB->bit.bit15
void lcd_init(void);//包括初始化和设置
void write_command(unsigned int);//写命令函数
void write_data(unsigned int);//写数据函数
void check_busy(void);//检测busy信号的函数
void delay15(void);
void delay5(void);
unsigned int a[5]="K=150";
main()
{
	unsigned int data=150;
	unsigned int l,k=5;
	Set_IOB_Dir(0xf0);
	Set_IOB_Attrib(0xf4);
	Set_IOB_Data(0x04);//IOB0~IOB1为键盘的下拉输入,IOB2为EXIT1的悬浮式输入,IOB4~IOB7为控制端口的低电平输出
	
lab:lcd_init();	
	for(l=0;l<k;l++)
	{		
		write_data(a[l]);
	}
	while(1)
	{
		Watchdog_Clear();
		if(P1_0==1)//"+10'
		{
			do
			{
				Watchdog_Clear();
			}while(P1_0==1);//等待按键释放
			if(data<=150)
			{
				data+=10;
				if(data<100)
				{								
					a[2]=data/10+48;
					k=4;			
					
				}
				else
				{
					a[2]='1';
					a[3]=(data-100)/10+48;
					k=5;
				}
			}
			Set_IOB_Data((~((data/10)<<4))&0xf0);//设置A.B.C.D
			goto lab;//有改变的时候才从新显示
		}
		if(P1_1==1)//'-10'
		{
			do
			{
				Watchdog_Clear();
			}while(P1_1==1);//等待按键释放
			if(data!=1)
			{
				data-=10;
				if(data>=100)
				{
					a[3]=(data-100)/10+48;
					k=5;
				}
				else if((data>=10)&(data<100))
				{
					a[2]=data/10+48;
					k=4;
				}
				else
				{
					data=1;
					k=3;
				}
				
			}			
			Set_IOB_Data((~((data/10)<<4))&0xf0);//设置A.B.C.D
			goto lab;//有改变的时候才从新显示
		}		
	}	
}
//初始化函数
void lcd_init(void)
{		
	write_command(0x38);//显示模式的设置		
	write_command(0x08);//显示关闭*/		
	write_command(0x0c);//整体显示,关光标,不闪烁
	write_command(0x06);//显示光标移动设置
	write_command(0x01);	//显示清屏
}
//写命令函数,IOA0~IOA2为控制端口,IOA8~IOA15为数据端口
void write_command(unsigned int command)
{	
	check_busy();
	Set_IOA_Dir(0xff07);
	Set_IOA_Attrib(0xff07);	
	PA->byte.byteh=command;//操作高8位	
	P0_0=0;//rs=0
	P0_1=0;//rw=0
	P0_2=1;//E=1
	asm("nop");		
	P0_2=0;//E=0;//下降沿触发
	asm("nop");	
	
	
}
//写数据函数
void write_data(unsigned int data2)
{
	check_busy();
	Set_IOA_Dir(0xff07);
	Set_IOA_Attrib(0xff07);		
	PA->byte.byteh=data2;//操作高8位	
	P0_0=1;//rs=1	
	P0_1=0;//rw=0
	P0_2=1;//E=1
	asm("nop");	
	P0_2=0;//E=0;//下降沿触发
	asm("nop");	
	
	
}
void check_busy()
{	
	unsigned int c;
	
	Set_IOA_Dir(0x0007);
	Set_IOA_Attrib(0xff07);
	Set_IOA_Data(0xff00);//悬浮式输入	
		
	do
	{
		Watchdog_Clear();		
		P0_0=0;//rs=0
		P0_1=1;//rw=1
		P0_2=1;//E=1	
		c=PA->byte.byteh;//只读出高8位			
		P0_2=0;//E=0;
		asm("nop");		
		c&=0x80;	
	}while(c==0x80);	
}
void delay15()
{
	unsigned int i,j;
	i=2;	
	while(i--)
	{
		j=0x2fff;
		while(j--)
		{
			Watchdog_Clear();
		}
	}
}
void delay5()
{
	unsigned int i,j;
	i=0;		
	while(i--)
	{
		j=0x2fff;
		while(j--)
		{
			Watchdog_Clear();
		}
	}
}

⌨️ 快捷键说明

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