久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機程序 想要加兩個按鍵切換流水燈模式,沒加明白,請高人指點,謝謝
[打印本頁]
作者:
cxy822
時間:
2024-4-14 16:03
標題:
單片機程序 想要加兩個按鍵切換流水燈模式,沒加明白,請高人指點,謝謝
新手求助:有兩種流水燈形式,想要在單片機P1^5和P1^4口加兩個按鍵切換流水燈模式,按鍵程序搞半天也沒整明白,請高人指點,謝謝!第一個:
#include <reg51.h> //包含頭文件
#include <stdlib.h> //庫文件,使用隨機數發生函數
typedef unsigned char uchar; //無符號字符型數據
typedef unsigned int uint; //無符號整型數據
sbit ST=P3^2; //74HC595寄存器輸入端口
sbit Key1=P1^6; //按鍵開始
sbit Key2=P1^7; //按鍵停止
bit flag=0; //定時時間標志位
uchar num[5]; //產生的隨機數
uchar num1[2];
uchar cnt; //計數變量
uchar str[5]= {0xff,0xff,0xff,0xff,0xff}; //定義數組存放35個LED數據
uchar str1[2]= {0xff,0xff}; //定義數組存放12個LED數據
void Delay_Us(int i); //延時函數
void Timer_Init(void); //定時器初始化
void UART_Init(void); //串口初始化
void UART_Send(uchar dat); //串口發送數據
//主函數
void main(void)
{
uchar i,j,k; //定義變量
UART_Init(); //串口初始化
Timer_Init(); //定時器初始化
for(i=0; i<5; i++) //循環5次發送數據
{ //35個LED初始狀態,全部熄滅
UART_Send(str[i]);
}
P1=0xff; //12個LED初始狀態,全部熄滅
P2=0xff;
while(1)
{
if(flag) //定時時間到
{
flag=0; //標志位清零
/*----35抽取5個LED-----*/
for(i=0; i<5; i++) //所有燈熄滅
{
str[i]=0xff;
}
for(i=0; i<5; i++)
{
k=rand()%35; //產生隨機數0-34
for(j=0; j<i ; j++)
{
while(num[j]==k) //如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%35;
}
}
num[i]=k;
str[num[i]/8]&=~(0x01<<(num[i]%8)); //將隨機數轉換為對應的LED數據
}
for(i=0; i<5; i++) //循環5次發送數據
{
UART_Send(str[i]);
}
/*----12抽取2個LED-----*/
str1[0]=0xff; //12個LED全部熄滅
str1[1]=0xff;
for(i=0; i<2; i++)
{
k=rand()%12; //產生隨機數0-11
for(j=0; j<i ; j++)
{
while(num1[j]==k) //如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%12;
}
}
num1[i]=k;
str1[num1[i]/8]&=~(0x01<<(num1[i]%8)); //將隨機數轉換為對應的LED數據
}
P1=str1[1]; //控制12個LED點亮
P2=str1[0];
}
if(Key1==0) //按鍵開始
{
Delay_Us(1000); //延時消抖
if(Key1==0)
{
TR0=1;
}
while(Key2==0); //按鍵松手檢測
}
if(Key2==0) //按鍵停止
{
Delay_Us(1000); //延時消抖
if(Key2==0)
{
TR0=0;
/*----35抽取5個LED-----*/
for(i=0; i<5; i++) //所有燈熄滅
{
str[i]=0xff;
}
for(i=0; i<5; i++)
{
k=rand()%35; //產生隨機數0-34
for(j=0; j<i ; j++)
{
while(num[j]==k)//如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%35;
}
}
num[i]=k;
str[num[i]/8]&=~(0x01<<(num[i]%8)); //將隨機數轉換為對應的LED數據
}
for(i=0; i<5; i++) //循環5次發送數據
{
UART_Send(str[i]);
}
/*----12抽取2個LED-----*/
str1[0]=0xff; //12個LED全部熄滅
str1[1]=0xff;
for(i=0; i<2; i++)
{
k=rand()%12; //產生隨機數0-11
for(j=0; j<i ; j++)
{
while(num1[j]==k) //如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%12;
}
}
num1[i]=k;
str1[num1[i]/8]&=~(0x01<<(num1[i]%8)); //將隨機數轉換為對應的LED數據
}
P1=str1[1]; //控制12個LED點亮
P2=str1[0];
}
while(Key2==0); //按鍵松手檢測
}
}
}
//延時函數
void Delay_Us(int i)
{
while(i--);
}
//定時器初始化
void Timer_Init(void)
{
TMOD|=0x01; //打開定時器0,1,工作方式1。
TH0=0x3c; //給定時器0賦初值,定時50ms
TL0=0xb0;
ET0=1; //打開定時器0中斷允許
TR0=0; //打開定時器
PS=1;
EA=1; //打開總中斷
}
//串口初始化
void UART_Init(void)
{
SM0=0; //串口模式0:同步移位寄存器方式
SM1=0;
TI=0; //發送中斷清零
}
//串口發送數據,移位寄存器模式
void UART_Send(uchar dat)
{
ST=0;
SBUF=dat; //LED數據
while(~TI); //等待發送完成
TI=0; //標志位清零
ST=1;
ST=0;
}
//定時器0中斷函數
void Timer0() interrupt 1
{
TH0=0x3c; //定時50ms
TL0=0xb0;
cnt++; //中斷計數
if(cnt==6)
{
cnt=0;
flag=1; //標志位置1
}
}
復制代碼
第二個:
#include <reg51.h> //包含頭文件
#include <stdlib.h> //庫文件,使用隨機數發生函數
typedef unsigned char uchar; //無符號字符型數據
typedef unsigned int uint; //無符號整型數據
sbit ST=P3^2; //74HC595寄存器輸入端口
sbit Key1=P1^6; //按鍵開始
sbit Key2=P1^7; //按鍵停止
bit flag=0; //定時時間標志位
uchar num[7]; //產生的隨機數
uchar num1[2];
uchar cnt; //計數變量
uchar str[5]= {0xff,0xff,0xff,0xff,0xff}; //定義數組存放35個LED數據
uchar str1[2]= {0xff,0xff}; //定義數組存放12個LED數據
void Delay_Us(int i); //延時函數
void Timer_Init(void); //定時器初始化
void UART_Init(void); //串口初始化
void UART_Send(uchar dat); //串口發送數據
//主函數
void main(void)
{
uchar i,j,k; //定義變量
UART_Init(); //串口初始化
Timer_Init(); //定時器初始化
for(i=0; i<5; i++) //循環5次發送數據
{ //35個LED初始狀態,全部熄滅
UART_Send(str[i]);
}
P1=0xff; //12個LED初始狀態,全部熄滅
P2=0xff;
while(1)
{
if(flag) //定時時間到
{
flag=0; //標志位清零
/*----35抽取5個LED-----*/
for(i=0; i<5; i++) //所有燈熄滅
{
str[i]=0xff;
}
for(i=0; i<7; i++)
{
k=rand()%35; //產生隨機數0-34
for(j=0; j<i ; j++)
{
while(num[j]==k) //如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%35;
}
}
num[i]=k;
str[num[i]/8]&=~(0x01<<(num[i]%8)); //將隨機數轉換為對應的LED數據
}
for(i=0; i<5; i++) //循環5次發送數據
{
UART_Send(str[i]);
}
/*----12抽取2個LED-----*/
str1[0]=0xff; //12個LED全部熄滅
str1[1]=0xff;
for(i=0; i<2; i++)
{
k=rand()%12; //產生隨機數0-11
for(j=0; j<i ; j++)
{
while(num1[j]==k) //如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%12;
}
}
num1[i]=k;
str1[num1[i]/8]&=~(0x01<<(num1[i]%8)); //將隨機數轉換為對應的LED數據
}
P1=str1[1]; //控制12個LED點亮
P2=str1[0];
}
if(Key1==0) //按鍵開始
{
Delay_Us(1000); //延時消抖
if(Key1==0)
{
TR0=1;
}
while(Key2==0); //按鍵松手檢測
}
if(Key2==0) //按鍵停止
{
Delay_Us(1000); //延時消抖
if(Key2==0)
{
TR0=0;
/*----35抽取5個LED-----*/
for(i=0; i<5; i++) //所有燈熄滅
{
str[i]=0xff;
}
for(i=0; i<7; i++)
{
k=rand()%35; //產生隨機數0-34
for(j=0; j<i ; j++)
{
while(num[j]==k)//如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%35;
}
}
num[i]=k;
str[num[i]/8]&=~(0x01<<(num[i]%8)); //將隨機數轉換為對應的LED數據
}
for(i=0; i<5; i++) //循環5次發送數據
{
UART_Send(str[i]);
}
/*----12抽取2個LED-----*/
str1[0]=0xff; //12個LED全部熄滅
str1[1]=0xff;
for(i=0; i<2; i++)
{
k=rand()%12; //產生隨機數0-11
for(j=0; j<i ; j++)
{
while(num1[j]==k) //如果產生的隨機數與之前的相同,則重新生成
{
k=rand()%12;
}
}
num1[i]=k;
str1[num1[i]/8]&=~(0x01<<(num1[i]%8)); //將隨機數轉換為對應的LED數據
}
P1=str1[1]; //控制12個LED點亮
P2=str1[0];
}
while(Key2==0); //按鍵松手檢測
}
}
}
//延時函數
void Delay_Us(int i)
{
while(i--);
}
//定時器初始化
void Timer_Init(void)
{
TMOD|=0x01; //打開定時器0,1,工作方式1。
TH0=0x3c; //給定時器0賦初值,定時50ms
TL0=0xb0;
ET0=1; //打開定時器0中斷允許
TR0=0; //打開定時器
PS=1;
EA=1; //打開總中斷
}
//串口初始化
void UART_Init(void)
{
SM0=0; //串口模式0:同步移位寄存器方式
SM1=0;
TI=0; //發送中斷清零
}
//串口發送數據,移位寄存器模式
void UART_Send(uchar dat)
{
ST=0;
SBUF=dat; //LED數據
while(~TI); //等待發送完成
TI=0; //標志位清零
ST=1;
ST=0;
}
//定時器0中斷函數
void Timer0() interrupt 1
{
TH0=0x3c; //定時50ms
TL0=0xb0;
cnt++; //中斷計數
if(cnt==6)
{
cnt=0;
flag=1; //標志位置1
}
}
復制代碼
請指點,謝謝!
作者:
cxy822
時間:
2024-4-14 16:07
就是按P1^4口按鍵執行第一種流水燈程序,按P1^5口按鍵執行第二種流水燈程序,按鍵調換順序也沒關系
作者:
cy009
時間:
2024-4-18 16:59
流水燈是入門級,沒必要搞這么復雜的程序,思路才是重要的。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美极品少妇xxxxⅹ免费视频
|
午夜精品一区
|
亚洲高清视频一区二区
|
国产视频福利一区
|
91亚洲精
|
欧美精品一区三区
|
午夜精品久久久久久久99黑人
|
全部免费毛片在线播放网站
|
国产精品毛片久久久久久
|
国产三区四区
|
在线播放国产一区二区三区
|
国产黄视频在线播放
|
日本三级全黄三级三级三级口周
|
亚洲综合在线视频
|
国产色片在线
|
久久久久久综合
|
日本三级网站在线观看
|
亚洲最大福利网
|
久久在线视频
|
香蕉一区二区
|
在线视频亚洲
|
四虎成人精品永久免费av九九
|
在线播放91
|
欧美精品v国产精品v日韩精品
|
国产资源网
|
国产美女在线观看
|
看片地址
|
国产探花在线精品一区二区
|
国产激情偷乱视频一区二区三区
|
久久久久久久久久爱
|
中文字幕成人在线
|
波多野结衣中文字幕一区二区三区
|
青青草原综合久久大伊人精品
|
色综合99
|
精品久久成人
|
91伊人网
|
国产成人亚洲精品
|
中文字幕一区二区三区四区不卡
|
日本视频免费
|
日韩在线资源
|
成人午夜网站
|