|
|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
dsq.png (25.64 KB, 下載次數(shù): 30)
下載附件
2019-12-3 22:53 上傳
單片機(jī)源程序如下:
- #include "reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- uchar COUNT100,PWMCOUNT;
- /*LCD 端口定義*/
- sbit RS=P3^7;
- sbit RW=P3^6;
- sbit E=P3^5;
- sbit PWM=P1^0;
- sbit K1=P3^0;//加1
- sbit K2=P3^1;//減1
- sfr LCDData=0x80;//0x80--P0,0X90--P1,0xa0--P2,0xb0--P3
- /************液晶驅(qū)動(dòng)程序********************/
- /*延時(shí)函數(shù) delay*/
- void delay(uint i)
- {
- while(i--);
- }
- /*******液晶驅(qū)動(dòng)函數(shù)*******/
- void write_instruction(uchar x) //字節(jié)寫入
- {
- delay(1000);
- E=0;
- RW=0;
- RS=0;
- LCDData=x;
- E=1;
- delay(20);
- E=0;
- }
- void write_data(uchar x) //數(shù)據(jù)寫入
- {
- delay(1000);
- E=0;
- RW=0;
- RS=1;
- E=1;
- LCDData=x;
- E=0;
- }
- void cla(void) //清屏
- {
- write_instruction(0x01);
- }
- void initlcd(void) //初始化
- {
- write_instruction(0x38); //顯示模式
- delay(200);
- write_instruction(0x0c); //設(shè)置開顯示,不顯示光標(biāo)
- delay(200);
- write_instruction(0x06); //寫一個(gè)字符后地址指針加一
- delay(200);
- cla();
- // delay(200);
- }
- void write_string(uchar x,uchar *p) //字符串寫入
- {
- write_instruction(x);
- while(*p!=0x00)
- {
- write_data(*p);
- p++;
- if(x++==0x8f)
- {
- write_instruction(0xc0);
- }
- }
- }
- /************液晶驅(qū)動(dòng)程序結(jié)束***********************/
- void DISPPWM(uchar add,uchar p)
- {
- write_instruction(add);
- write_data(p/100+0x30);
- write_data(p%100/10+0x30);
- write_data(p%100%10+0x30);
- write_data('%');
- }
- /*******鍵盤驅(qū)動(dòng)程序******************/
- void pwmScanKey()
- {
- if(K1==0)
- {
- while(K1==0);//等待按鍵釋放
- if(PWMCOUNT<100)
- PWMCOUNT=PWMCOUNT+10;
- }
-
- if(K2==0)
- {
- while(K2==0);//等待按鍵釋放
- if(PWMCOUNT>0)
- PWMCOUNT=PWMCOUNT-10;
- }
-
- DISPPWM(0x84, PWMCOUNT);
-
- }
- void main(void)
- {
- initlcd();//初始化液晶
- delay(0xffff);
- COUNT100=0;
- PWMCOUNT=50;
-
- write_string(0x80,"PWM=");
- DISPPWM(0x84, PWMCOUNT);
-
- TMOD=0x01;//設(shè)置定時(shí)器0 方式 1,16 位定時(shí)方式
- EA=1;//打開中斷允許總控制位
- ET0=1;//打開定時(shí)器0 溢出中斷允許位
- TL0=0x66;//定時(shí)器0 的計(jì)數(shù)器賦初值, t=(2^16-a)*12/fosc,fosc=11.059sMHz
- TH0=0xfc;
- TR0=1;//啟動(dòng)定時(shí)器0
- while(1)
- {
- pwmScanKey();
- }
- //等待中斷
-
- }
- void TIME0ISR(void) interrupt 1
- {
- //PWM=0;
- TL0=0x66;
- TH0=0xfc;
- COUNT100++;
- if(COUNT100==100)
- {
- COUNT100=0;
- }
- if(COUNT100<PWMCOUNT)
- {
- PWM=1;
- }
- else
- {
- PWM=0;
- }
- }
復(fù)制代碼
51hei.png (4.59 KB, 下載次數(shù): 28)
下載附件
2019-12-4 01:45 上傳
全部資料51hei下載地址:
占占空比按鍵.zip
(75.82 KB, 下載次數(shù): 31)
2019-12-3 22:56 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|