各種找資料,花了三天時間弄出來的東西,有源程序
單片機頻率計仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (32.46 KB, 下載次數: 30)
下載附件
2018-6-11 05:06 上傳
0.png (50.62 KB, 下載次數: 27)
下載附件
2018-6-11 05:07 上傳
帶詳細注釋的單片機源碼如下:
- #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)
2018-6-10 18:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|