|
做的單片機設(shè)計,分享給大家
代碼參考了一下網(wǎng)上的資料加以改進(jìn)。
原理圖是用proteus畫的,
實物圖也在下面。
實現(xiàn)功能有
顯示屏顯示小燈泡亮度的數(shù)據(jù);
發(fā)帖1.jpg (3.7 MB, 下載次數(shù): 76)
下載附件
實物圖1
2021-7-12 15:55 上傳
發(fā)帖2.jpg (3.59 MB, 下載次數(shù): 69)
下載附件
實物圖2
2021-7-12 15:55 上傳
發(fā)帖.png (33.93 KB, 下載次數(shù): 74)
下載附件
仿真圖
2021-7-12 15:54 上傳
單片機源程序如下:
- #include<reg51.h>
- #define TH0_TL0 (65536-1000)
- unsigned char count0=100; //低電平的占空比
- unsigned char count1=0; //高電平的占空比
- unsigned char IrValue[2];
- sbit PWM=P1^0; //PWM輸出
- unsigned char Time_delay;
- /************函數(shù)聲明**************/
- void Delay (unsigned char x); //延時程序
- void Motor_LED(void); //亮度
- void Timer0_init (void); //定時器T0中斷 ;若與紅外程序建立,避免沖突,改為定時器中斷T1
- /****************延時處理**********************/
- void Delay (unsigned char x)
- {
- Time_delay=x;
- while (Time_delay!=0); //等待中斷,PWM輸出時間間隔
- }
- /*******按鍵處理加pwm占空比**********/
- void Motor_LED (void)
- {
- if (IrValue[2]==0x16) //按下"0"
- {
- count0=20;
- }
- if(IrValue[2]==0x0c) //按下"1"
- {
- count0=50;
- }
- if(IrValue[2]==0x18) //按下"2"
- {
- count0=80;
- }
- }
- /***********定時器0初始化***********/
- void Timer0_init(void)
- {
- TMOD=0x01;//定時器0工作于方式1
- //TH0=TH0_TL0/256;
- //TL0=TH0_TL0%256;
- TR0=1;
- ET0=1;
- EA=1;
- }
- /*********主函數(shù)********************/
- void main(void)
- {
- Timer0_init();
- while(1)
- {
- Motor_LED();
- }
- }
- /**************定時0中斷處理******************/
- void Timer0_int(void) interrupt 1 using 1
- {
- TR0=0; //設(shè)置定時器初值期間,關(guān)閉定時器
- //TL0=TH0_TL0%256;
- //TH0=TH0_TL0/256;
- if(Time_delay!=0) //延時函數(shù)用
- {
- Time_delay--;
- PWM=0;
- if(++count1<count0)
- {
- PWM=1;
- }
- else PWM=0;
- if(count1>=100)
- {
- count1=0;
- }
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|