51单片机方波发生器(LCD显示)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TR0=1;//打开定时器
TH1=(65536-500)/256;//定时器设置,每隔100微秒发起一次中断。
TL1=(65536-500)%256;
ET1=1;//开T1溢出中断
EA=1;//开总中断
TR1=1;//等待T1溢出中断
for(;;);
}
void time1() interrupt 3//T1溢出中断服务程序
a[i]=a[i]+'0';
for(i=0; a[i]=='0' && i<=3; i++);
for(j=5-n; j<i; j++) //填充空格
{ *str=' '; str++; }
for(; i<5; i++)
{ *str=a[i]; str++; } //加入有效的数字
*str='\0';
#define LCD_CLEAR_SCREEN0x01 //清屏
#define LCD_HOMING0x02 //光标返回原点
void LCD_Write(bit style, unsigned char input)
{
LcdEn=0;
LcdRs=style;
LcdRw=0;_nop_();
DBPort=input;_nop_();//注意顺序
void LCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示,无光标
}
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
main()
{
unsigned int Count = 0;
LCD_Initial();
GotoXY(0,0);
Print("Frequency 1000Hz");
LCD_Write(LCD_COMMAND,0x10|direction);
if(object==LCD_SCREEN)
LCD_Write(LCD_COMMAND,0x18|direction);
}
*/
//初始化LCD************************************************************
{
unsigned char a[5]; char i, j;
a[0]=(t/10000)%10; //取得整数值到数组
a[1]=(t/1000)%10;
a[2]=(t/100)%10;
a[3]=(t/10)%10;
a[4]=(t/1)%10;
for(i=0; i<5; i++) //转成ASCII码
for(i=0; i<8; i++)
LCD_Write(LCD_DATA,user[i]);
}
*/
//************************************************************************
#endif
void fangbo()
{Hale Waihona Puke Baidu
TMOD=0x10;//模式设置,000000110,可见采用的是定时器1,工作与模式1(M1=0,M0=1)。
GotoXY(0,1);
Print("Period 1000uS");
while(1)
{
fangbo();
Delay1ms(100);
}
}
#include<reg51.h>
#define uint unsigned int
#ifndef LCD_CHAR_1602_2005_4_9
#define LCD_CHAR_1602_2005_4_9
#include <intrins.h>
sbit pwm=P1^0;
sbit LcdRs= P2^0;
void GotoXY(unsigned char x, unsigned char y)
{
if(y==0)
LCD_Write(LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write(LCD_COMMAND,0x80|(x-0x40));
}
void Print(unsigned char *str)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
//设置输入模式************************************************************
#define LCD_AC_UP0x02
#define LCD_AC_DOWN0x00 // default
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增,画面不动
}
//************************************************************************
sbit LcdRw= P2^1;
sbit LcdEn= P2^2;
sfr DBPort= 0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
//内部等待函数**************************************************************************
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
/*
void LCD_LoadChar(unsigned char user[8], unsigned char place)
{
unsigned char i;
LCD_Write(LCD_COMMAND,0x40|(place*8));
#define LCD_MOVE0x01 //画面可平移
#define LCD_NO_MOVE0x00 //default
void LCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
//移动光标或屏幕************************************************************
unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1;_nop_();
LcdEn=1;_nop_();
//while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
//可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
//实际硬件时打开此语句
LcdEn=0;
return DBPort;
}
//向LCD写入命令或数据************************************************************
#define LCD_COMMAND0 // Command
#define LCD_DATA1 // Data
LcdEn=1;_nop_();//注意顺序
LcdEn=0;_nop_();
LCD_Wait();
}
//设置显示模式************************************************************
#define LCD_SHOW0x04 //显示开
#define LCD_HIDE0x00 //显示关
{TH1=(655536-500)/256;//T1重新赋值
TL1=(65536-500)%256;
pwm=!pwm;//输出取反
}
unsigned char TempBuffer[10];
void IntToStr(unsigned int t, unsigned char *str, unsigned char n)
#define LCD_CURSOR0x02//显示光标
#define LCD_NO_CURSOR0x00 //无光标
#define LCD_FLASH0x01 //光标闪动
#define LCD_NO_FLASH0x00 //光标不闪动
void LCD_SetDisplay(unsigned char DisplayMode)
/*
#define LCD_CURSOR0x02
#define LCD_SCREEN0x08
#define LCD_LEFT0x00
#define LCD_RIGHT0x04
void LCD_Move(unsigned char object, unsigned char direction)
{
if(object==LCD_CURSOR)
相关文档
最新文档