
c语言时钟程序代码如下:
#include<windows.h>
#include<math.h>
#define ID_TIMER 1//计时器ID
#define TWOPI (2*3.14159)
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT("Clock")
HWND hwnd
MSG msg
WNDCLASS wndclass
wndclass.cbClsExtra=0
wndclass.cbWndExtra=0
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH)
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW)
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION)
wndclass.hInstance=hInstance
wndclass.lpfnWndProc=WndProc
wndclass.lpszClassName=szAppName
wndclass.lpszMenuName=NULL
wndclass.style=CS_HREDRAW|CS_VREDRAW
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows
T"),szAppName,MB_ICONERROR)
return 0
}
hwnd=CreateWindow(szAppName,TEXT("Analog Clock"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL)
ShowWindow(hwnd,iCmdShow)
UpdateWindow(hwnd)
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg)
DispatchMessage(&msg)
}
return msg.wParam
}
void Setsotropic(HDC hdc,int cxClient,int cyClient)
{
SetMapMode(hdc,MM_ISOTROPIC)
SetWindowExtEx(hdc,1000,1000,NULL)
SetViewportExtEx(hdc,cxClient/2,-cyClient/2,NULL)
SetViewportOrgEx(hdc,cxClient/2,cyClient/2,NULL)
}
void RotatePoint(POINT pt[],int iNum,int iAngle)
{
int i
POINT ptTemp
for(i=0i<iNumi++)
{
ptTemp.x=(int)(pt[i].x*cos(TWOPI*iAngle/360)+pt[i].y*sin(TWOPI*iAngle/360))
ptTemp.y=(int)(pt[i].y*cos(TWOPI*iAngle/360)+pt[i].x*sin(TWOPI*iAngle/360))
pt[i]=ptTemp
}
}
void DrawClock(HDC hdc)
{
int iAngle
POINT pt[3]
for(iAngle=0iAngle<360iAngle+=6)
{
pt[0].x=0
pt[0].y=900
RotatePoint(pt,1,iAngle)
pt[2].x=pt[2].y=iAngle%5?33:100
pt[0].x-=pt[2].x/2
pt[0].y-=pt[2].y/2
pt[1].x=pt[0].x+pt[2].x
pt[1].y=pt[0].y+pt[2].y
SelectObject(hdc,GetStockObject(BLACK_BRUSH))
Ellipse(hdc,pt[0].x,pt[0].y,pt[1].x,pt[1].y )
}
}
void DrawHands(HDC hdc,SYSTEMTIME *pst,BOOL fChange)
{
static POINT pt[3][5]={0,-150,100,0,0,600,-100,0,0,-150, 0,-200,50,0,0,800,-50,0,0,-200, 0,0,0,0,0,0,0,0,0,800 }
int i,iAngle[3]
POINT ptTemp[3][5]
iAngle[0]=(pst->wHour*30)%360+pst->wMinute/2
iAngle[1]=pst->wMinute*6
iAngle[2]=pst->wSecond*6
memcpy(ptTemp,pt,sizeof(pt))
for(i=fChange?0:2i<3i++)
{
RotatePoint(ptTemp[i],5,iAngle[i])
Polyline(hdc,ptTemp[i],5)
}
}
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
static int cxClient,cyClient
static SYSTEMTIME stPrevious
BOOL fChange
HDC hdc
PAINTSTRUCT ps
SYSTEMTIME st
switch(message)
{
case WM_CREATE:
SetTimer(hwnd,ID_TIMER,1000,NULL)
GetLocalTime(&st)
stPrevious=st
return 0
case WM_SIZE:
cxClient=LOWORD(lParam)
cyClient=HIWORD(lParam)
return 0
case WM_TIMER:
GetLocalTime(&st)
fChange=st.wHour!=stPrevious.wHour||st.wMinute!=stPrevious.wMinute
hdc=GetDC(hwnd)
Setsotropic(hdc,cxClient,cyClient)
SelectObject(hdc,GetStockObject(WHITE_PEN))
DrawHands(hdc,&stPrevious,fChange)
SelectObject(hdc,GetStockObject(BLACK_PEN))
DrawHands(hdc,&st,TRUE)
stPrevious=st
return 0
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps)
Setsotropic(hdc,cxClient,cyClient)
DrawClock(hdc)
DrawHands(hdc,&stPrevious,TRUE)
EndPaint(hwnd,&ps)
return 0
case WM_DESTROY:
KillTimer(hwnd,ID_TIMER)
PostQuitMessage(0)
return 0
}
return DefWindowProc(hwnd,message,wParam,lParam)
}
C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年 由 肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的 *** 作系统中,例如UNIX、MS-DOS、Microsoft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C++、Objective-C、Java、C#等。
以下是四位数码管可调时带秒闪烁的c51单片机电子钟程序(c语言)。/**** 本程序中,晶振为12MHz, ****/
/**** 时间控制采用定时中断控制方式。 ****/
/**** 模式和时间调整采用查询方式。 ****/
#include<reg52.h>
sbit P20=P2^0 //分个位控制端
sbit P21=P2^1 //分十位控制端
sbit P22=P2^2 //时个位控制端
sbit P23=P2^3 //时十位控制端
sbit led=P2^7 //second display led
sbit key0=P3^0 //模式设置
sbit key1=P3^1 //加
sbit key2=P3^2 //减
unsigned char hour,min,sec,T50ms
unsigned char modstate //模式状态
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}//段码
void init() //初始化子程序声明
void delay500us(unsigned char X) //延时子程序声明
void display() //显示子程序声明
void display001() //显示子程序声明
void display002() //显示子程序声明
void keyscan() //按键识别子程序声明
void main()
{
init()
while(1)
{
keyscan()
}
}
void init() //初始化子程序
{
TMOD=0x01
TH0=(65536-49990)/256
TL0=(65536-49990)%256
ET0=1
EA=1
TR0=1
}
void delay500us(unsigned char X)
{
unsigned char i,j
for(i=Xi>0i--)
for(j=248j>0j--)
}
void timer0() interrupt 1 //timer0中断服务子程序,定时时间为50ms,本程序加了10us的时间修正量
{
TMOD=0x01
TH0=(65536-49990)/256
TL0=(65536-49990)%256
T50ms++
if(T50ms>=20)
{
T50ms=0
sec++
if(sec>=60)
{
sec=0
min++
if(min>=60)
{
min=0
hour++
if(hour>=24)hour=0
}
}
}
}
void display()
{
P20=1
P21=1
P22=1
P23=1
P0=table[hour/10]
P23=0
delay500us(5)
P20=1
P21=1
P22=1
P23=1
P0=table[hour%10]
P22=0
delay500us(5)
P20=1
P21=1
P22=1
P23=1
P0=table[min/10]
P21=0
delay500us(5)
P20=1
P21=1
P22=1
P23=1
P0=table[min%10]
P20=0
delay500us(5)
if(T50ms<=10)led=0
if(T50ms>10)led=1
}
void display001()
{
P20=1
P21=1
P22=1
P23=1
P0=table[hour/10]
P23=0
delay500us(10)
P20=1
P21=1
P22=1
P23=1
P0=table[hour%10]
P22=0
delay500us(10)
}
void display002()
{
P20=1
P21=1
P22=1
P23=1
P0=table[min/10]
P21=0
delay500us(10)
P20=1
P21=1
P22=1
P23=1
P0=table[min%10]
P20=0
delay500us(10)
}
void keyscan() //按键识别钟程序
{
while(modstate==0)
{
display()
if(key0==0)
{
display()
if(key0==0)modstate++ //这两句加在一起为延时10ms软件防抖设计。
while(key0==0)display001() //等待按键释放。
}
}
//****************************************************************************//
while(modstate==1)
{
display001()
if(key0==0)
{
display001()
if(key0==0)modstate++ //这两句加在一起为延时10ms软件防抖设计。
while(key0==0)display002() //等待按键释放。
}
if(key1==0)
{
display001()
if(key1==0)
{
hour++
if(hour>=24)hour=0
while(key1==0)display001()
}
}
if(key2==0)
{
display001()
if(key2==0)
{
hour--
if(hour>=24)hour=0
while(key2==0)display001()
}
}
}
//****************************************************************************//
while(modstate==2)
{
display002()
if(key0==0)
{
display002()
if(key0==0)modstate=0 //这两句加在一起为延时10ms软件防抖设计。
while(key0==0)display() //等待按键释放。
}
if(key1==0)
{
display002()
if(key1==0)
{
min++
if(min>=60)min=0
while(key1==0)display002()
}
}
if(key2==0)
{
display002()
if(key2==0)
{
min--
if(min>=60)min=0
while(key2==0)display002()
}
}
}
}
学C不久。VC6写了一个控制台的,修改时个人时间不能后台走。你可以试试在mytime下面加多一个case到change()修改时也显示gomytime()的内容。
#include <stdio.h>#include <time.h>
#include <windows.h>
#include <conio.h>
void systime()
void mytime()
void wel()
void gomytime()
void change()
int ye,mo,da,ho,mi,se
void main( )
{
wel()
}
//界面
void wel()
{
int k
printf( "电子时钟\n" )
printf( "\n" )
printf( "1新建我的时间,2为系统时间,3为修改时间,4去我的时间,5退出\n" )
printf( "\n" )
printf( "选择:" )
scanf( "%d", &k )
switch ( k )
{
case 1:
mytime()
break
case 2:
systime()
break
case 3:
change()
break
case 4:
gomytime()
break
case 5:
exit(0)
break
}
}
//个人设定的时间并行走
void mytime(){
int k
printf("输入年:")
scanf("%d",&ye)
printf("输入月:")
scanf("%d",&mo)
printf("输入日:")
scanf("%d",&da)
printf("输入时:")
scanf("%d",&ho)
printf("输入分:")
scanf("%d",&mi)
printf("输入秒:")
scanf("%d",&se)
while(1)
{
Sleep(1000)
system("cls")
se++
if(se>=60)
{
se-=60
mi++
if(mi>=60)
{
mi-=60
ho++
if(ho>=24)
{
da++
ho-=24
if(da>=30)
{
mo++
da-=30
if(mo>=12)
{
ye++
mo-=12
}
}
}
}
}
printf("电子时钟\n")
printf("\n")
printf("个人设定的时间:")
printf("%d年%d月%d日%d时%d分%d秒", ye,mo,da,ho, mi, se)
printf("\n")
printf("\n")
printf("1为返回,2为继续\n")
printf("选择:")
if(kbhit())
{
scanf("%d",&k)
break
}
}
switch(k){
case 1:
system("cls")
wel()
break
case 2:
gomytime()
break
}
}
//个人时间行走
void gomytime(){
int k
while(1)
{
Sleep(1000)
system("cls")
se++
if(se>=60)
{
se-=60
mi++
if(mi>=60)
{
mi-=60
ho++
if(ho>=24)
{
da++
ho-=24
if(da>=30)
{
mo++
da-=30
if(mo>=12)
{
ye++
mo-=12
}
}
}
}
}
printf("电子时钟\n")
printf("\n")
printf("个人设定的时间:")
printf("%d年%d月%d日%d时%d分%d秒", ye,mo,da,ho, mi, se)
printf("\n")
printf("\n")
printf("1为返回,2为继续\n")
printf("选择:")
if(kbhit())
{
scanf("%d",&k)
break
}
}
switch(k){
case 1:
system("cls")
wel()
break
case 2:
gomytime()
break
}
}
//系统时间
void systime(){
int k
int year, month, day,hour,min,sec
time_t nowtime
struct tm *timeinfo
while(1)
{
Sleep(1000)
system("cls")
time( &nowtime )
timeinfo = localtime( &nowtime )
year = timeinfo->tm_year + 1900
month = timeinfo->tm_mon + 1
day = timeinfo->tm_mday
hour = timeinfo->tm_hour
min = timeinfo->tm_min
sec = timeinfo->tm_sec
printf("电子时钟\n")
printf("\n")
printf("系统时间:%d年 %d月 %d日", year, month, day)
printf("%d时 %d分 %d秒\n", hour, min, sec)
printf("\n")
printf("1为返回,2为继续\n")
printf("选择:")
if(kbhit())
{
scanf("%d",&k)
break
}
}
switch(k){
case 1:
system("cls")
wel()
break
case 2:
systime()
break
}
}
//修改个人时间
void change()
{
int k
system( "cls" )
printf( "电子时钟\n" )
printf( "\n" )
printf( "修改我的时间\n" )
printf( "1为修改年,2为修改月,3为修改日,4为修改时,5为修改分,6为修改秒,7我的时间,8返回" )
printf( "\n" )
printf( "选择:" )
scanf( "%d", &k )
switch ( k )
{
case 1:
printf( "修改年:" )
scanf( "%d", &ye )
change()
break
case 2:
printf( "修改月:" )
scanf( "%d", &mo )
change()
break
case 3:
printf( "修改日:" )
scanf( "%d", &da )
change()
break
case 4:
printf( "修改时:" )
scanf( "%d", &ho )
change()
break
case 5:
printf( "修改分:" )
scanf( "%d", &mi )
change()
break
case 6:
printf( "修改秒:" )
scanf( "%d", &se )
change()
break
case 7:
gomytime()
break
case 8:
system( "cls" )
wel()
break
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)