|
做的單片機(jī)設(shè)計(jì),分享給大家
代碼參考了一下網(wǎng)上的資料加以改進(jìn)。
原理圖是用proteus畫的,
實(shí)物圖也在下面。
實(shí)現(xiàn)功能有
顯示屏顯示小燈泡亮度的數(shù)據(jù);
實(shí)物圖1
實(shí)物圖2
仿真圖
單片機(jī)源程序如下:
- #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); //延時(shí)程序
- void Motor_LED(void); //亮度
- void Timer0_init (void); //定時(shí)器T0中斷 ;若與紅外程序建立,避免沖突,改為定時(shí)器中斷T1
- /****************延時(shí)處理**********************/
- void Delay (unsigned char x)
- {
- Time_delay=x;
- while (Time_delay!=0); //等待中斷,PWM輸出時(shí)間間隔
- }
- /*******按鍵處理加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;
- }
- }
- /***********定時(shí)器0初始化***********/
- void Timer0_init(void)
- {
- TMOD=0x01;//定時(shí)器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();
- }
- }
- /**************定時(shí)0中斷處理******************/
- void Timer0_int(void) interrupt 1 using 1
- {
- TR0=0; //設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器
- //TL0=TH0_TL0%256;
- //TH0=TH0_TL0/256;
- if(Time_delay!=0) //延時(shí)函數(shù)用
- {
- Time_delay--;
- PWM=0;
- if(++count1<count0)
- {
- PWM=1;
- }
- else PWM=0;
- if(count1>=100)
- {
- count1=0;
- }
- }
- }
復(fù)制代碼
|
評(píng)分
-
查看全部評(píng)分
|