首页 >> 教学科研 >> 实训指导 >> 详细内容
 
实训指导 >> 正文
《单片机技术综合实训》课程实训指导书
日期:2020-05-10 00:00:00  发布人:xxgcx  浏览量:991

海南工商职业学院

《单片机技术综合实训》课程

 

实训指导书

 

 

主编:胡晓辉、王锋

参编:王伟、许桂月、金晶

202041


 

   

 

一、总体要求... 3

二、实训项目... 5

实训一:led灯闪烁... 5

实训二:跑马灯... 6

实训三:蜂鸣器驱动实训... 8

实训四:继电器驱动实训... 10

实训五:交通灯实训... 11

实训六:外部中断驱动led. 17

实训七:静态数码管显示实验(直连)... 19

实训八:动态数码管显示实验(直连)... 21

实训九:译码器实验... 23

实训十:独立按键实验(结合数码管)实验... 25

实训十一:矩阵键盘扫描实验... 31

实训十二:74hc595驱动共阳极数码管(I/O口扩展)... 34

实训十三:Led点阵(16x16点阵)... 37

实训十四:步进电机驱动实验... 40

实训十五:液晶屏LCD1602. 43

实训十六:LCD1602示接收到串口数据(串口通信)... 45

实训十七:12864中文点阵字符显示实验... 48


一、总体要求

1、课程实训目的

1进一步掌握单片机结构及其工作原理

2理解单片机C语言编程方法

3)掌握单片机外围电路的控制方法。

4)根据本校学生实际培养学生对单片机的学习兴趣。

2、课程实训项目统计与学时分配

序号

实训项目名称

学时

分配

必开

/选开

可否

开出

平台

类别

实训

结果

1

Led灯闪烁

2

必开

 

 

 

 

 

 

 

 

 

 

 

 

 

真实

设备

 

分析原理

编写程序

设计作品

 

2

跑马灯

2

必开

3

蜂鸣器驱动实训

2

必开

4

继电器驱动实训

2

必开

5

交通灯实训

2

必开

6

外部中断驱动led显示实验

2

必开

7

静态数码管显示实验(直连)

2

必开

8

动态数码管显示实验(直连)

4

必开

9

138译码器驱动数码管显示实验

2

必开

10

独立按键实验(结合数码管)

4

必开

11

矩阵键盘扫描

4

必开

12

74hc595驱动共阳极数码管(I/O口扩展)

2

必开

13

Led点阵(16x16点阵)

4

必开

14

步进电机驱动

2

必开

15

液晶屏LCD1602

4

必开

16

LCD1602显示接收到串口数据(串口通信)

4

选开

17

12864中文点阵字符显示

4

选开

合计

48

15/2

100%

 

3、课程实训资源

1)配套教材:《单片机原理及应用项目教程》(基于C语言),作者:杨居义,2014

  参考资料:51单片机入门到精通

2)实训场地及条件:

实训场地:智能控制实训室

实训设备或平台:普中科技单片机实验开发仪

4、课程考核方法

 

考核方法

得分

方法

项目式考试(过程化考核)

100

考核

自我评价

软件(程序)完整度

软件件调试完成(结果正确)

遵守实训室纪律、爱护设备

 

比重

10%10分)

40%40分)

40%40分)

20%40分)

100%(100)

项目总分

 

 

 

 

 

每个项目得分(17个项目)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

课程成绩

每项得分和/17=   (                 )

采用自我评价和项目式评价的考核方式


二、实训项目

实训一:led灯闪烁

1、实训目的与要求

掌握普中科技单片机开发仪的使用方法(驱动识别、程序下载)

学会查看常见单片机原理图的方法

理解单片机I/O口的操作方法

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将led与相应I/O口连接在一起

3)对照原理图编写led闪烁程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  单片机I/O口位的含义;

n  单片机I/O口输入输出结构理解;

4、实训步骤


1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,对照原理图将JP8J12连在一起;

 

3)打开KEIL软件编写led闪烁程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

#include           //此文件中定义了51的一些特殊功能寄存器

//--声明全局函数--//

Sbit   led=P1^0;

void Delay10ms(unsigned int c);   //延时10ms

void main()

{

       while(1)

       {

              led  = 0x00; //P0口为低电平

              Delay10ms(50); //调用延时程序,修改括号里面的值可以调整延时时间

              led = 0xff; //P0口为高电平

              Delay10ms(50); // 调用延时程序

       }

}

void Delay10ms(unsigned int c)   //误差 0us

{

    unsigned char a, b;

    for (;c>0;c--)

       {

              for (b=38;b>0;b--)

              {

                     for (a=130;a>0;a--);

              }

       }

}

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

8led闪烁

8、思考与练习

1)多个led怎么编程

274HC573驱动原理

实训二:跑马灯

1、实训目的与要求

巩固单片机I/O口操作方法。

掌握单片机延时函数定义方法。

掌握单片机左移右移函数调用及移动原理。

掌握普中科技单片机试验仪原理图接线方法。

2、实训内容

1)打开原理图并阅读原理图根据实验任务接线

2)建立KEIL工程

3)完成led间隔500ms右移一次任务

4)调试实验结果

5)根据实验要求对做完任务进行总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  74hc573驱动方法

n  右移函数的移动原理

n  单片机I/O口操作方法

4、实训步骤

1)将开发板与电脑连接在一起检查串口驱动是否正确,记录串口号

2)将单片机P0口与开发板J12连在一起

3)建立KEIL工程编写驱动程序,使开发板上的led灯从左往右点亮,间隔时间为500ms

4)打开isp下载软件,选择单片机型号(stc90c516RD+),打开hex文件,选择对应串口号

5)下载程序,观察实验结果

  实验原理图

说明: 说明: C:\Users\admin\AppData\Roaming\Tencent\Users\451790581\QQ\WinTemp\RichOle\4~@)357VW({HA7OIF5DN_BE.png

5、实训小结(或结果)

#include

#include

//--声明全局函数--//

void Delay10ms(unsigned int c);   //延时10ms

void main(void)

{

       unsigned char LED;

       LED = 0xFE;

       while(1)

       {

              P0 = LED;

              Delay10ms(50);

              LED = _crol_(LED,1);  //循环右移1位,点亮下一个LED  此函数于库函数

       }

}

void Delay10ms(unsigned int c)   //误差 0us

{

    unsigned char a, b;

    for (;c>0;c--)

       {

              for (b=38;b>0;b--)

              {

                     for (a=130;a>0;a--);

              }        

       }

}

6、评定标准

l  能否正确使用开发板

l  能否正确建立keil工程

l  led灯能否逐个间隔500ms从左到右点亮

l  听从指挥爱护设备

7、实训任务拓展

间隔1s从左到右点亮,然后间隔500ms从右往左点亮,整体间隔100ms闪烁3次,全体熄灭。

8、思考与练习

1P0口在使用的过程中为什么加上上拉电阻?

2)点亮led灯时通过右移函数,每次右移2个实验现象有什么区别?

 

实训三:蜂鸣器驱动实训

1、实训目的与要求

了解蜂鸣器的种类,有源无源蜂鸣器的区别。

掌握蜂鸣器原理图电路。

掌握蜂鸣器驱动的程序代码。

掌握蜂鸣器的整个驱动流程。

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将蜂鸣器电路与相应I/O口连接在一起

3)对照原理图编写无源蜂鸣器驱动程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  蜂鸣器相关知识;

n  单片机I/O口输入输出知识;

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,对照原理图将J8p1.5连在一起;

3)打开KEIL软件编写蜂鸣器驱动程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

说明: 蜂鸣器电路图5、实训小结(或结果)

#include

sbit Beep =  P1^5 ;

void delay(unsigned int i) ;

void main()

{

     Beep= 1;

     delay(5);

     Beep= 0;

     delay(5);

}

 void delay(unsigned int i)

{

    char j;

    for(i; i > 0; i--)

        for(j = 200; j > 0; j--);

}

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

实现在实训2中跑马灯中加入报警效果

8、思考与练习

1)如何实现蜂鸣器演奏音乐

实训四:继电器驱动实训

1、实训目的与要求

了解继电器原理。

掌握单片机控制继电器原理和方法。

掌握继电器驱动的原理图电路和程序代码。

实现按键控制继电器的整个驱动流程。

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将继电器电路与相应I/O口连接在一起

3)对照原理图编写继电器驱动程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  继电器原理;

n  单片机I/O口输入输出使用;

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,对照原理图将J2p1.4连在一起;并将p0.0口连接到继电器。

3)打开KEIL软件编写继电器驱动程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

#include

//--定义要使用的IO--//

sbit RELAY = P1^4;  //定义继电器使用的IO

sbit K1    = P0^0;  //定义按键使用的IO

void main()

{

while(1)

  {

    if(K1 == 0)  //如果按键按下

    {

     RELAY = 0; //闭合

    }

    else

    {

    RELAY = 1;

    }

  }

}

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

实现在继电器和蜂鸣器同时响应。

8、思考与练习

1)加入延时程序对继电器的控制

实训五:交通灯实训

1、实训目的与要求

掌握定时器T0的代码配置和实现。

掌握动态显示数码管的使用及代码的实现。

实现交通灯的控制流程。

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将数码管电路与相应I/O口连接在一起

3)对照原理图编写交通灯驱动程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  动态显示数码管;

n  定时器T0

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,按以下图接线

3)打开KEIL软件编写交通灯流程程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

#include

//--定义使用的IO--//

#define GPIO_DIG   P0

#define GPIO_PLACE P1

#define GPIO_TRAFFIC P2

sbit RED10   = P2^0;   //上人行道红灯

sbit GREEN10 = P2^1;   //上人行道绿灯

sbit RED11   = P2^2;

sbit YELLOW11= P2^3;

sbit GREEN11 = P2^4;

sbit RED00   = P3^0; //右人行道红灯

sbit GREEN00 = P3^1; //右人行道绿灯

sbit RED01   = P2^5;

sbit YELLOW01= P2^6;

sbit GREEN01 = P2^7;

//--定义全局变量--//

unsigned char code DIG_PLACE[8] = {

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制

unsigned char code DIG_CODE[17] = {

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsigned char DisplayData[8];

//用来存放要显示的8位数的值

unsigned char Time, Second;       //用来存放定时时间

//--声明全局函数--//

void DigDisplay(); //动态显示函数

void Timer0Cofig(void);

void main(void)

{

    Second = 1;

    Timer0Cofig();

    while(1)

    {

       if(Second == 70)

        {

           Second = 1;

       }

       //--宝田路通行30--//

       if(Second < 31)

       {

           DisplayData[0] = 0x00;

           DisplayData[1] = 0x00;

           DisplayData[2] = DIG_CODE[(30 - Second) % 100 / 10];

           DisplayData[3] = DIG_CODE[(30 - Second) %10];

           DisplayData[4] = 0x00;

           DisplayData[5] = 0x00;

           DisplayData[6] = DisplayData[2];

           DisplayData[7] = DisplayData[3];

           DigDisplay();

           //--宝田路通行--//

           GPIO_TRAFFIC = 0xFF;  //将所有的灯熄灭

           RED00 = 1;

           GREEN00 = 1;

           GREEN11 = 0;    //宝田路绿灯亮         

           GREEN10    = 0;    //宝田路人行道绿灯亮

           RED01 = 0;      //前进路红灯亮

           RED00 = 0;      //前进路人行道红灯亮

       }

       //--黄灯等待切换状态5--//

       else if(Second < 36)

       {

           DisplayData[0] = 0x00;

           DisplayData[1] = 0x00;

           DisplayData[2] = DIG_CODE[(35 - Second) % 100 / 10];

           DisplayData[3] = DIG_CODE[(35 - Second) %10];

           DisplayData[4] = 0x00;

           DisplayData[5] = 0x00;

           DisplayData[6] = DisplayData[2];

           DisplayData[7] = DisplayData[3];

           DigDisplay();

           //--黄灯阶段--//

           GPIO_TRAFFIC = 0xFF;  //将所有的灯熄灭

           RED00 = 1;

           GREEN00 = 1;

           YELLOW11 = 0;    //宝田路黄灯亮        

           RED10  = 0;     //宝田路人行道红灯亮

           YELLOW01 = 0;    //前进路红灯亮

           RED00 = 0;       //前进路人行道红灯亮

       }

       //--前进路通行--//

       else if(Second < 66)

       {

           DisplayData[0] = 0x00;

           DisplayData[1] = 0x00;

           DisplayData[2] = DIG_CODE[(65 - Second) % 100 / 10];

           DisplayData[3] = DIG_CODE[(65 - Second) %10];

           DisplayData[4] = 0x00;

           DisplayData[5] = 0x00;

           DisplayData[6] = DisplayData[2];

           DisplayData[7] = DisplayData[3];

           DigDisplay();

           //--黄灯阶段--//

           GPIO_TRAFFIC = 0xFF;  //将所有的灯熄灭

           RED00 = 1;

           GREEN00 = 1;

           RED11 = 0;       //宝田路红灯亮        

           RED10 = 0;       //宝田路人行道红灯亮

           GREEN01 = 0;     //前进路绿灯亮

           GREEN00 = 0;     //前进路人行道绿灯亮

       }

       //--黄灯等待切换状态5--//

       else

       {

           DisplayData[0] = 0x00;

           DisplayData[1] = 0x00;

           DisplayData[2] = DIG_CODE[(70 - Second) % 100 / 10];

           DisplayData[3] = DIG_CODE[(70 - Second) %10];

           DisplayData[4] = 0x00;

           DisplayData[5] = 0x00;

           DisplayData[6] = DisplayData[2];

           DisplayData[7] = DisplayData[3];

           DigDisplay();

           //--黄灯阶段--//

           GPIO_TRAFFIC = 0xFF;  //将所有的灯熄灭

           RED00 = 1;

           GREEN00 = 1;

           YELLOW11 = 0;    //宝田路黄灯亮        

           RED10  = 0;     //宝田路人行道红灯亮

           YELLOW01 = 0;    //前进路红灯亮

           RED00 = 0;       //前进路人行道红灯亮

       }

    }            

}

void DigDisplay()

{

    unsigned char i;

    unsigned int j;

    for(i=0; i<8; i++)

    {

       GPIO_PLACE = DIG_PLACE[i];     //发送位选

       GPIO_DIG = DisplayData[i];     //发送段码

       j = 10;             //扫描间隔时间设定

       while(j--);  

       GPIO_DIG = 0x00;               //消隐

    }

}

void Timer0Cofig(void)

{

    TMOD = 0x01;     //定时器0选择工作方式1

    TH0  = 0x3C;  //设置初始值,定时50MS

    TL0  = 0xB0;

    EA   = 1;       //打开总中断

    ET0  = 1;     //打开定时器0中断

    TR0  = 1;     //启动定时器0

}

 

void Timer0() interrupt 1

{

    TH0 = 0x3C;   //设置初始值

    TL0 = 0xB0;

    Time++;

    if(Time == 20)

    {

       Second ++;

       Time = 0;

    }

}

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

处理紧急状况,由按键引发外部中断进入紧急状况。在紧急状况下前进路、宝田路均为红灯,15秒钟后恢复进入紧急状况之前的正常运行状态。。

8、思考与练习

1)实现当绿灯闪烁和黄灯亮时,蜂鸣器发声提示。

 

实训六:外部中断驱动led

1、实训目的与要求

掌握中断的概念

理解单片机中断整个工作过程

掌握外部中断0外部中断1的使用方法

理解中断服务函数的工作过程

2、实训内容

1)根据实训任务及原理图将相关接线连接正确

2)根据实训任务编写按键触发外部中断的程序

3)检查并验证试验结果

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  外部中断的的原理

n  外部中断的触发方法

n  中断服务函数的格式

4、实训步骤

1)检查开发装置驱动线及串口是否正确

2)将开发板上面的K1键的引出线接单片机P3.2口的引出线,将单片机的P2口与J12连在一起

3)建立KEIL工程,定义P2口的接口(详细定义见实训小结的驱动程序)

4)调试keil程序使结果无错误、无警告;生成hex文件

5)打开isp下载软件,下载hex文件到单片机中;

6)按下K2键查看实验结果。

5、实训小结(或结果)

#include < reg51.h >

sbit led1=P2^0;

sbit led2=P2^1;

unsigned int i;

 i=50000;

void main(void)

{    

   IT0=1; //下降沿触发

   EA=1;

   EX0=1;

 

   while(1)

   {   

                led1=0;

          while(1--)

          led1=1;

          while(1--)

   }

}

void  counter(void) interrupt 0

{

   EX0=0;

   led2=1;

   while(i--);

   EX0=1;

   led2=0;

}

6、评定标准

l  正确接线、正确使用开发装置

l  能够正确编写外部中断驱动程序

l  实验结果正确

l  实验态度及行为良好

7、实训任务拓展

使用外部中断2如何来拓展以上实训?

8、思考与练习

1)外部中断设为低电平触发该怎么设置?

2)外部中断可不可以用来检测按键是否被按下?

实训七:静态数码管显示实验(直连)

1、实训目的与要求

掌握共阴极、共阳极数码管内部结构

掌握单片机控制数码管显示的原理

掌握一维数组的定义及调用方法

2、实训内容

1)分析共阴极、共阳极数码管内部结构

2)单片机P0P1口控制数码管的方法

3)编写静态数码管的驱动程序

4)调试实训结果

5)验证实训内容

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  共阴极、共阳极数码管的内部结构

n  数码管驱动原理

4、实训步骤

1)检查开发板的驱动是否安装正确,记录串口号

2)将开发板上的JP8J16JP10J12

3)建立keil工程,编写驱动程序

4)调试实验结果,生成hex文件

4)打开isp下载软件,下载程序,调试结果

5)提交实验作业并总结

5、实训小结(或结果)

#include

#define GPIO_DIG P1

void Delay10ms(unsigned int c);   //误差 0us

unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,

                                 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};

void main(void)

{

       unsigned char i = 0;

       GPIO_DIG=0;

       while(1)

       {

         for(i=0;i<16;i++)

         {

           P0=DIG_CODE[i];

           Delay10ms(50);

         } 

       }                         

}

void Delay10ms(unsigned int c)   //误差 0us

{

    unsigned char a, b;

    for (;c>0;c--)

       {

              for (b=38;b>0;b--)

              {

                     for (a=130;a>0;a--);

              }         

       }      

}

6、评定标准

l  接线正确

l  驱动程序无警告无错误

l  实验结果正确

l  遵守实训室规章制度

7、实训任务拓展

如何让两个甚至多个数码管同时显示不同数字?

8、思考与练习

1)多个数码管显示不同数字?

2)共阳极数码管驱动程序怎么编写?

实训八:动态数码管显示实验(直连)

1、实训目的与要求

掌握共阴极数码管动态显示工作原理

掌握单片机驱动数码管动态显示的工作原理

2、实训内容

1)根据动态显示任务接线

2)分析动态显示的工作原理

3)编写共阴极数码管的驱动程序

4)调试程序使结果正确

5)实训总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  共阴极数码管的动态显示原理

n  单片机驱动共阴极数码管驱动原理

4、实训步骤

1)检查开发板的驱动是否安装正确,记录串口号

2)将开发板上的JP8J16JP10J12

3)建立keil工程编写动态显示驱动程序

4)生成hex文件并下载到单片机中去

5)提交文件并总结

5、实训小结(或结果)

#include

sbit seg1=P1^0;

sbit seg2=P1^1;

void Delay10ms(unsigned int c);   //误差 0us

unsigned char code DIG_CODE[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,

                                 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71};

void display(unsigned char shi,unsigned char ge)

{

   seg1=0;seg2=1;

   P0=DIG_CODE[shi];

   Delay10ms(1);

   P0=0;

   seg1=1;seg2=0;

   P0=DIG_CODE[ge];

   Delay10ms(1);

   P0=0;

}

void main(void)

{

 

       while(1)

       {

         display(5,8);            

       }                         

}

void Delay10ms(unsigned int c)   //误差 0us

{

    unsigned char a, b;

    for (;c>0;c--)

       {

              for (b=38;b>0;b--)

              {

                     for (a=130;a>0;a--);

              }         

       }      

}

6、评定标准

l  能够正确理解动态显示的原理

l  能够正确编写驱动程序

l  能够正确连接相关I/O

l  能够正确下载并调试程序

7、实训任务拓展

结合开发板上面的独立按键制作一个单片机定时器

8、思考与练习

1)多个数码管显示数据是不是同时显示的?

28个数码管显示不同数据间隔5ms,数据能否稳定显示?

实训九:译码器实验

1、实训目的与要求

了解译码器的相关知识。

掌握八字段LED数码管驱动显示工作原理

掌握74LS138三—八译码器工作原理及如何控制数码管工作原理

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将译码器电路与相应I/O口连接在一起

3)对照原理图编写交通灯驱动程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  字段LED数码管驱动显示工作原理

n  译码器的相关知识;

n  数码管工作原理

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,ABC分别接p20,p21,p22.P0口接数码管,以下表格所示。

输入

38译码器输出

现象

P2口的值

P21

P21

P20

C

B

A

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

 

0x00

0

0

0

1

1

1

1

1

1

1

0

Y0对应的数码管亮

0x01

0

0

1

1

1

1

1

1

1

0

1

Y1对应的数码管亮

0x02

0

1

0

1

1

1

1

1

0

1

1

Y2对应的数码管亮

0x03

0

1

1

1

1

1

1

0

1

1

1

Y3对应的数码管亮

0x04

1

0

0

1

1

1

0

1

1

1

1

Y4对应的数码管亮

0x05

1

0

1

1

1

0

1

1

1

1

1

Y5对应的数码管亮

0x06

1

1

0

1

0

1

1

1

1

1

1

Y6对应的数码管亮

0x07

1

1

1

0

1

1

1

1

1

1

1

Y7对应的数码管亮

 

3)打开KEIL软件编写译码器流程程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

#include

//--定义使用的IO--//

#define GPIO_DIG P0

sbit LSA=P2^0;

sbit LSB=P2^1;

sbit LSC=P2^2;

//--定义全局变量--//

unsigned char code DIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsigned char DisplayData[8];

//用来存放要显示的8位数的值

 

//--声明全局函数--//

void DigDisplay(); //动态显示函数

void main(void)

{

    unsigned char i;

    for(i=0;i<8;i++)

    {

       DisplayData[i]=DIG_CODE[i];

    }

    while(1)

    {

       DigDisplay();

    }            

}

void DigDisplay()

{

    unsigned char i;

    unsigned int j;

    for(i=0;i<8;i++)

    {

       switch(i)  //位选选择点亮的数码管

       {

           case(0):

              LSA=0;LSB=0;LSC=0; break;//显示第0

           case(1):

              LSA=1;LSB=0;LSC=0; break;//显示第1

           case(2):

              LSA=0;LSB=1;LSC=0; break;//显示第2

           case(3):

              LSA=1;LSB=1;LSC=0; break;//显示第3

           case(4):

              LSA=0;LSB=0;LSC=1; break;//显示第4

           case(5):

              LSA=1;LSB=0;LSC=1; break;//显示第5

           case(6):

              LSA=0;LSB=1;LSC=1; break;//显示第6

           case(7):

              LSA=1;LSB=1;LSC=1; break;//显示第7 

       }

       GPIO_DIG=DisplayData[i];//发送段码

       j=10;                    //扫描间隔时间设定

       while(j--);  

       GPIO_DIG=0x00;//消隐

    }

}

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

74HC138接成的4线-16线译码器

8、思考与练习

174HC138接成的4线-16线译码器

实训十:独立按键实验(结合数码管)实验

1、实训目的与要求

了解按键与单片机接口原理图。

掌握八字段LED数码管驱动显示工作原理。

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将按键、数码管电路与相应I/O口连接在一起

3)对照原理图编写驱动程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

l      按键扫描代码;

l      定时器的使用;

l      数码管显示原理;

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2P1.0~P1.5接按键,功能实现及流程:

1,在无指令的情况下 数码管以一秒加一的速度开始0~99计时,到99自动弹回0重新计时。

2,按下key1数码管清零;之后松开key1又开始计时。

3,按下key2计时暂停在当前的那位,要使其继续计时必须按下key4,才可以解除暂停。

4,按下key3自动加10计时也就是说每按下一次指示器加10;比如由20变为30,(按下key3之后必须按下key4才会加10否则只会暂停在当前 那位,因为总中断再被关闭后在我写的这个程序上只有按下key4才会被从新打开)

5,按下key5自动减10原理和key3差不多,但要注意的是只是在当前的那位减10而不会出现倒计时!(这里不需要在按下key5后按key4才能启动,直接按下key5就可以减10

3)打开KEIL软件编写译码器流程程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

#include

#define uchar unsigned char

#define uint unsigned int

uchar aa,bb,ge,shi,bai;

uchar code shuzi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit key4=P1^4;

sbit key5=P1^5;

void time(uchar k)

{

uchar x,y;

for(x=100;x>0;x--)

for(y=k;y>0;y--);

}

void dsq0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

aa++;

        if(aa==20)

                {

                aa=0;

                bb++;

                        if(bb==100)

                                {

                                bb=0;

                                }

bai=bb/10;

shi=bb%10/10;

ge=bb%10;

                }

}

void keyscan()

{

        if(key1==0)

        {

        time(5);

                if(key1==0)

                {

                bb=0;

                }

        }

        if(key1==1)

        {

        time(5);

                if(key1==1)

                {

               

                }

        }

        if(key2==0)

        {

        time(5);

                if(key2==0)

                {

                EA=0;

       

                }

        }

        if(key2==1)

        {

        time(5);

                if(key2==1)

                {

 

                }

        }

        if(key3==0)

        {

                time(5);

                        if(key3==0)

                        {

                        EA=0;

                        bb++;

                                if(bb==99)

                                {

                                bb=0;

                                }

                        }

        }

        if(key3==1)

        {

        time(5);

                        if(key3==1)

                        {

                        }

        }

        if(key4==0)

        {

        time(5);

                if(key4==0)

                {

                EA=1;

                }

        }

        if(key4==0)

        {

        time(5);

                if(key4==0)

                {

                }

        }

        if(key5==0)

        {

        time(5);

                if(key5==0)

                {

                bb--;

                        if(bb==0)

                        {

                        bb=100;

                        }

                }

        }

                if(key5==0)

        {

        time(5);

                if(key5==0)

                {

                }

        }

}

void init()

{

P0=0;

P2=1;

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

IT0=0;

}

void display( bai,shi,ge)

{

 

P0=shuzi[bai];

P2=0xfd;

time(1);

P0=0x00;

P2=0x00;

 

P0=shuzi[shi];

P2=0xfe;

time(1);

P0=0x00;

P2=0x00;

 

P0=shuzi[ge];

P2=0xfb;

time(1);

P0=0x00;

P2=0x00;

}

 

void main()

{

init();

 

        while(1)

        {

        keyscan();

        display(bai,shi,ge);

        }

} 6、评定标准

l      能正确查看usb转串口驱动是否正常;

l      能搭建单片机开发环境

l      能调试单片机程序

l      能听从指挥,爱护实训设备;

7、实训任务拓展

实现按键的累加实验并在数码管显示

8、思考与练习

1)定时器原理

实训十一:矩阵键盘扫描实验

1、实训目的与要求

理解矩阵键盘扫描的原理;

掌握矩阵键盘与51单片机原理图接口和编程方法。

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将矩阵键盘电路与相应I/O口连接在一起

3)对照原理图编写扫描矩阵键盘电路程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  按钮矩阵原理,单片机I/O口的使用;

n  防抖的意义;

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板,原理图接线图如下所示。

3)打开KEIL软件编写按钮矩阵程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

#include

//--定义使用的IO--//

#define GPIO_DIG P0     

#define GPIO_KEY P1

//--定义全局变量--//

unsigned char code DIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsigned char KeyValue;

//用来存放读取到的键值

//--声明全局函数--//

void Delay10ms(unsigned int c);    //延时10ms

void KeyDown();      //检测按键函数

void main(void)

{

    while(1)

    {

       KeyDown();

       GPIO_DIG = ~DIG_CODE[KeyValue];

    }             

}

void KeyDown(void)

{

    char a = 0;

    GPIO_KEY=0x0f;

    if(GPIO_KEY!=0x0f)//读取按键是否按下

    {

       Delay10ms(1);//延时10ms进行消抖

       if(GPIO_KEY!=0x0f)//再次检测键盘是否按下

       {

          

           //测试列

           GPIO_KEY=0X0F;

           switch(GPIO_KEY)

           {

              case(0X07):   KeyValue=0;break;

              case(0X0b):   KeyValue=4;break;

              case(0X0d): KeyValue=8;break;

              case(0X0e):   KeyValue=12;break;

           }

           //测试行

           GPIO_KEY=0XF0;

           switch(GPIO_KEY)

           {

              case(0X70):   KeyValue=KeyValue+3;break;

              case(0Xb0):   KeyValue=KeyValue+2;break;

              case(0Xd0): KeyValue=KeyValue+1;break;

              case(0Xe0):   KeyValue=KeyValue;break;

           }

           while((a<50) && (GPIO_KEY!=0xf0))  //检测按键松手检测

           {

              Delay10ms(1);

              a++;

           }

       }

    }

}

void Delay10ms(unsigned int c)   //误差 0us

{

    unsigned char a, b;

 

    //--c已经在传递过来的时候已经赋值了所以在for语句第一句就不用赋值了--//

    for (;c>0;c--)

    {

       for (b=38;b>0;b--)

       {

           for (a=130;a>0;a--);

       }         

    }      

}6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

通过按键实现两个按键的加法,并在数码管显示。

8、思考与练习

1)按钮矩阵原理

 

实训十二:74hc595驱动共阳极数码管(I/O口扩展)

1、实训目的与要求

掌握74HC595(串入并出)基本原理和使用

掌握I2C总线的驱动方法

掌握74HC595编程方法

理解单片机外围芯片编程思想

2、实训内容

1)分析共阳极数码管工作原理

2)根据实训任务接线

3)分析74HC595的芯片手册

4)根据芯片手册编写驱动程序

5)调试、下载单片机程序

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  74HC595串入并出原理

n  共阳极数码管控制方法

4、实训步骤

1)检查开发板的驱动是否安装正确,记录串口号

2)将开发板上面的P595AJP3连在一起,P595跳线帽要接上

3)打开KEIL软件,建立keil工程

4)打开74hc芯片手册编写驱动程序

5)调试并下载

6)实训总结,提交作业

5、实训小结(或结果)

#include

#include

#define  NOP() _nop_()  /* 定义空指令 */

sbit MOSIO =P3^4;

sbit R_CLK =P3^5;

sbit S_CLK =P3^6;

void delay(unsigned int i);      //函数声名

void HC595SendData(unsigned char SendVal);

main()

{  unsigned char Led=0xfe; 

   HC595SendData(0xff);      

  while(1)

  { 

           HC595SendData(Led);  

              Led<<=1;

              Led  = Led| 0x01; 

           if (Led == 0xff )   

              delay(200);

  }  

}    

void delay(unsigned int i)

{

    unsigned int j;

    for(i; i > 0; i--)

        for(j = 300; j > 0; j--);

}

void HC595SendData(unsigned char SendVal)

  unsigned char i;

             

  for(i=0;i<8;i++)

   {

       if((SendVal<最高位与SendVal左移的最高位 进行逻辑运算

       else MOSIO=0;      // 如果为真 MOSIO = 1 

       S_CLK=0;

       NOP();    //产生方形波

       NOP();

       S_CLK=1;     

   }

     R_CLK=0; //set dataline low

  NOP();   //产生方形波

  NOP();

  R_CLK=1; //片选

}

6、评定标准

l  开发板接线正确

l  实验结果正确

l  遵守实验室规章制度

7、实训任务拓展

两片74HC595连接在一起怎么驱动?

8、思考与练习

1)如74HC595真值表所示并口在什么时候输出数据?

2)多片74HC595连在一起控制点阵led屏怎么驱动?

实训十三:Led点阵(16x16点阵)

1、实训目的与要求

掌握led点阵扫描原理

掌握74HC595串入并出的工作原理

掌握16x16点阵取模软件的使用方法

2、实训内容

1)按照任务设置连线

2)根据原理图分析16X16点阵行线和列线对应的595芯片

3)编写595芯片的驱动程序

4)按照步骤一次扫描点阵屏的行和列,理解点阵屏驱动原理

5)使用取模软件,按照横向取模方式将相关自己名字汉子取模

6)调试点阵屏显示汉字结果

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  8x816x16点阵显示屏驱动原理

n  474HC595级联驱动led屏的原理

4、实训步骤

1)检查开发板的驱动是否安装正确,记录串口号

2)将P595_A端口接J17P595_B端口接J18J21跳线跳左边,断开JP165,接JP595跳线帽,断开JP1302JP11

3)打开取模软件设置取模字形16x16,方向D0-D7,横向取模;字体为宋体、12号字如下图

4)如上图依次将自己姓名汉字通过取模软件取出字形码

5)编写16x16点阵汉字显示驱动程序,将取模得到的字形码定义成相关数组

6)调试程序,观察结果

7)总结实训过程,提交作业

5、实训小结(或结果)

定义74hc595I/O

sbit MOSIO = P3^4;

sbit R_CLK = P3^5;

sbit S_CLK = P3^6;

点阵显示数组,扫描行

uchar code tab0[] = {0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00};

显示汉字

uchar code tab1[] = {64,0,128,8,254,31,16,2,32,1,255,63,64,0,64,0,254,31,64,0,72,6,68,8,82,16,

32,0,0,0,0,0};

扫描行和列显示汉字

       for(ms = i; ms > 0; ms--)

              {

                     for(k = 0; k < 16; k++)                                    

                     {    

                     HC595SendData(~tab1[2*k +1],~tab1[2*k],tab0[2*k],tab0[2*k + 1]);

                     }             

              }

4595驱动程序

void HC595SendData(  uchar BT3, uchar BT2,uchar BT1,uchar BT0)

       uchar i;

       //--发送第一个字节--//

       for(i=0;i<8;i++)

       {

              MOSIO = BT3 >> 7 ;    //从高位到低位

              BT3 <<= 1;

              S_CLK = 0;

              S_CLK = 1;          

       }

       //--发送第一个字节--//

       for(i=0;i<8;i++)

       {

              MOSIO = BT2 >>7;      //从高位到低位

              BT2 <<= 1;

 

              S_CLK = 0;

              S_CLK = 1;   

       }

       //--发送第一个字节--//

       for(i=0;i<8;i++)

       {

              MOSIO = BT1 >> 7;            //从高位到低位

              BT1 <<= 1;

              S_CLK = 0;

              S_CLK = 1;   

       }

       //--发送第一个字节--//

       for(i=0;i<8;i++)

       {

              MOSIO = BT0 >> 7;            //从高位到低位

              BT0 <<= 1;

              S_CLK = 0;

              S_CLK = 1;

       }

       //--输出--//

       R_CLK = 0; //set dataline low

       R_CLK = 1; //片选

}

6、评定标准

l  接线正确

l  程序编译无误

l  点阵能够显示自己名字

l  遵守实训室纪律

7、实训任务拓展

点阵纵向横屏该怎么编写驱动程序?

8、思考与练习

1)如果扩展到32x32点阵屏以上驱动程序及电路该怎么修改?

2)滚动显示“海南工商职业学院欢迎您!”该怎么修改?

 

实训十四:步进电机驱动实验

1、实训目的与要求

理解步进电机工作原理。

实现步进电机单双八拍工作方式

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将步进电机与相应I/O口连接在一起

3)对照原理图编写步进电机驱动程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  单片机I/O口位的含义;

n  单片机I/O口输入输出结构理解;

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,接线图如下所示。

3)打开KEIL软件编写单双八拍工作流程程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

/**************************************************************************

*;   单双八拍工作方式:                                                        

*;   A-AB-B-BC-C-CD-D-DA (即一个脉冲,转 3.75 度)             

*    J14短路冒需断开                                                                   

************************************************************************* /

#include "reg52.h"

unsigned char code RUN[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};  //步进电机相序表

void delay(unsigned int t);

//步进电机驱动

void  motor_ffw()

 {

   unsigned char i;

 

      for (i=0; i<8; i++)       //一个周期转3.75*8=30

        {

          P1 = RUN[i]&0x1f;     //取数据

          delay(100);             //调节转速

        }

     }

 

/******延时函数****************/

void delay(unsigned int t)

{                           

   unsigned int k;

   while(t--)

   {

     for(k=0; k<60; k++)//用for的空循环延长程序的执行时间

     { }

   }

}

 

 

main()

{

    while(1)

    {

      motor_ffw(); //调用旋转处理函数

 

     }

}

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

通过按键控制步进电机的正转、反转和停止。

8、思考与练习

1)实现步进电机的减速、加速,正传反转实验。

 

实训十五:液晶屏LCD1602

1、实训目的与要求

掌握液晶显示屏LCD1602的驱动方法

理解单片机驱动液晶屏的思想

2、实训内容

1)根据实训任务在开发板上安装1602液晶屏

2)根据液晶屏的开发手册分析液晶屏的驱动原理

3)编写驱动程序

4)下载驱动程序并调试

5)总结实训结果

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  1602液晶显示屏的显示原理

n  1602液晶显示屏的驱动电路

4、实训步骤

1)检查开发板的驱动是否安装正确,记录串口号

2)查看开发板原理图1602液晶显示部分,找出RS\RW\EN对应单片机管教及数据输出控制I/0

3)在keil里面定义相关I/O

4)根据datasheet手册编写1602数据及指令读写程序

5)初始化1602液晶显示屏具体指令见液晶屏手册

6)调试并下载到单片机中

7)观察实训结果,提交实训作业

5、实训小结(或结果)

#include"reg51.h"

#define uchar unsigned char

#define uint unsigned int

sbit RS=P2^0;

sbit RW=P2^1;

sbit EN=P2^2;

uchar tab1[]="I MISS YOU !";

uchar tab2[]="I LOVE YOU !";

void delay(uchar m)

{

  uchar i,j;

  for(i=m;i>0;i--)

  for(j=110;j>0;j--); 

}

void write_com(uchar com)

{

   EN=0;

   RS=0;

   RW=0;

   P3=com;

   delay(2);

   EN=1;

   delay(5);

}

void write_dat(uchar dat)

{

  EN=0;

  RS=1;

  RW=0;

  P3=dat;

  delay(2);

  EN=1;

  delay(5);

}

void main()

{  uchar k;

  write_com(0x38);

  write_com(0x0c);

   write_com(0x06);

   write_com(0x01);

   write_com(0x80);

  

     for(k=0;k<=12;k++)

          write_dat(tab1[k]);

          delay(100);

          write_com(0x80+0x43);

        for(k=0;k<=12;k++)

           write_dat(tab2[k]);

            delay(10);

   while(1);

}

6、评定标准

l  能够建立keil工程

l  能够编写1602读或写数据函数

l  能够调用相关函数完成液晶屏初始化

l  液晶屏正确显示字符

l  遵守实训室纪律、爱护实训设备

7、实训任务拓展

如何在液晶屏上显示数据?

8、思考与练习

1)在液晶屏上面动态显示数据如20161121日等

实训十六:LCD1602显示接收到串口数据(串口通信)

1、实训目的与要求

掌握单片机串口通信的原理

掌握单片机串口通信的设置方法

掌握单片机串口通信的使用方法

2、实训内容

1)巩固液晶显示屏的驱动方法

2)单片机串口通信的原理

3)单片机串口通信接收数据的设置方法

4)单片机串口通信接收和发送数据的驱动编写

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  1602的驱动程序编写思想

n  单片机串口通信原理

4、实训步骤

1)检查开发板的驱动是否安装正确,记录串口号

2)打开串口调试助手如图

3)设置串口号(根据单片机串口通信资源管理器设置)波特率、数据位奇偶校验位等

4)对串口进行初始化

5)编写串口接收并显示的驱动程序

6)调试并下载驱动程序

7)在串口助手中输入需要发送的数据

8)检查液晶显示屏是否显示发送的数据(显示数据位bcd码)

5、实训小结(或结果)

串口初始化

void UsartConfiguration()

{

       SCON=0X50;               //设置为工作方式1

       TMOD=0X20;                     //设置计数器工作方式2

       PCON=0X80;               //波特率加倍

       TH1=0XF3;               //计数器初始值设置,注意波特率是4800

       TL1=0XF3;

       TR1=1;                                   //打开计数器

}

串口接收并显示接收数据

       if(RI == 1)                          //查看是否接收到数据

              {

                     receiveData = SBUF;     //读取数据

                     RI = 0;                         //清除标志位

                     LcdWriteCom(0xC0);

//--因为一次接受只能接收到8位数据,最大为255,所以只用显示百位之后--//

                     LcdWriteData('0' + (receiveData / 100));      // 百位

                     LcdWriteData('0' + (receiveData % 100 / 10)); // 十位

                     LcdWriteData('0' + (receiveData % 10));               // 个位

              }

液晶屏初始化指令

void LcdInit()          //LCD初始化子程序

{

       LcdWriteCom(0x32);     //8位总线转为4位总线

       LcdWriteCom(0x28);     //在四位线下的初始化

       LcdWriteCom(0x0c);  //开显示不显示光标

       LcdWriteCom(0x06);  //写一个指针加1

       LcdWriteCom(0x01);  //清屏

       LcdWriteCom(0x80);  //设置数据指针起点

}

6、评定标准

液晶屏能否正确显示字符或数据

串口能否发送数据

液晶屏能否显示发送数据

遵守实训室纪律、爱护实训设备

7、实训任务拓展

编写程序将单片机接收数据显示在串口助手上

8、思考与练习

1)如何实现在串口助手上面实现数据发送并返回?

实训十七:12864中文点阵字符显示实验

1、实训目的与要求

认识和熟悉LCD12864; 

了解看时序图及按时序图写驱动程序的一般方法;

实现12864进行字符串和汉字的显示

2、实训内容

1)调试单片机开发仪驱动设置

2)在单片机开发仪上将12864与相应I/O口连接在一起

3)对照原理图编写12864显示程序

4)调试程序并使用ISP下载软件下载程序到单片机中

5)观察实验现象并总结

3、实训准备

1)实训环境准备

硬件:(含耗材)普中科技单片机实验开发仪一套、电脑一台、杜邦线若干(耗材)

软件:keil uvision4      stc-isp4.8版本以上

资料:单片机原理与应用

2)相关知识要点

n  理解12864液晶屏基本原理和使用方法;

n  12864编程思想;

4、实训步骤

1)将单片机开发仪通过USB线与电脑连接在一起,查看电脑的设备管理器中usb转串口驱动是否正确;

2)打开开发板原理图,接线图如下所示。

3)打开KEIL软件编写12864液晶显示程序

4)调试程序正确无误,生成HEX文件

5)将生成HEX文件烧录到单片机试验仪中观察实验现象

6)实验结果正确,提交实验程序包,以备查验;

5、实训小结(或结果)

12864显示功能代码如下:

#include"st7565.h"

void LcdSt7565_WriteCmd(cmd)

{

    LCD12864_CS = 0;     //chip select,打开片选

    LCD12864_RD = 1;     //disable read读失能

    LCD12864_RS = 0;       //select command选择命令

    LCD12864_RW = 0;       //select write选择写模式

    _nop_();

    _nop_();

 

    DATA_PORT = cmd; //put command放置命令

    _nop_();

    _nop_();

 

    LCD12864_RW = 1;     //command writing 写入命令

}

 

void LcdSt7565_WriteData(dat)

{  

    LCD12864_CS = 0;     //chip select打开片选

    LCD12864_RD = 1;     //disable read读失能

    LCD12864_RS = 1;       //select data选择数据

    LCD12864_RW = 0;       //select write选择写模式

    _nop_();

    _nop_();

 

    DATA_PORT = dat;       //put data放置数据

    _nop_();

    _nop_();

 

    LCD12864_RW = 1;     //data writing写数据

}

 

void Lcd12864_Init()

{

    uchar i;

    LCD12864_RSET = 0;

    for (i=0; i<100; i++);

    LCD12864_CS = 0;

    LCD12864_RSET = 1;

   

    //----------------Star Initial Sequence-------//

    //------程序初始化设置,具体命令可以看文件夹下---//

 

    //--软件初始化--//

    LcdSt7565_WriteCmd(0xE2);  //reset

    for (i=0; i<100; i++);      //延时一下

 

    //--表格第8个命令,0xA0段(左右)方向选择正常方向(0xA1为反方向)--//

    LcdSt7565_WriteCmd(0xA1);  //ADC select segment direction

   

    //--表格第15个命令,0xC8普通(上下)方向选择选择反向,0xC0为正常方向--//

    LcdSt7565_WriteCmd(0xC8);  //Common direction

                     

    //--表格第9个命令,0xA6为设置字体为黑色,背景为白色---//

    //--0xA7为设置字体为白色,背景为黑色---//

    LcdSt7565_WriteCmd(0xA6);  //reverse display

 

    //--表格第10个命令,0xA4像素正常显示,0xA5像素全开--//

    LcdSt7565_WriteCmd(0xA4);  //normal display

   

    //--表格第11个命令,0xA3偏压为1/7,0xA2偏压为1/9--//

    LcdSt7565_WriteCmd(0xA2);  //bias set 1/9

   

    //--表格第19个命令,这个是个双字节的命令,0xF800选择增压为4X;--//

    //--0xF801,选择增压为5X,其实效果差不多--//

    LcdSt7565_WriteCmd(0xF8);  //Boost ratio set

    LcdSt7565_WriteCmd(0x01);  //x4

   

    //--表格第18个命令,这个是个双字节命令,高字节为0X81,低字节可以--//

    //--选择从0x00到0X3F。用来设置背景光对比度。---/

    LcdSt7565_WriteCmd(0x81);  //V0 a set

    LcdSt7565_WriteCmd(0x23);

 

    //--表格第17个命令选择调节电阻率--//

    LcdSt7565_WriteCmd(0x25);  //Ra/Rb set

   

    //--表格第16个命令电源设置。--//

    LcdSt7565_WriteCmd(0x2F);

    for (i=0; i<100; i++);

 

    //--表格第2个命令设置显示开始位置--//

    LcdSt7565_WriteCmd(0x40);  //start line

 

    //--表格第1个命令开启显示--//

    LcdSt7565_WriteCmd(0xAF);  // display on

    for (i=0; i<100; i++);

 

}

void Lcd12864_ClearScreen(void)

{

    uchar i, j;

 

    for(i=0; i<8; i++)

    {

       //--表格第3个命令,设置Y的坐标--//

       //--Y轴有64个,一个坐标8位,也就是有8个坐标--//

       //所以一般我们使用的也就是从0xB0到0x07,就够了--//

       LcdSt7565_WriteCmd(0xB0+i);

 

       //--表格第4个命令,设置X坐标--//

       //--当你的段初始化为0xA1时,X坐标从0x10,0x04到0x18,0x04,一共128位--//

       //--当你的段初始化为0xA0时,X坐标从0x10,0x00到0x18,0x00,一共128位--//

       //--在写入数据之后X坐标的坐标是会自动加1的,我们初始化使用0xA0所以--//

       //--我们的X坐标从0x10,0x00开始---//

       LcdSt7565_WriteCmd(0x10);

       LcdSt7565_WriteCmd(0x04);                           

      

       //--X轴有128位,就一共刷128次,X坐标会自动加1,所以我们不用再设置坐标--//

       for(j=0; j<128; j++)

       {

           LcdSt7565_WriteData(0x00);  //如果设置背景为白色时,清屏选择0XFF

       }

    }

}

#ifdef  CHAR_CODE

 

#include"charcode.h"

 

uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)

{

    uchar j, x1, x2, wordNum;

 

    //--Y的坐标只能从0到7,大于则直接返回--//

    if(y > 7)

    {

       return 0;

    }

 

    //--X的坐标只能从0到128,大于则直接返回--//

    if(x > 128)

    {

       return 0;

    }

    y += 0xB0;    //求取Y坐标的值

    //--设置Y坐标--//

    LcdSt7565_WriteCmd(y);

    while ( *cn != '\0') //在C语言中字符串结束以‘\0’结尾

    {  

   

       //--设置Y坐标--//

       LcdSt7565_WriteCmd(y);

 

       x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位

       x2 = x & 0x0F;          //去低四位

       //--设置X坐标--//

       LcdSt7565_WriteCmd(0x10 + x1);   //4

       LcdSt7565_WriteCmd(0x04 + x2);  //4

 

       for (wordNum=0; wordNum<50; wordNum++)

       {

           //--查询要写的字在字库中的位置--//

           if ((CN16CHAR[wordNum].Index[0] == *cn)

                &&(CN16CHAR[wordNum].Index[1] == *(cn+1)))

           {

              for (j=0; j<32; j++) //写一个字

              {     

                  if (j == 16)  //由于16X16用到两个Y坐标当大于等于16切换坐标

                  {

                  //--设置Y坐标--//

              LcdSt7565_WriteCmd(y + 1);

          

              //--设置X坐标--//

              LcdSt7565_WriteCmd(0x10 + x1);   //4

              LcdSt7565_WriteCmd(0x04 + x2);  //4

                  }

                  LcdSt7565_WriteData(CN16CHAR[wordNum].Msk[j]);

              }

              x += 16;

           }//if查到字结束     

       } //for查字结束  

       cn += 2;

    }   //while结束

    return 1;

}

 

#endif

6、评定标准

l  能正确查看usb转串口驱动是否正常;

l  能搭建单片机开发环境

l  能调试单片机程序

l  能听从指挥,爱护实训设备;

7、实训任务拓展

如何在LCD12864上任意画点

8、思考与练习

112864进行字符串和汉字的显示

 

 

参考教材:

1】单片机C语言程序设计实训100:基于8051+Proteus仿真(2) -彭伟

2】单片机原理与应用·实验实训和课程设计--陈朝大 (编者), 韩剑 (编者)

3】单片机实训项目解析(基于Proteus的汇编和C语言版)

附录一:普中科技实验开发板结构图

附录二:51单片机下载说明

附录三:普中科技原理图

 


 


点击数:991收藏本页