標(biāo)題:
這個單片機(jī)程序運(yùn)行時從最后一個燈到第一個燈亮,怎樣才能互換一下
[打印本頁]
作者:
zyscxr
時間:
2024-9-22 20:12
標(biāo)題:
這個單片機(jī)程序運(yùn)行時從最后一個燈到第一個燈亮,怎樣才能互換一下
#include<reg52.h> //52系列單片機(jī)頭文件
#include<intrins.h> //包含 _crol_ _cror_(函數(shù)所在的頭文件 )
#define uint unsigned int //宏定義
#define uchar unsigned char //宏定義
uchar a; //定義a變量, 用來給P1賦值
//********延時程序***********
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms 即延時約xms亳秒
for(j=110;j>0;j--);
}
//***************************
void main() //主函數(shù)
{
a=0xfe; //二進(jìn)制: 1111 1110
while(1) //大循環(huán)
{
P1=a; //點(diǎn)亮發(fā)光管
delayms(500); //延時500毫秒
a=_cror_(a,1); //將a循環(huán)右移1位后再賦給a
}
}
//循環(huán)右移,被移出的放在最高位,來回循環(huán),所以P1中0和1的位數(shù)不變,只
//是改變了0 1的位置,因此在右移過程中亮燈的數(shù)量不變,只是改變了亮燈的位置.
作者:
夏至淺淺落
時間:
2024-9-23 08:31
a=_crol_(a,1);
作者:
kxcuser
時間:
2024-9-23 08:45
換成左移函數(shù)就行了
作者:
proteuslearn
時間:
2024-9-23 12:56
把大循環(huán)里的a=_cror_(a,1);改為a=_crol_(a,1);循環(huán)左移即可
作者:
123yhk
時間:
2024-9-23 21:12
把a(bǔ)=_cror_(a,1)改為a=_crol_(a,1)就可以了,這兩個函數(shù)也可以自己實現(xiàn)
unsigned char my_crol(unsigned char num,unsigned char x)
{
unsigned char temp1,temp2;
temp1 = num>>(8-x);
temp2 = num<<(x);
num = temp1 | temp2;
return num;
}
unsigned char my_cror(unsigned char num,unsigned char x)
{
unsigned char temp1,temp2;
temp1 = num<<(8-x);
temp2 = num>>(x);
num = temp1 | temp2;
return num;
}
復(fù)制代碼
作者:
hdo11103
時間:
2024-9-27 06:30
#include <reg52.h> // 52系列單片機(jī)頭文件
#define uint unsigned int // 宏定義
#define uchar unsigned char // 宏定義
uchar a; // 定義a變量,用來給P1賦值
//********延時程序***********
void delayms(uint xms) {
uint i, j;
for(i = xms; i > 0; i--) { // i=xms 即延時約xms毫秒
for(j = 110; j > 0; j--);
}
}
//***************************
void main() { // 主函數(shù)
a = 0xFE; // 初始值為 1111 1110
while(1) { // 大循環(huán)
P1 = a; // 點(diǎn)亮發(fā)光管
delayms(500); // 延時500毫秒
// 循環(huán)右移,并將被移出的位放到最高位
a = (a >> 1) | ((a & 0x01) << 7); // 直接進(jìn)行右移與處理
}
}
簡化循環(huán)右移:
在右移并將最低位放回最高位的過程中,使用了更簡潔的表達(dá)式:
a = (a >> 1) | ((a & 0x01) << 7);
這行代碼直接在一行內(nèi)完成了最低位的獲取、右移和重新放置,減少了中間變量的使用。
作者:
hdo11103
時間:
2024-9-27 06:52
#include <reg52.h> // 52系列單片機(jī)頭文件
#define uchar unsigned char // 宏定義
#define uint unsigned int // 宏定義
uchar a = 0xFE; // 初始值為 1111 1110
bit direction = 0; // 方向標(biāo)志,0表示右移,1表示左移
//********延時程序***********
void delayms(uint xms) {
uint i, j;
for(i = xms; i > 0; i--) {
for(j = 110; j > 0; j--);
}
}
//***************************
//********移動函數(shù)***********
void moveLED() {
if (direction == 0) { // 右移
a = (a >> 1) | ((a & 0x01) << 7); // 右移并處理最低位
if (a == 0xFE) direction = 1; // 到達(dá)初始位置,切換方向
} else { // 左移
a = (a << 1) | ((a & 0x80) >> 7); // 左移并處理最高位
if (a == 0xFE) direction = 0; // 到達(dá)初始位置,切換方向
}
}
//***************************
void main() { // 主函數(shù)
while(1) { // 大循環(huán)
P1 = a; // 點(diǎn)亮發(fā)光管
delayms(500); // 延時500毫秒,保持流動效果
moveLED(); // 調(diào)用移動函數(shù)
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1