#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语言的最新标准,该标拦棚准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
#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条)