实验2:small rtos51-------数码管控制
来源:互联网 发布:淘宝上怎么卖药品 编辑:程序博客网 时间:2024/05/18 11:23
陈明计---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秒。
- 实验2:small rtos51-------数码管控制
- 实验1:small rtos51-------led控制
- Small RTOS51堆栈管理分析
- Small Rtos51学习笔记1
- 6、数码管控制实验
- 硬件实验2:数码管显示实验
- 数码管实验
- PLC实验五(LED数码管显示控制)
- 2*8键盘数码管显示实验
- pic 数码管实验
- 按键数码管显示实验
- 10.四位共阴数码管实验
- 数码管显示实验
- 驱动数码管的实验
- 数码管实验报告
- Arduino 单位数码管实验
- 按键控制数码管显示
- 按键控制数码管显示
- 手工删除linux oracle数据库和软件
- 博客的意义
- .h头文件 .lib动态链接库文件 .dll 动态链接库
- How to install opencv in Ubuntu
- Java程序员应该知道的10个面向对象理论
- 实验2:small rtos51-------数码管控制
- POJ 3744 Scout YYF I (矩阵优化,分段计算的概率DP)
- 大话数据结构十一:字符串的模式匹配(KMP算法)
- 类与对象
- android gradle include so libs
- hadoop 提高hdfs删文件效率----hadoop删除文件流程解析
- WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
- CSDN高校俱乐部见面会
- eclips 环境