打印

单片机学习板

[复制链接]
8081|57
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
soso|  楼主 | 2008-3-13 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
资源:
      1 .采用STC8951RC(与标准51指令、脚位完全兼容),支持在线串行ISP下载。也可支持Philips公司P89C52系列单片机串行下载。
2 .供电方式:USB供电
3 .串口RS232
4 .4个LED发光管
5 .四位数码管
6 .4个独立式键盘(包含外部中断按键)
7 .一个蜂鸣器
8 .1602液晶接口(液晶为选配件)
9 .128X64液晶接口(液晶为选配件)
10 .DS18B20温度传感器(选配件)
11 .IrDA红外接收头
   功能:
     1  IO控制LED闪烁
2  定时器0控制LED 1S闪烁
3  外部中断0(按键)控制LED亮灭
4  多种频率产生警笛声(蜂鸣)
5  四个按键控制四个LED对应亮灭或液晶的翻页。
6  1602液晶显示。
7  KS0108、或ST7290液晶显示。
8  四个数码管上分别显示1234
9  串口通讯,上位机和下位机互相通讯。
10  DS18B20温度传感器显示出温度值。
11  红外接收,红外遥控控制指示灯或液晶的动作等。  

相关帖子

沙发
soso|  楼主 | 2008-3-14 10:14 | 只看该作者

实验板

Easy51系列单片机学习板 开发程序实例

一、基础知识
1)    学习51系列单片机基本知识。找一本单片机教材放在手边,边实战边学习
2)    了解STC单片机的基本特点
3)    了解Easy51系列单片机学习板的电路原理(阅读随板光盘说明书)
4)    学习STC单片机ISP软件及下载的方法(下载地址:www.mcu-memory.com)
5)    学习Keil C51软件的基本使用
6)    学习C51的基础知识
二、入门实验
1)    Hello Word:把P23口置低,点亮一个LED灯
2)    基本I/O口实验:使用延时方法,控制一个LED灯闪烁(P23)
3)    定时器基本:使用定时器,控制一个LED灯以1S钟为周期闪烁
4)    定时器应用:控制4个LED以流水灯形式闪动
5)    外部中断:按下ENT键(P32),点亮一LED,再按下ENT键,对应LED灭
6)    I/O键盘检测:分别按下一键,对应的LED被点亮,再按下键,则灭
7)    蜂鸣器基本驱动:使用延时方法,控制蜂鸣器发声
8)    蜂鸣器驱动应用1:使用高低两种频率值,产生警笛声
9)    蜂鸣器驱动应用2:播放音乐——    
10)    数码管显示应用1:在第一个数码管上任意显示0~9之间的数值
11)    数码管显示应用2:在4个数码管上“同时”显示不同数值,如1,2,3,4
12)    综合实验1——计数器:在数码管上显示按ENT键(P32)次数,(先十六进制显示,再改十进制)
13)    综合实验2——秒表:在数码管上显示秒数
14)    综合实验3——分秒表:前两位显示分钟,后两位显示秒钟,中间小数点0.1S闪烁
15)    综合实验4——方波信号发生器:0~200Hz,步长10Hz,P23输出
16)    综合实验4——简易跑表:前两位数码管显示秒数,后两位显示百分秒;按一下M键开始计时,再按一下停止;DN键清零
17)    综合实验5——可多段计数的跑表:按一下M键开始计时,每再按一下记下当前计数值,最多记四段;按一下UP键停止,再按一下UP键,第一个指示灯亮,并显示第一段计数值;继续按UP键,下一个指示灯亮,并显示下一段计数值;DN键清零
三、课程设计实例(综合实训)
1)    综合实训1——简易电脑时钟:前两位显示小时,后两位显示分钟,中间小数点0.5S亮,0.5S灭。按M键一次,进入修改小时模式,第一个指示灯亮,按UP或DN键可对小时进行修改(加或减);按M键二次,进入修改分钟模式,第二个指示灯亮,按UP或DN键可对分钟进行修改(加或减);按M键三次,返回到时钟显示模式。
2)    综合实训2——带音乐闹钟的电脑时钟:在上述简易时钟基础上,增加音乐闹钟功能。音乐为:       ;按M键三次,进入修改闹钟小时模式,第三个指示灯亮,按UP或DN键可对小时进行修改(加或减);按M键四次,进入修改闹钟分钟模式,第三个指示灯亮,按UP或DN键可对分钟进行修改(加或减);按M键五次,数码管上显示“LL.00”或“LL.01”, “LL.00”表示贪睡闹铃功能关闭,01表示贪睡闹铃功能开启,按UP或DN键可在00或01间循环选择;在贪睡闹铃功能关闭时,可按任意键停止当前闹钟,或不按键,则闹钟1分钟,以后再不响。在贪睡闹铃功能开启时,如按下除UP键外的任意键,停止当前闹钟,如不按键,则闹钟1分钟;当过5分钟后,闹钟又会重新响起,如此循环,只有按下UP键时,才能停止闹钟以后再不响。
3)    综合实训3——带整点报时的音乐电脑时钟:在上述实训2基础上,增加整点报时功能。整点报时功能:每当半点时蜂鸣器短鸣一声,每整点长鸣对应次数(12小时制,晚上10点到早上七点之间都不报时),例如1点长鸣一次,2点二次。按M键六次,数码管上显示“BS.00”或“BS.01”, “BS.00”表示整点报时功能关闭,01表示报时功能开启,按UP或DN键可在00或01间循环选择。
4)    综合实训4——利用STC单片机内部EEROM可掉电存储功能,实现实训3的设置参数及当前时钟值,在掉电后仍可保存,重新上电后参数不变,从掉电时的时钟开始继续计时。
5)    设计实训8——方波信号发生及测量表(0~90Hz,步长10Hz)P23输出、P32输入;前两位显示输出频率,后两位显示输入的测量值
6)    设计实训9——PWM信号发生及测量仪(50Hz,0~99%占空比可调节)P23输出、P32输入;前两位显示输出占空比,后两位显示输入的测量值
7)    设计实训6——警笛声报警器:蜂鸣器发出警笛声,同时指示灯像警灯一样闪烁。(四个指示灯要焊接成:红绿黄红——硬件修改备忘)
8)    设计实训10——PS/2电脑键盘接口:在键盘上输入数字,数码管显示对应值
9)    设计实训11——PS/2鼠标接口:能检测鼠标的左或右点击,并显示点击次数
10)    综合实训3——PC机与单片机的RS232简易通讯:先实现用串口调试助手发送,数码管显示对应数值;再实现自己编写PC机程序(MScom控件)发送数据给单片机,数码管显示。(在TXD及RXD上能增加通讯指示灯就最好了,并且把TTL电平串口加电源及地引出一SIP5接口——硬件修改备忘)
11)    综合实训5——PC机通讯的电脑时钟:在实训4的基础上,增加一个与PC机通讯的功能,可在PC机上设置所有参数,并且可在PC机上显示单片机板的计时时间的功能。



(以下内容需选购相应选配件才能实现)
12)    设计实训1——18B20电子温度计
13)    设计实训1——带电子温度计的电脑时钟
14)    设计实训2——红外遥控器解码程序(TC9012F),数码管显示按下的键
15)    设计实训3——可红外遥控的电脑时钟
16)    设计实训6——1602液晶显示程序
17)    设计实训6——基于1602液晶显示的多功能电脑时钟
18)    设计实训6——12864液晶显示程序(ST7290驱动芯片)
19)    设计实训6——12864液晶显示程序(KS0108驱动芯片)

相关链接:http://www.laogu.com/laogubbs/see_26101.htm

使用特权

评论回复
板凳
soso|  楼主 | 2008-3-14 12:00 | 只看该作者

PS2 键盘 程序c语言 源代码

#include "reg51.h"
sbit KEY_CLK=P1^7;
sbit KEY_DATA=P1^6;
//PS2每次发送11个数据位分别为起始位+八个数据位+奇偶校验位+停止位

void keyread(unsigned char *keyborad,unsigned char *flagre) 

  static unsigned char passnumber;
  unsigned char key;
  unsigned int wi=0;
  unsigned char i;
  EA=0;         //每次扫描PS2协议时,都要关总中断允许位,PS2通信时不能被中断,否则会读错数据
  KEY_CLK=1;
   while(KEY_CLK){if(++wi>50) { KEY_CLK=0; EA=1;return;} }      //拉高时钟线,如果键盘有数据要发,要在50微秒内拉低时钟线
   while(!KEY_CLK){if(++wi>500) { KEY_CLK=0;EA=1;return;}}     //跳过始位
 
   for(i=0;i<10;i++)
   { while(KEY_CLK){if(++wi>500) { KEY_CLK=0;EA=1;return;}}
     if(i>=0&&i<=7)                                             //只接收八位数据位,跳过奇偶校验位和停止位
     { key=key>>1;
       if(KEY_DATA)
       key=key|0x80;}
       while(!KEY_CLK)
       {
               if(++wi>500) { KEY_CLK=0;EA=1;return;}
       }
   }
     
 
    KEY_CLK=0;EA=1;     //拉低时钟线,抑制键盘发送数据,再开总中断允许位
    if(key==0xE1)     //第三类键
      passnumber=passnumber+2;  
    if(key==0xE0)     //第二类键
      ++passnumber;                     //这里有passnumber是为了只接后一组数据中的每一个屏蔽每两个
    if(key==0xF0)
         passnumber=passnumber+2;         
    if(passnumber==0)
     { *keyborad=key;
       *flagre=1;         //如果成功接收一个键盘通码,就把flagre置1
     }
    else 
      --passnumber;
   
}

有兴趣可以联系我

使用特权

评论回复
地板
xwj| | 2008-3-14 12:45 | 只看该作者

查询死等方式?还要光全部中断?没查到就肯定出错?

EA=0;         //每次扫描PS2协议时,都要关总中断允许位,PS2通信时不能被中断,否则会读错数据


就你这样的水平还来卖学习板?
能学到什么呢???

使用特权

评论回复
5
soso|  楼主 | 2008-3-14 17:18 | 只看该作者

hehe

谢谢你的建议,不过我的程序开始写这个程序我用的不是中断的,后来做好 之后又换成中断的也是可以的,开始 感觉跟你 一样 呵呵,要不你也试一下中断看是否出错,当然我是个菜鸟,共同学习! 以后 多多指点

使用特权

评论回复
6
68336016| | 2008-3-14 19:17 | 只看该作者

这没什么

卖板而已,又不是搞技术开发,稍微懂点就可以了,只要板功能正常,不会有人菜到什么都需要向卖家请教

使用特权

评论回复
7
cqxwj| | 2008-3-16 16:44 | 只看该作者

top

支持!!

使用特权

评论回复
8
cqxwj| | 2008-3-18 17:20 | 只看该作者

hehe

同感!

使用特权

评论回复
9
soso|  楼主 | 2008-3-19 15:27 | 只看该作者

关于单片机外部中断的一个简单例程

今天卖了100多套实验板给学校,有点兴奋!

/************************************************************************************
*  Copyright (c) 2008,重庆优易特电子
*            All rights reserved.

* 摘 要:    使用外部中断0(ENT按键,接P32口)控制LED亮灭

* 文件名称: main.c
* CPU芯片:  STC89C51RC
* 学习板型: Easy51-B 
*  
* 当前版本: 2.0
* 作 者:     cache
* 完成日期: 2008年1月23日
*
*原理:按一下ENT键,P32口产生一脉冲,程序进入中断服务子程序,指示灯反转
*************************************************************************************/
#include "reg52.h"

sbit P23=P2^3;

void main()
{              
    IT0=1;    //外部中断0连沿触发方式 
    EX0=1;    //使能外部中断0
     EA=1;    //开部中断
       P23=0;    //指示灯初始为亮

     while(1)  ;
}

void int0() interrupt 0    //外部中断0程序入口
{
  P23=!P23;
}

使用特权

评论回复
10
cqxwj| | 2008-3-20 09:27 | 只看该作者

请问 实验板 多少钱一个?

使用特权

评论回复
11
zhlu8866| | 2008-3-20 10:55 | 只看该作者

就是 说说价钱

使用特权

评论回复
12
古道热肠| | 2008-3-21 14:48 | 只看该作者

楼主呀,别光顾着兴奋,记得要多为论坛作点贡献

sifan1157 发表于 2008-3-19 15:27 侃单片机 ←返回版面    

14楼: 关于单片机外部中断的一个简单例程 

今天卖了100多套实验板给学校,有点兴奋!
 
 

使用特权

评论回复
13
soso|  楼主 | 2008-3-22 08:36 | 只看该作者

你好啊

19楼的朋友 你好啊,你说怎么样才能给论坛做贡献啊呵呵!

使用特权

评论回复
14
huangqi412| | 2008-3-22 09:20 | 只看该作者

还行

使用特权

评论回复
15
123654789| | 2008-3-22 09:22 | 只看该作者

楼上是盐水帖 哈哈哈 !!!!!!!!

huangqi412 发表于 2008-3-22 09:20 侃单片机 ←返回版面    

21楼: 还行 

使用特权

评论回复
16
soso|  楼主 | 2008-3-24 08:23 | 只看该作者

液晶显示C代码

/************************************************************************************
*  Copyright (c) 2007,重庆优易特电子
*            All rights reserved.
*
* 文件名称: main.c
* 文件标识: none
* 适用器件: STC89C51RC

* 摘 要:   1602液晶显示程序,显示简单的字母,也可以显示数字,但是不能显示汉字

* 当前版本:1.0
* 作 者:sifan
* 完成日期:2007年12月10日
*
*************************************************************************************/ 
#include "reg51.h"

#define LCM_Data  P0   //数据端口
#define Busy    0x80 //用于检测LCM状态字中的Busy标识

sbit LCM_RW= P1^3; //定义信号引脚
sbit LCM_RS= P1^2 ;
sbit LCM_E=  P1^4 ;

void WriteDataLCM(unsigned char WDLCM);
void WriteCommandLCM(unsigned char WCLCM,BuysC);
unsigned char ReadDataLCM(void);
unsigned char ReadStatusLCM(void);
void LCMInit(void);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
void Delay5Ms(void);
void Delay400Ms(void);
unsigned char code uctech[] = {"U-easytech.com"};
unsigned char code net[] = {"fretech.com"};

void main(void)
{
Delay400Ms(); //启动等待,等LCM讲入工作状态
LCMInit(); //LCM初始化
Delay5Ms(); //延时片刻(可不要)
DisplayListChar(1, 0, uctech);   //在第一行显示"welcome!"
DisplayListChar(0, 1, net);      //在第二行显示"hxl_raien."
ReadDataLCM();                   //测试用句,可以不要
while(1);                        //不断循环,也称“死循环”
}
//写数据
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM(); //检测忙
LCM_Data = WDLCM;
LCM_RS = 1;
LCM_RW = 0;
LCM_E = 0;      //若晶振速度太高可以在这后加小的延时
LCM_E = 0;      //延时
LCM_E = 1;
}
//写指令
void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC) ReadStatusLCM();    //根据需要检测忙
LCM_Data = WCLCM;
LCM_RS = 0;
LCM_RW = 0; 
LCM_E = 0;
LCM_E = 0;
LCM_E = 1; 
}
//读数据
unsigned char ReadDataLCM(void)
{
LCM_RS = 1; 
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
return(LCM_Data);
}
//读状态
unsigned char ReadStatusLCM(void)
{
LCM_Data = 0xFF; 
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 0;
LCM_E = 1;
while (LCM_Data & Busy); //检测忙信号
return(LCM_Data);
}
void LCMInit(void) //LCM初始化
{
LCM_Data = 0;
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
Delay5Ms(); 
WriteCommandLCM(0x38,0);
Delay5Ms(); 
WriteCommandLCM(0x38,0);
Delay5Ms(); 
WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1); //关闭显示
WriteCommandLCM(0x01,1); //显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置
WriteCommandLCM(0x0C,1); // 显示开及光标设置
}
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)  
                                   //x表示列、y 表示行
{
Y &= 0x1;
X &= 0xF;               //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40;       //当要显示第二行时地址码+0x40;
X |= 0x80;              // 算出指令码
WriteCommandLCM(X, 0);  //这里不检测忙信号,发送地址码
WriteDataLCM(DData);
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
{
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF;                      //限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x20) //若到达字串尾则退出,字符长度小于32
  {
   if (X <= 0xF)                //X坐标应小于0xF(15)
    {
     DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
     ListLength++;
     X++;
    }
  }
}
void Delay5Ms(void)         //延时5ms
{
 unsigned int i;
 for(i=0;i<5000;i++)
 ;;
}
void Delay400Ms(void)      //延时400ms
{
unsigned char TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
  TempCycB=7269;
  while(TempCycB--);
};   
}

使用特权

评论回复
17
cqxwj| | 2008-3-26 11:41 | 只看该作者

单片机学习板 提供什么东西呀?

使用特权

评论回复
18
cqxwj| | 2008-3-27 14:03 | 只看该作者

top

支持!

使用特权

评论回复
19
soso|  楼主 | 2008-3-28 20:32 | 只看该作者

呵呵

几天都没来了 呵呵

使用特权

评论回复
20
soso|  楼主 | 2008-3-30 16:10 | 只看该作者

dajiahao

大家好啊,来过的也留点意见啊 !谢谢了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

0

帖子

1

粉丝