定时器、串行口以及人机交互综合编程

更新时间:2023-12-30 04:09:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六 定时器、串行口以及人机交互综合编程

一、实验目的

1、巩固掌握单片机定时器、串行口、键盘以及LCD显示的工作原理以及编程方法;

2、掌握单片机定时器、串行口以及人机交互的综合编程。 二、实验内容

1、复习定时器、串行口、键盘以及LCD显示的工作原理以及编程方法; 2、综合利用单片机定时器、串行口、键盘以及LCD显示编写具有一定功能的程序。 三、实验设备

1、STC单片机开发板; 2、PC机以及串口线。 四、实验分析及关键代码 #include \#include #include #define uchar unsigned char sbit KEY1=P2^6; //按下,值为0

sbit LEDB=P2^4; sbit LEDG=P2^5;

第 1 页 共 5 页

unsigned char row=1,col=1; unsigned char buf; bit flag=0; void init_serial() {

TMOD=0x20; //设置定时器1的方式

TH1=0xf3; //设置定时器1的初值 TL1=0xf3;

SCON=0x50; //设置串行口方式1,并允许接收

PCON=0x00; //波特率加倍位为0,串口通信的波特率为2400bps TR1=1; //启动定时器1 ES=0; EA=1; }

unsigned char read_key() {

unsigned char ans=0; if(!KEY1) //若有按键被按下 {

delay_nms(10);//消抖 if(!KEY1) {

第 2 页 共 5 页

}

}

}

while(!KEY1); //等待按键松开 return(1); //返回键值

return(0); //没有按键被按下

void DisplayLCD(void) { }

void main()

第 3 页 共 5 页

Write_Position(row,col); Write_Data(buf); col++; if (col>16) { }

row++;col=1; if (row>2) row=1;

{ uchar KeyCode=0; Initializa_LCD(); init_serial();

LEDB=1;LEDG=0;//指示关闭串口 //while(1) while(1) { KeyCode=read_key(); if(KeyCode==1) { LEDB=!LEDB;LEDG=!LEDG; Write_Command(0x01); row=1,col=1; delay_nms(10);

Write_Command(0x0e);

标不闪烁 delay_nus(100);

RI=0;flag=0;

串口接收到数据的标志 ES=!ES; //打开串口中断允许

第 4 页 共 5 页

//清除液晶显示器

//至少延迟1.64ms //显示功能开,有光标,光

//至少延迟40us

//清除串口请求标志位和

}

}

}

if (flag==1)

{DisplayLCD();

ES=1; //将buf的内容显示到LCD后,打开串口中断 flag=0; }

void serial() interrupt 4 using 1 { if(RI) {

RI=0;

buf=SBUF;

ES=0; //为了避免接收到的数据还没显示到LCD,又有串口中断发生,在

这里关闭串口中断允许

flag=1;

} }

第 5 页 共 5 页

本文来源:https://www.bwwdw.com/article/gm4x.html

Top