国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
51單片機自動窗簾電機控制程序與Proteus仿真圖
[打印本頁]
作者:
eng
時間:
2021-6-13 03:27
標題:
51單片機自動窗簾電機控制程序與Proteus仿真圖
單片機控制電機轉速運用PWM
仿真原理圖如下(proteus仿真工程文件和單片機程序完整源碼可到本帖附件中下載)
1.png
(244.85 KB)
下載附件
2021-6-13 03:05 上傳
部分源碼:
/*********************************************************/
// 向DS1302寫入時間數據
/*********************************************************/
void DS1302_Write_Time()
{
uchar i;
uchar temp1;
uchar temp2;
for(i=0;i<7;i++) // 十進制轉BCD碼
{
temp1=(TimeBuff[i]/10)<<4;
temp2=TimeBuff[i]%10;
TimeBuff[i]=temp1+temp2;
}
DS1302_Write_Byte(0x8E,0x00); // 關閉寫保護
DS1302_Write_Byte(0x80,0x80); // 暫停時鐘
DS1302_Write_Byte(0x8C,TimeBuff[0]); // 年
DS1302_Write_Byte(0x88,TimeBuff[1]); // 月
DS1302_Write_Byte(0x86,TimeBuff[2]); // 日
DS1302_Write_Byte(0x8A,TimeBuff[3]); // 星期
DS1302_Write_Byte(0x84,TimeBuff[4]); // 時
DS1302_Write_Byte(0x82,TimeBuff[5]); // 分
DS1302_Write_Byte(0x80,TimeBuff[6]); // 秒
DS1302_Write_Byte(0x80,TimeBuff[6]&0x7F); // 運行時鐘
DS1302_Write_Byte(0x8E,0x80); // 打開寫保護
}
/*********************************************************/
// 從DS1302讀出時間數據
/*********************************************************/
void DS1302_Read_Time()
{
uchar i;
TimeBuff[0]=DS1302_Read_Byte(0x8D); // 年
TimeBuff[1]=DS1302_Read_Byte(0x89); // 月
TimeBuff[2]=DS1302_Read_Byte(0x87); // 日
TimeBuff[3]=DS1302_Read_Byte(0x8B); // 星期
TimeBuff[4]=DS1302_Read_Byte(0x85); // 時
TimeBuff[5]=DS1302_Read_Byte(0x83); // 分
TimeBuff[6]=(DS1302_Read_Byte(0x81))&0x7F; // 秒
for(i=0;i<7;i++) // BCD轉十進制
{
TimeBuff[i]=(TimeBuff[i]/16)*10+TimeBuff[i]%16;
}
}
/*********************************************************/
// ADC0832的時鐘脈沖
/*********************************************************/
void WavePlus()
{
_nop_();
ADC_CLK = 1;
_nop_();
ADC_CLK = 0;
}
/*********************************************************/
// 獲取指定通道的A/D轉換結果
/*********************************************************/
uchar Get_ADC0832()
{
uchar i;
uchar dat1=0;
uchar dat2=0;
ADC_CLK = 0; // 電平初始化
ADC_DAT = 1;
_nop_();
ADC_CS = 0;
WavePlus(); // 起始信號
ADC_DAT = 1;
WavePlus(); // 通道選擇的第一位
ADC_DAT = 0;
WavePlus(); // 通道選擇的第二位
ADC_DAT = 1;
for(i=0;i<8;i++) // 第一次讀取
{
dat1<<=1;
WavePlus();
if(ADC_DAT)
dat1=dat1|0x01;
else
dat1=dat1|0x00;
}
for(i=0;i<8;i++) // 第二次讀取
{
dat2>>= 1;
if(ADC_DAT)
dat2=dat2|0x80;
else
dat2=dat2|0x00;
WavePlus();
}
_nop_(); // 結束此次傳輸
ADC_DAT = 1;
ADC_CLK = 1;
ADC_CS = 1;
if(dat1==dat2) // 返回采集結果
return dat1;
else
return 0;
}
/*********************************************************/
// 按鍵掃描(設置當前時間)
/*********************************************************/
void KeyScanf1()
{
if(KeySet_P==0)
{
LcdGotoXY(0,13); // 顯示秒鐘的冒號
LcdWriteData(':');
LcdWriteCmd(0x0f); // 啟動光標閃爍
LcdGotoXY(0,3); // 定位光標到年份閃爍
DelayMs(10); // 延時等待,消除按鍵按下的抖動
while(!KeySet_P); // 等待按鍵釋放
DelayMs(10); // 延時等待,消除按鍵松開的抖動
/* 調整年份 */
while(1)
{
if(KeyDown_P==0) // 如果減按鍵被下去
{
if(TimeBuff[0]>0) // 判斷年份是否大于0
TimeBuff[0]--; // 是的話就減去1
LcdGotoXY(0,2); // 光標定位到年份的位置
LcdPrintNum(TimeBuff[0]); // 刷新顯示改變后的年份
LcdGotoXY(0,3); // 定位光標到年份閃爍
DelayMs(300); // 延時0.3秒左右
}
if(KeyUp_P==0) // 如果加按鍵被下去
{
if(TimeBuff[0]<99) // 判斷年份是否小于99
TimeBuff[0]++; // 是的話就加上1
LcdGotoXY(0,2); // 光標定位到年份的位置
LcdPrintNum(TimeBuff[0]); // 刷新顯示改變后的年份
LcdGotoXY(0,3); // 定位光標到年份閃爍
DelayMs(300); // 延時0.3秒左右
}
if(KeySet_P==0)
{
break;
}
}
LcdGotoXY(0,6); // 定位光標到月份閃爍
DelayMs(10); // 延時等待,消除按鍵按下的抖動
while(!KeySet_P); // 等待按鍵釋放
DelayMs(10); // 延時等待,消除按鍵松開的抖動
/* 調整月份 */
while(1)
{
if(KeyDown_P==0) // 如果減按鍵被下去
{
if(TimeBuff[1]>1) // 判斷月份是否大于1
TimeBuff[1]--; // 是的話就減去1
LcdGotoXY(0,5); // 光標定位到月份的位置
LcdPrintNum(TimeBuff[1]); // 刷新顯示改變后的月份
LcdGotoXY(0,6); // 定位光標到月份閃爍
DelayMs(300); // 延時0.3秒左右
}
if(KeyUp_P==0) // 如果加按鍵被下去
{
if(TimeBuff[1]<12) // 判斷月份是否小于12
TimeBuff[1]++; // 是的話就加上1
LcdGotoXY(0,5); // 光標定位到月份的位置
LcdPrintNum(TimeBuff[1]); // 刷新顯示改變后的月份
LcdGotoXY(0,6); // 定位光標到月份閃爍
DelayMs(300); // 延時0.3秒左右
}
if(KeySet_P==0)
{
break;
}
}
LcdGotoXY(0,9); // 定位光標到日期閃爍
DelayMs(10); // 延時等待,消除按鍵按下的抖動
while(!KeySet_P); // 等待按鍵釋放
DelayMs(10); // 延時等待,消除按鍵松開的抖動
--------------完整程序見附件-----------------
復制代碼
完整C源碼和proteus仿真.zip
(134.86 KB, 售價: 3 E幣)
2021-6-13 03:12 上傳
點擊文件名下載附件
售價: 3 E幣
[記錄]
[
購買
]
歡迎光臨 ELEOK (http://www.afoofa.cn/)
Powered by Discuz! X5.0