陳明計---14.2章----proteus中仿真---記直接用模板不能運行---其實程序沒有問題。
第一步:首先在proteus中按照書中將原理圖畫好。
2第二步:首先不用操作系統驗證電路的正確性以及書中函數的正確性
在KEIL4中編寫程序如下:
#include<reg51.h> //包含單片機寄存器的頭文件
/****************************************
函數功能:延時一段時間
*****************************************/
sbit KdDat = P1 ^ 0;
sbit KdClk = P1 ^ 1;
sbit led1 = P1^6;
sbit led2 = P1^7;
/**********************顯示***********************************/
unsigned char const ShowTable[11] = {
~0x3f, ~0x06, ~0x5b, ~0x4f, ~0x66, ~0x6d, ~0x7d, ~0x07, ~0x7f, ~0x6f, ~0x00};
unsigned char const EbitData[5] = {~0x40, ~0x20, ~0x10, ~0x08, ~0x80};
void delay(void)
{
unsigned char i,j;
for(i=0;i<50;i++)
for(j=0;j<50;j++)
;
}
/*********************************************************************************************************
** 函數名稱: KdTxdByte
** 功能描述: 串並轉換電路驅程序
** 輸 入: 需要在並行口上出現的數據
** 輸 出: 無
** 全局變量: 無
** 調用模塊: 無
**
** 作 者: 陳明計
** 日 期: 2002年12月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void KdTxdByte(unsigned char KdData)
{
unsigned char i;
i = 8;
do
{
KdClk = 1;
KdData = KdData << 1;
KdDat = CY;
KdClk = 0;
} while (--i != 0);
KdClk = 1;
}
/*******************************************************
函數功能:主函數
********************************************************/
void main(void)
{
while(1)
{
unsigned char i = 0 ;
for (i = 0; i < 5; i++)
{
P1 = 0xff; /* 關閉顯示第i位 */
KdTxdByte(ShowTable[i]);
P1 = EbitData[i]; /* 顯示第i位 */
delay();
}
}
}
3驗證程序正確性以及硬件正確性:運行效果如下表面以上函數以及原理圖無誤。
4將以上代碼移植到陳明計給的代碼中--其實就是陳明計給的Led模板事實證明模板正確
程序運行效果如下:
關於這次實驗:我有一點需要注意:
程序中設置的中斷是600HZ那麼就是每600HZ中斷就會把顯示任務置於運行狀態,那麼 OSWait(K_TMO,OS_TICKS_PER_SEC / 2);延時時間是多少呢?
其中OS_TICKS_PER_SEC 在OS_CFG中定義的是100,100/2就是50,在數碼管顯示中循環5次後又調用OSWait(K_SIG,0);那麼就是調用6次OSWait(K_SIG,0);後執行一次 OSTimeTick();。所以50*6*(1/600)S就是 OSWait(K_TMO,OS_TICKS_PER_SEC / 2);的延遲時間即0.5秒。