⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex3-3.cpp

📁 嵌入式程序设计的十个实例的源代码。欢迎大家下载
💻 CPP
字号:
//示例位段组织和模拟位段实现,不考虑输入错误
#include <iostream>
using namespace std;
typedef struct
{
	unsigned year:12;
	unsigned month:4;
	unsigned day:5;
	unsigned clock:5;
	unsigned minute:6;
	unsigned second:6;
}  TIME;
typedef struct
{
//	unsigned  ex:32;
	unsigned  :0;
}  TIME1;
void display(char *p)
{
	char pi=*p;//*(int*)
//	cout<<"int:"<<pi<<endl;
	for(int i=0;i<8;i++)
	{
		if(pi<0)
			cout<<'1';
		else
			cout<<'0';
		pi<<=1;
	}
	cout<<endl;
}
void writeyear(unsigned short *p,unsigned short us)
{
	unsigned short test;
	test=(~0)<<12;
//	cout<<test<<endl;
	(*p)&=test;
	test=~test;
	us&=test;
	(*p)|=us;
	cout<<*p<<endl;
}

void writemonth(char *p,unsigned short us)
{
	char test;
	test=(char)~(15<<4);
//	cout<<(int)test<<endl;
	(*p)&=test;
	us=us<<4;
	(*p)|=us;
	cout<<(int)*p<<endl;
}

void writeday(char *p,unsigned short us)
{
	char test;
	test=(char)(7<<5);
	cout<<(int)test<<endl;
	(*p)&=test;
	(*p)|=us;
	cout<<(int)*p<<endl;
}

void writetime(unsigned short *p,unsigned short us)
{
	unsigned short test;
	test=~(31<<5);
	cout<<test<<endl;
	(*p)&=test;
	cout<<*p<<endl;
	test=~test;
	us=us<<5;
	us&=test;
	(*p)|=us;
	cout<<*p<<endl;
}

void writeminute(char *p,unsigned short us)
{
	char test;
	test=(char)~(63<<2);
//	cout<<(int)test<<endl;
	(*p)&=test;
	us=us<<2;
	(*p)|=us;
	cout<<(int)*p<<endl;
}

void writesecond(char *p,unsigned short us)
{
	char test;
	test=(char)(3<<6);
	cout<<(int)test<<endl;
	(*p)&=test;
	(*p)|=us;
	cout<<(int)*p<<endl;
}
//
//
void readyear(unsigned short *p,unsigned short &us)
{
	unsigned short test;
	test=~((~0)<<12);
//	cout<<test<<endl;
	us=(*p)&test;
	cout<<us<<"年"<<endl;
}

void readmonth(char *p,unsigned short &us)
{
	char test;
	test=(char)(15<<4);
	us=(((*p)&test)>>4)&15;
	cout<<us<<"月"<<endl;
}

void readday(char *p,unsigned short &us)
{
	char test;
	test=(char)(31);
	us=(*p)&test;
	cout<<us<<"日"<<endl;
}

void readtime(unsigned short *p,unsigned short &us)
{
	unsigned short test;
	test=(31<<5);
	us=((*p)&test)>>5;
	cout<<us<<"时"<<endl;
}

void readminute(char *p,unsigned short &us)
{
	char test;
	test=(char)(63<<2);
//	cout<<(int)test<<endl;
	us=(((*p)&test)>>2)&63;
	cout<<us<<"分"<<endl;
}

void readsecond(char *p,unsigned short &us)
{
	char test;
	test=(char)(63);
	us=(*p)&test;
	cout<<us<<"秒"<<endl;
}


void clear(char *p)
{
	for(int i=0;i<sizeof(TIME);i++,p++)
		*p=0;
}

void main(void)
{
	cout<<sizeof(TIME1)<<endl;
	TIME  time1;
	char *pc=(char*)&time1;
	clear(pc);
	time1.year=2006;//0111,1101,0110
	time1.month=3;//0011
	time1.day=7;//00111
	time1.clock=9;//01001
	time1.minute=14;//001110
	time1.second=50;//110010
	for(int i=0;i<8;i++,pc++)
		display(pc);
	cout<<endl;
	cout<<time1.year<<endl;
//模拟位段实现
	unsigned  short tmp;
	unsigned char time2[5]={0,0,0,0,0};
//写位段的实现
//写year
	cout<<"Please input year(1~4095):";
	cin>>tmp;
	writeyear((unsigned short*)time2,tmp);
//写month
	cout<<"Please input month(1~12):";
	cin>>tmp;
	writemonth(1+(char*)time2,tmp);
//写day
	cout<<"Please input day(1~31):";
	cin>>tmp;
	writeday(2+(char*)time2,tmp);
//写time
	cout<<"Please input time(0~23):";
	cin>>tmp;
	writetime((unsigned short*)&time2[2],tmp);
//写minute
	cout<<"Please input minute(0~59):";
	cin>>tmp;
	writeminute((char*)&time2[3],tmp);
//写second
	cout<<"Please input second(0~59):";
	cin>>tmp;
	writesecond((char*)&time2[4],tmp);
//读位段的实现
//读year
	readyear((unsigned short*)time2,tmp);
//读month
	readmonth(1+(char*)time2,tmp);
//读day
	readday(2+(char*)time2,tmp);
//读time
	readtime((unsigned short*)&time2[2],tmp);
//读minute
	readminute((char*)&time2[3],tmp);
//读second
	readsecond((char*)&time2[4],tmp);


	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -