
#include <reg51.h>
#include <intrins.h>
unsigned char key_s, key_v, tmp
char code str[] = "welcome! www.willar.com \n\r"
void send_str()
bit scan_key()
void proc_key()
void delayms(unsigned char ms)
void send_char(unsigned char txd)
sbit K1 = P1^4
main()
{
TMOD = 0x20// 定时器1工作于8位自动重载模式, 用于产生波特率
TH1 = 0xFD// 波特率9600
TL1 = 0xFD
SCON = 0x50// 设定串行口工作方式
PCON &= 0xef// 波特率不倍增
TR1 = 1// 启动定时器1
IE = 0x0// 禁止任何中断
while(1)
{
if(scan_key()) // 扫描按键
{
delayms(10)// 延时去抖动
if(scan_key()) // 再次扫描
{
key_v = key_s// 保存键值
proc_key()// 键处理
}
}
if(RI) // 是否有数据到来
{
RI = 0
tmp = SBUF// 暂存接收到的数据
P0 = tmp// 数据传送到P0口
send_char(tmp)// 回传接收到的数据
}
}
}
bit scan_key()
// 扫描按键
{
key_s = 0x00
key_s |= K1
return(key_s ^ key_v)
}
void proc_key()
// 键处理
{
if((key_v &0x01) == 0)
{ // K1按下
send_str()// 传送字串"welcome!...
}
}
void send_char(unsigned char txd)
// 传送一个字符
{
SBUF = txd
while(!TI)// 等特数据传送
TI = 0// 清除数据传送标志
}
void send_str()
// 传送字串
{
unsigned char i = 0
while(str[i] != '\0')
{
SBUF = str[i]
while(!TI)// 等特数据传送
TI = 0// 清除数据传送标志
i++// 下一个字符
}
}
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i
while(ms--)
{
for(i = 0i <120i++)
}
}
拓展资料
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
1、51单片机串行口是独立的硬件,对其设置完之后,它就独立工作了。如果REN=1,它会自动检测RXD,当它收齐了一帧数据,就自动将数据放到(接收)SBUF,然后在RI置一。 CPU的中断系统,如果已经开放了串口中断,CPU就会自动转到0023H去执行程序。
2、例程:
#include <AT89X51.H>//单片机51头文件,存放着单片机的寄存器unsigned char dat //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
sbit gewei=P2^2 //个位选通定义
sbit shiwei=P2^3 //十位选通定义
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71}
//{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,}// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{unsigned int i
for(i=0 i<100 i++)
tc--}
}
void LED() //LED显示接收到的数据
{
shiwei=0
P0=~table[dat/16]
Delay(8)
shiwei=1
gewei=0
P0=~table[dat%16]
Delay(5)
gewei=1
}
void Init_Com(void)//功能:串口初始化,波特率9600,方式1
{
TMOD = 0x20
PCON = 0x00
SCON = 0x50
TH1 = 0xFd
TL1 = 0xFd
TR1 = 1
}
void main()//主程序功能:实现接收数据并把接收到的数据原样发送回去///////
{
Init_Com()//串口初始化
// P1=0xf0
while(1)
{
if ( RI ) //扫描判断是否接收到数据,
{
dat = SBUF//接收数据SBUF赋与dat
RI=0 //RI清零。
SBUF = dat//在原样把数据发送回去
}
LED() //显示接收到的数据
}
}
#include <stdio.h>#include <Windows.h>
int main(void)
{
FILE *fp
char temp
char buf[100]
if((fp = fopen("com3","r")) == NULL)
puts("this way doesn't work!\n")
else
puts("this way works!\n")
while(1)
{
temp = 0
fscanf(fp,"%c",&temp)
if(temp != 0)
putchar(temp)
else
Sleep(100)
}
fclose(fp)
return 0
}
以前弄的,好久没看了,不知到对不对。
还有下面这段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <Windows.h>
#include <stdio.h>
HANDLE hCom
int main(void)
{
hCom=CreateFile(TEXT("COM3"),//COM1口
GENERIC_READ|GENERIC_WRITE, //允许读和写
0, //独占方式
NULL,
OPEN_EXISTING, //打开而不是创建
0, //同步方式
NULL)
if(hCom==(HANDLE)-1)
{
printf("打开COM失败!\n")
return FALSE
}
else
{
printf("COM打开成功!\n")
}
SetupComm(hCom,1024,1024)//输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts
//设定读超时
TimeOuts.ReadIntervalTimeout=1000
TimeOuts.ReadTotalTimeoutMultiplier=500
TimeOuts.ReadTotalTimeoutConstant=5000
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=500
TimeOuts.WriteTotalTimeoutConstant=2000
SetCommTimeouts(hCom,&TimeOuts)//设置超时
DCB dcb
GetCommState(hCom,&dcb)
dcb.BaudRate=9600//波特率为9600
dcb.ByteSize=8//每个字节有8位
dcb.Parity=NOPARITY//无奇偶校验位
dcb.StopBits=ONE5STOPBITS//两个停止位
SetCommState(hCom,&dcb)
DWORD wCount//读取的字节数
BOOL bReadStat
while(1)
{
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR)//清空缓冲区
char str[9]={0}
printf("%s\n",str)
bReadStat=ReadFile(hCom,str,9,&wCount,NULL)
if(!bReadStat)
{
printf("读串口失败!")
return FALSE
}
else
{
str[8]='\0'
printf("%s\n",str)
}
Sleep(100)
}
}
以上两段代码是一年前弄的,我记得可以用,你试试。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)