#include <stdio.h>
#include <stdlib.h>/*与malloc.h差不多*/
#include <string.h>
#include <iostream>
using namespace std
#define maxlen 15
struct persons
{int num/*定义结构体数组用于缓存数据*/
char name[20]
char e_addr[20]
char tel_no[15]
char sim_no
char arch
}persons[maxlen]
typedef struct lnode
{ /*通讯录结构中结点的定义*/
int num
char name[20]
char e_addr[20]
char tel_no[15]
char sim_no
char arch
struct lnode *next
}listnode,*linklist
linklist head=NULL,r=NULL/*定义头指针厅灶汪和尾指针*/
listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7,*p8,*p9
int i
char name1[10],ch
char tel_no1[15]
char arch1
char sim_no1
char e_addr1[20]
char s1[20]
FILE *fp/扮仔*定义文件指针*/
void creat() /*将文件的信息读入结构体数组在转存入链表中*/
{ int j
long k
fp=fopen("数据文件.txt","r t")/*打开文件*/
if(fp!=NULL)
{for(i=0i<=maxleni++ )
{ j=fgetc(fp)
if(j==EOF)
return
k=i
fseek(fp,k*sizeof(struct persons),0)/*读取一个人的信息*/
fread(&persons[i],sizeof(struct persons),1,fp)
s=(linklist)malloc(sizeof(listnode))/*装存入链表中*/
s->num=persons[i].num
strcpy(s->name,persons[i].name)
strcpy(s->e_addr,persons[i].e_addr)
strcpy(s->tel_no,persons[i].tel_no)
s->sim_no=persons[i].sim_no
s->arch=persons[i].arch
if(head==NULL) /*用尾插法将其插入链表中*/
{head=sr=headhead->next=NULL}
else
{r->next=s
r=sr->next=NULL
}
}fclose(fp)
}
else
{ fp=fopen("数据文件.txt","w")/*不能打开另开辟一个文件*/
i=1
}
}
void Show()
{printf("成功调用该函数\n")}
void Delete()
{printf("成功调用该函数\n")}
void Input() /*向.通讯录中输入一个人的信息*/
{ s=(linklist)malloc(sizeof(listnode))
printf("\n\n\t请输入该用户的信息:")
printf("姓名:")
scanf("%s",&s->name)
printf("电话号码:")
scanf("%s",&s->tel_no)
printf("单键拨号:")
scanf("%s",&s->sim_no)
printf("E-mail地址:")
scanf("%s",&s->辩祥e_addr)
printf("类别:")
scanf("%s",&s->arch)
if(head==NULL)printf("\n\n")
else
{p8=head
while(p8!=NULL&&strcmp(s->name,p8->name)!=0&&strcmp(s->tel_no,p8->tel_no)!=0)
p8=p8->next
if(p8!=NULL)
{printf("您添加的用户已存在!")
free(s)}}
if(head==NULL)
{
s->next = 0
head=s
r = s
}
else
{
s->next = 0
r->next = s
r = s
}
}
void Alter()
{ printf("success!\n")}
int main()
{
system("color a")
creat()
do
{
printf("\n\n\t\t请选择 *** 作:")
printf("\n\t\t1.显示通讯录")
printf("\n\t\t2.删除通讯录")
printf("\n\t\t3.添加通讯录")
printf("\n\t\t4.编辑通讯录")
printf("\n\n\n")
printf("\t请选择:")
cin>>ch
switch(ch)
{ case '1': Show()/*用单条件多选择语句实现调用与循环*/
break
case '2': Delete()
break
case '3': Input()
break
case '4': Alter()
break
fclose(fp)
exit(0)
break
default:
printf("\n\t The num should 1-6!!! \n")
break
}
}
while(1)
}
IIC(Inter-Integrated Circuit,I2C)总线老含唤是一种侍凯由PHILIPS公司开发的两线式串行总线,用于连接微处老陆理器及其外围设备,它的最主要优点是简单和有效。它只需要数据线SDA和时钟线SCL,就能够实现CPU与被控IC之间、IC与IC之间进行双向传送。这是我写的模拟程序,只有一个发送函数和一个接收函数,EP为接收标志位,发送没有标志位,通过外部中断来发送起始信号,无应答与非应答,无结束信号,实测可以正常收发数据#ifndef _IOPORTSEND_H__
#define _IOPORTSEND_H__
#include<reg52.h>
unsigned char DAT,EP=0//可漏颂以把DAT当作串口中的SBUF,主机发送完后接收机从DAT提取数据
sbit flag = P3^3//外部中断口
sbit ok = P2^7//起始信号发送口
sbit PCL = P2^6//时钟线
sbit PDA = P2^5//数据线
void delay() //延时函数控制波特率
{
unsigned char a,b
for(b=3b>0b--)
for(a=13a>0a--)
}
void PortInit()//中断配置
{
EA=1
EX1=1
IT1=1
}
void SendPort(unsigned char dat)//发送函数
{
unsigned char i
PCL=0
ok=1//通过ok来启动接收机的中断
ok=0
for(i=0i<8i++)//开始发送数据
{
PCL=0
delay()
if(dat&0x80)
PDA=1
else
PDA=0
PCL=1
delay()
dat<誉判<=1
}
PCL=0
delay()
ok=1//ok置1以便下次发送时启动中断
PCL=1//发送完毕释放时钟线与数据线
PDA=1
}
void ReadPort()interrupt 2//接收函数,在中断函数中接收数据
{
unsigned char i
static unsigned int b
PCL=1
PDA=1//防止接收机的PCL口和PDA口影响庆搜改数据的接收
for(i=0i<8i++)//开始接收数据
{
DAT<<=1
while(PCL==0)
b=0
while(PCL==1)
{
b++
if(b==1)
if(PDA)
DAT|=0x01
}
}
EP=1//接收完毕后置EP为1,需要在其他函数中清零
}
#endif
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)