久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
做的單片機調速呼吸燈效果,調的時候速度不會變化,斷電重新上電才能看到變化
[打印本頁]
作者:
hanxingyijian
時間:
2023-12-18 19:13
標題:
做的單片機調速呼吸燈效果,調的時候速度不會變化,斷電重新上電才能看到變化
調速時看不到快慢變化,重新上電才能看到。怎樣改才能實現實時變化?
#include <reg51.h>
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uint zkb,pwm,time;
//bit max=0;
uchar RunMode;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr WDT_CONTR = 0xc1;
sfr IE2 = 0xaf; //中斷使能寄存器2
sfr AUXR = 0x8e; //輔助寄存器
sfr T2H = 0xD6; //定時器2高8位
sfr T2L = 0xD7; //定時器2低8位
sfr IAP_DATA = 0xC2;
sfr IAP_ADDRH = 0xC3;
sfr IAP_ADDRL = 0xC4;
sfr IAP_CMD = 0xC5;
sfr IAP_TRIG = 0xC6;
sfr IAP_CONTR = 0xC7;
sfr IAP_TPS = 0xF5;
unsigned char RunMode;
void cc(uint addr);
void xcx(uint addr,uchar dat);
uchar dcx(uint addr);
void Q0();
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數:擦除某一扇區(每個扇區512字節)
入口:addr = 某一扇區首地址
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void cc(uint addr)// 0x83(晶振<5M) 0x82(晶振<10M) 0x81(晶振<20M) 0x80(晶振<40M)
{
IAP_CONTR = 0x81;
IAP_TPS = 12;
IAP_CMD = 3;
IAP_ADDRL = addr;
IAP_ADDRH = addr>>8;
EA =0;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
Q0();
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數:寫一字節
入口:addr = 扇區單元地址 , dat = 待寫入數據
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void xcx(uint addr,uchar dat)
{
IAP_CONTR = 0x81;
IAP_TPS = 12;
IAP_CMD = 2;
IAP_ADDRL = addr;
IAP_ADDRH = addr>>8;
IAP_DATA = dat;
EA = 0;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
Q0(); // 關閉ISP/IAP
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數:讀一字節
入口:addr = 扇區單元地址
出口:dat = 讀出的數據
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
uchar dcx(uint addr)
{
uchar dat;
IAP_CONTR = 0x81;
IAP_TPS = 12;
IAP_CMD = 1; // 用戶可以對"Data Flash/EEPROM區"進行字節讀
IAP_ADDRL = addr;
IAP_ADDRH = addr>>8;
EA = 0;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
dat = IAP_DATA; // 取出數據
Q0(); // 關閉ISP/IAP
return dat;
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
函數:關閉ISP/IAP操作
┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void Q0()
{
IAP_CONTR = 0; // 關閉IAP功能
IAP_CMD = 0; // 待機模式,無ISP操作
IAP_TRIG = 0;
IAP_ADDRH=0x80;
IAP_ADDRL=0;
EA =1; // 關閉IAP功能, 清與ISP有關的特殊功能寄存器
}
//**********************************System Fuction*************************************************
void Delay1ms( uint count)
{
uint i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}
uchar GetKey(void)
{
uchar KeyTemp,CheckValue,Key = 0x00;
CheckValue = P1&0x43;
if(CheckValue==0x43)
return 0x00;
Delay1ms(10);
KeyTemp = P1&0x43;
if(KeyTemp==CheckValue)
return 0x00;
if(!(CheckValue&0x01))
Key|=0x01;
if(!(CheckValue&0x02))
Key|=0x02;
if(!(CheckValue&0x40))
Key|=0x40;
return Key;
}
uint TimerCount ,SystemSpeed,SystemSpeedIndex,outtime;
void InitialTimer0(void) //100us@11.0592MHZ
{
AUXR &= 0x3F; //定時器時鐘12T模式
TMOD = 0x00;
TL0 = (65536-1000)%256; //設置定時初始值
TH0 = (65536-1000)/256; //設置定時初始值
TL1 = (65536-time)%256; //設置定時初始值
TH1 = (65536-time)/256;
TR0 = 1;
TR1=1;
ET0=1;
ET1=1;
EA=1;
}
uint code SpeedCode[]={100,150,200,250,300,400,500,600,
700,1000};
uint code pwmtime[]={10,15,20,25,30,35,40,45,50,55};
void pwmspeed(uchar speed1)
{
time=pwmtime[speed1];
}
void SetSpeed( uchar Speed)
{
SystemSpeed =SpeedCode[Speed];
}
void LEDShow( uint LEDStatus)
{
P3 = (LEDStatus&0xFF);
}
void InitialCPU(void)
{
TimerCount = 0;
RunMode = dcx(0x0000);
SystemSpeedIndex =dcx(0x0200);
//SystemSpeedIndex = 0;
if(SystemSpeedIndex > 10)
{
SystemSpeedIndex =1;
}
P1 = 0xFF;
P3 = 0xFF;
Delay1ms(500);
P1 = 0xFF;
P3 = 0xFF;
SetSpeed(SystemSpeedIndex);
pwmspeed(SystemSpeedIndex);
}
unsigned int LEDIndex = 0;
bit LEDDirection = 1,LEDFlag = 1;
//Mode 0
void Mode_0(void)
{
if(LEDDirection)
LEDShow(~(0x0F<<LEDIndex));
else
LEDShow(~(0xF0>>LEDIndex));
if(LEDIndex==7)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+4)%8;
}
void Mode_1(void)
{
LEDShow(~(0x01<<LEDIndex));
LEDIndex = (LEDIndex+1)%3;
}
void Mode_2(void)
{
LEDShow(0xff<<LEDIndex);
LEDIndex = (LEDIndex+1)%4;
}
void Mode_3(void)
{
if(pwm>zkb)
{
LEDShow(LEDIndex=0xff);
}
else
{
LEDShow(LEDIndex=0x00);
}
}
void TimerEventRun(void)
{
if(RunMode==0x00)
{
Mode_0();
}
else if(RunMode ==0x01)
{
Mode_1();
}
else if(RunMode ==0x02)
{
Mode_2();
}
}
void Timer0(void) interrupt 1 using 1
{
if(++TimerCount>=SystemSpeed)
{
TimerCount = 0;
TimerEventRun();
}
}
void Timer1(void) interrupt 3 using 1
{
static uchar max=0;
pwm++;
if(pwm>200)
{
pwm=0; //周期歸零
if(max==0){zkb++;} //MAX占空比漸加漸減標志位 默認max為0.每一周期占空比漸加
if(max==1){zkb--;} //MAX占空比漸加漸減標志位 如果max為1.每一周期占空比漸減
if(zkb==200){max=1;} //如果占空比的值為100 標志位MAX置為1.漸減
if(zkb==0){max=0;} //如果占空比的值為0 標志位MAX置為0.漸加
}
if(RunMode ==0x03)
{
Mode_3();
}
}
unsigned char MusicIndex = 0;
void KeyDispose(unsigned char Key)
{
if(Key&0x01)
{
LEDDirection = 1;
LEDIndex = 0;
LEDFlag = 1;
RunMode = (RunMode+1)%4;
/*if( RunMode == 4);
{
SetSpeed(SystemSpeedIndex);
}*/
cc(0x0000);
xcx(0x0000, RunMode);
}
if(Key&0x02)
{
if(SystemSpeedIndex>0)
{
--SystemSpeedIndex;
pwmspeed(SystemSpeedIndex);
SetSpeed(SystemSpeedIndex);
cc(0x0200);
xcx(0x0200,SystemSpeedIndex);
}
}
if(Key&0x40)
{
if(SystemSpeedIndex<9)
{
++SystemSpeedIndex;
SetSpeed(SystemSpeedIndex);
pwmspeed(SystemSpeedIndex);
cc(0x0200);
xcx(0x0200,SystemSpeedIndex);
}
}
}
//***********************************************************************************
main()
{
unsigned char Key;
P1M0 = 0x00;
P1M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
// WDT_CONTR = 0x27;
InitialCPU();
InitialTimer0();
while(1)
{
//WDT_CONTR = 0x37;
Key = GetKey();
if(Key!=0x00)
{
KeyDispose(Key);
}
}
}
作者:
lkc8210
時間:
2023-12-19 08:59
2023-12-19_085918.png
(3.67 KB, 下載次數: 10)
下載附件
2023-12-19 08:59 上傳
作者:
hanxingyijian
時間:
2023-12-19 20:38
lkc8210 發表于 2023-12-19 08:59
非常感謝您的幫助!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久99精品久久久
|
日韩中文字幕在线视频观看
|
久久久黄色
|
一区免费看
|
成人在线视频免费播放
|
精品综合久久
|
久久久久久蜜桃一区二区
|
精品美女在线观看
|
日韩一区二区三区在线视频
|
久久久久久中文字幕
|
亚洲精品久久区二区三区蜜桃臀
|
97精品国产
|
最新国产精品视频
|
亚洲精品日韩在线
|
91就要激情
|
青青草一区二区三区
|
久久九七
|
精品一区二区三区中文字幕
|
国产精品国产三级国产aⅴ中文
|
中日韩毛片
|
成人免费在线电影
|
伊人精品国产
|
黄色免费观看网站
|
暖暖成人免费视频
|
亚洲国产aⅴ成人精品无吗 国产精品永久在线观看
|
国产伦精品一区二区三区照片91
|
免费在线看黄视频
|
久久久人成影片一区二区三区
|
久久国产亚洲精品
|
日韩视频在线一区二区
|
欧美精品一区二区三区在线
|
日韩色图视频
|
蜜臀91视频
|
天天综合日日夜夜
|
极品粉嫩国产48尤物在线播放
|
成年人在线观看视频
|
国产一区二区三区欧美
|
亚洲精品中文在线
|
日本天天色
|
国产美女自拍视频
|
91就要激情
|