各种找资料,花了三天时间弄出来的东西,有源程序
单片机频率计仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
带详细注释的单片机源码如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit RS=P2^0; //数据/命令寄存器选择控制端
- sbit RW=P2^1; //读写控制端
- sbit E=P2^2; //使能控制端
- sfr LCD=0x90; //P1口作为总线端口
- sbit BF=LCD^7; //就绪线BF,低电平有效
- void lcd_cmd(uchar cmd)
- { LCD=cmd;
- RS=0;//选择命令寄存器
- RW=0;//执行写数据操作
- E=1;
- _nop_();//延时
- E=0; //使能信号有效
- while(1)
- {LCD=0xff;//总线变高
- RS=0; //选择命令寄存器
- RW=1;//读操作
- E=0; //使能信号有效
- _nop_();
- E=1; //撤销使能信号
- if(BF==0)break; //如果就绪,返回
- }
- }
-
- void lcd_dat(uchar dat)
- {
- LCD=dat;//显示数据总线
- RS=1;//选择数据寄存器
- RW=0;//执行写数据操作
- E=1;
- _nop_();//延时
- E=0; //使能信号有效
- while(1)
- {LCD=0xff;//总线变高
- RS=0; //选择命令寄存器
- RW=1;//读操作
- E=0; //使能信号有效
- _nop_();
- E=1; //撤销使能信号
- if(BF==0)break; //如果就绪,返回
- dat=LCD;
- }
- }
- void init_lcd(void)//初始化液晶屏
- {
- lcd_cmd(0x01); //清屏幕
- lcd_cmd(0x3c); //设置双行显示,5*10点阵
- lcd_cmd(0x0c); //开显示,关闭光标
- }
- void disp_str(uchar x,uchar y,uchar *p) //在x行、y列显示字符串p
- {
- if(x==0) //如果在第一行显示
- lcd_cmd(0x80+y); //设置写入地址
- else //如果在第二行显示
- lcd_cmd(0xc0+y);//设置写入地址
- while(*p) //将字符依次发送到液晶屏
- lcd_dat(*p++);
- }
复制代码
全部资料51hei下载地址:
pinlvji1.rar
(45.24 KB, 下载次数: 110)
|