亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
(開源)基于時間片輪詢的程序架構思想的LED閃爍
[打印本頁]
作者:
海闊天空2015
時間:
2015-7-21 16:25
標題:
(開源)基于時間片輪詢的程序架構思想的LED閃爍
這兩天失業在家里,無聊間瀏覽各網站,其實想想自己的程序寫的實在很亂,其實也很少寫程序 的
看到一篇文章是關于程序架構的文章:“淺談單片機應用程序架構(原創)”里面關于程序的架構思想很好,
很實用,博客的主人劉俊先生愿意將這些編程的思想與大家分享,分享構建程序的思想,值得大家學習
今天下午運用了劉俊先生的思想,做了兩個LED燈輪流閃爍的思想,讓兩個LED燈輪流閃爍,與大家分享
也是“從業十年,手把手教你。。。。!贝宋淖髡叩乃枷氩畈欢!與大家一起分享程序,和大家一起進步
在此謝謝劉俊先生的開源思想!
/*****************************
*PROJECT:LED輪流閃爍
*根據操作系統思想使用時間片輪詢法實現LED輪流閃爍
*DATE:2015-7-21
*
*/
#include <reg52.h>
#define uChar unsigned char
#define uInt unsigned int
//CONFIG
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit LED1 = P0^0;
sbit LED2 = P0^1;
void LedOn(void);
void LedOff(void);
void InitSys(void);//系統初始化
//1.定義一個結構體
typedef struct _TASK_COMPONENTS
{
uChar Run; //程序運行標志 0-不運行 1-運行
uInt Timer; //計時器
uInt ItvTimer; //任務運行間隔時間
void (*TaskHook)(void); //要運行的任務函數
}TASK_COMPONENTS;
typedef enum _TASK_LIST
{
TAST_LED_ON,
TAST_LED_OFF,
TASKS_MAX // import
}TASK_LIST;
static TASK_COMPONENTS TaskComps[] =
{
{0,250,250,LedOn}, // LED on
{0,250,250,LedOff}, //LED OFF
};
/********************************************
*FunctionName :TaskReMarks()
*Description :任務標志處理
*EntryParameter :None
*RetrunValue :None
*********************************************/
void TaskReMarks(void) //此函數在中斷中調用
{
uChar i = 0;
for(i = 0;i < TASKS_MAX; i++)
{
if(TaskComps[ i].Timer)
{
TaskComps[ i].Timer--;
if(TaskComps[ i].Timer == 0)
{
TaskComps[ i].Timer = TaskComps[ i].ItvTimer;
TaskComps[ i].Run = 1; //任務可以運行
}
}
}
}
//3.程序處理
/**************************
FunctionName :TaskProcess()
*Description :任務標志處理
*EntryParameter :None
*RetrunValue :None
***************************/
void TaskProcess(void)
{
uChar i = 0;
for(i = 0;i < TASKS_MAX;i++)
{
if(TaskComps[ i].Run)
{
TaskComps[ i].TaskHook();
TaskComps[ i].Run = 0;
}
}
}
void main()
{
InitSys();
while(1)
{
TaskProcess();
}
}
void InitSys(void)//系統初始化
{
ENLED = 0;
ADDR3 = 1;
ADDR2 = 1;
ADDR1 = 1;
ADDR0 = 0;
TMOD = 0X01;
TH0 = 0xFC;
TL0 = 0x67;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void InterruptTimer0(void) interrupt 1
{
TH0 = 0xFC; //定時2MS
TL0 = 0x67;
TaskReMarks();
}
/********************************************
*FunctionName :void LedOn(void)
*Description :LED開啟與關閉
*EntryParameter :None
*RetrunValue :None
*********************************************/
void LedOn(void)
{
LED1 = 0;
LED2 = 1;
}
/********************************************
*FunctionName :void LedOff()
*Description :LED開啟與關閉
*EntryParameter :None
*RetrunValue :None
*********************************************/
void LedOff(void)
{
LED1 = 1;
LED2 = 0;
}
作者:
總是離人淚
時間:
2017-8-5 20:32
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4
樓主大人在嗎,這幾句是干嗎的?沒看懂誒
作者:
SURUBU1976
時間:
2021-8-26 22:41
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4看應該是三八譯碼器控制端口
作者:
csmyldl
時間:
2021-8-27 01:26
總是離人淚 發表于 2017-8-5 20:32
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
這是移植時未刪除的部分,在本程序中控制LED1和LED2中不起作用,可忽略
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1