久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
(開源)基于KST51單片機開發板的數碼管與LED小燈同時顯示
[打印本頁]
作者:
海闊天空2015
時間:
2015-7-24 17:50
標題:
(開源)基于KST51單片機開發板的數碼管與LED小燈同時顯示
還是上次那個程序小改而成!還同時參考了作者的書
說實話,要是自己編的話還不如作者自己的程序好
自己只是在作者的基礎上進行小修小補,但個人覺得這是程序積累的好方法,從不知從何入手到有點頭緒
還參考了一些程序架構的思想,還是不錯,個人很有成就感!
這個開發板的難度與其它的開發板的區別主要是集成度很高,對實際開發很有參考的價值
引腳復用的情況很多,這就得在編程上面下心思!
自認為想要達到作者的水平還有很多的路要走!!!
其中的最后一個函數是自已弄的,其實自己到現在用指針還是有點不知怎么用
單片機開發板電路圖:
http://m.zg4o1577.cn/f/ks51.pdf
/*****************************
*PROJECT:LED與數碼管同時顯示
*方式:數碼管1S時間加一的同時LED以0.2秒的時間進行閃爍
*根據操作系統思想使用時間片輪詢法實現LED輪流閃爍
*DATE:2015-7-22
*操作平臺:KST51
*LED與數碼管共用一個IO口P0,對軟件編程的要求更高
LED與數碼管位選與段選同時由P0與P1口時行控制,選擇使用了138與245芯片時行驅動!
這也是難點所在!
*/
#include <reg52.h>
#define uChar unsigned char
#define uInt unsigned int
//CONFIG
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
uChar InDex = 0;
uChar code LedChar[] = {
0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xf8,
0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0X86, 0X8E
};
/*uChar LedBuff[7] = {
0XFF,0XFF,0XFF, 0XFF ,0xFF,0XFF, 0XFF
};*/
struct sLedBuff { //LED顯示緩沖區結構
unsigned char number[6];
unsigned char alone;
};
void LedScan(void);
void LedOn(void);
void LedOff(void);
void LedRefush(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_SCAN,
TAST_LED_ON,
TAST_LED_OFF,
TAST_LED_REFUSH,
TASKS_MAX // import
}TASK_LIST;
static TASK_COMPONENTS TaskComps[] =
{
{0,2,2,LedScan}, //LEDSCAN
{0,100,100,LedOn}, // LED on
{0,100,100,LedOff}, //LED OFF
{0,1000,1000,LedRefush},
};
struct sLedBuff ledBuff;
/********************************************
*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;
TMOD = 0X01;
TH0 = 0xFC;
TL0 = 0x67;
TR0 = 1;
ET0 = 1;
EA = 1;
// LED1 = 1;
// LED2 = 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)
{
ledBuff.alone = 0xFE;
}
/********************************************
*FunctionName :void LedOff()
*Description :LED開啟與關閉
*EntryParameter :None
*RetrunValue :None
*********************************************/
void LedOff(void)
{
ledBuff.alone = 0xFF;
}
/********************************************
*FunctionName :void LedScan()
*Description :數碼管掃描程序
*EntryParameter :None
*RetrunValue :None
*********************************************/
void LedScan(void)
{
static uChar i = 0;
P0 = 0xFF;
P1 = (P1 & 0XF8) | i;
P0 = *((uChar data *) &ledBuff +i);
if(i < sizeof(ledBuff) - 1)
i++;
else
i = 0;
}
/********************************************
*FunctionName :void LedRefush()
*Description :數碼管更新程序
*EntryParameter :None
*RetrunValue :None
*********************************************/
void LedRefush(void)
{
static uChar i;
static uChar j;
for(j = InDex + 1; j < (sizeof(ledBuff.number)); j++)
{
//沒有必要顯示的數碼管不顯示
ledBuff.number[j] = 0xFF;
}
ledBuff.number[InDex] = (*(&LedChar +i));//其實不知怎么用的但改了一下就好了
if(i < 9) //判斷是否大于9,如果大于九,則將其歸零!
i++; //如果是i<10則還要再加一次,達不到加九歸0的效梗←
else
i =0;
}
復制代碼
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
精品免费国产一区二区三区四区
|
永久免费看mv网站入口亚洲
|
麻豆chinese新婚xxx
|
天天干狠狠操
|
www.日日日
|
黄色片在线
|
中文在线免费观看
|
日韩福利视频
|
黄色片视频
|
欧美色偷偷
|
国产日韩欧美一区二区
|
久久视频在线免费观看
|
久久免费国产
|
又黄又爽网站
|
国产精品久久久久久无人区
|
日韩av一区二区三区四区
|
欧美日韩大片
|
色天天综合
|
日韩欧美一级
|
中文字幕第一页在线
|
在线播放亚洲
|
二区在线观看
|
国产aaaaaa
|
午夜快播
|
看片地址
|
久草成人
|
欧美成人精品一区二区三区
|
国产福利视频在线观看
|
国产精品视频专区
|
亚洲视频一区二区三区
|
欧美123区
|
欧美日韩一二三区
|
国产黄色免费观看
|
黄色一级生活片
|
综合久久99
|
男女视频免费
|
性猛交xxxx富婆老太婆
|
亚洲一区二区三区在线
|
国产成人三级一区二区在线观看一
|
曰本毛茸茸性生活
|
91蜜桃婷婷狠狠久久综合9色
|