gmumain.c
来自「该程序实现六位LED的动态扫描显示,能设置波特率,」· C语言 代码 · 共 985 行 · 第 1/3 页
C
985 行
switch(set_point){
case 0:disvalue_big_asc("P 600");
break;
case 1:disvalue_big_asc("P 1200");
break;
case 2:disvalue_big_asc("P 2400");
break;
case 3:disvalue_big_asc("P 4800");
break;
case 4:disvalue_big_asc("P 9600");
break;
case 5:disvalue_big_asc("P19200");
break;
default:break;
}
delay(1);
temp = key_scan();
if((temp==set_value)||(temp==left_value)||(temp ==up_value)||(temp == ds_value))
{
breakflag = 1;
break;
}
}
if(breakflag == 1) break;
flash_times = flash_times - 1;
if(flash_times<0) {
menu_exit_flag = 1;
return;
}
//**********************************************************
for(i = 0;i <2000; i++){
disvalue_big_asc("P ");
delay(1);
temp = key_scan();
if((temp==set_value)||(temp==left_value)||(temp ==up_value)||(temp == ds_value))
{
breakflag = 1;
break;
}
}
if(breakflag == 1) break;
}
flash_times = 10;
menu_exit_flag = 0;
if(temp==set_value){//执行到下一步设置状态了,保存当前设置的波特率值
write(50,set_point);
return;
}
if(temp==up_value){
set_point = set_point + 1;
if(set_point>5) set_point = 0;
switch(set_point){
case 0:disvalue_big_asc("P 600");
break;
case 1:disvalue_big_asc("P 1200");
break;
case 2:disvalue_big_asc("P 2400");
break;
case 3:disvalue_big_asc("P 4800");
break;
case 4:disvalue_big_asc("P 9600");
break;
case 5:disvalue_big_asc("P19200");
break;
default:break;
}
}
if(temp ==left_value){
set_point = set_point + 1;
if(set_point>5) set_point = 0;
switch(set_point){
case 0:disvalue_big_asc("P 600");
break;
case 1:disvalue_big_asc("P 1200");
break;
case 2:disvalue_big_asc("P 2400");
break;
case 3:disvalue_big_asc("P 4800");
break;
case 4:disvalue_big_asc("P 9600");
break;
case 5:disvalue_big_asc("P19200");
break;
default:break;
}
}
}
}
//**************************************************************************************
void setmenu_e(void)
{
unsigned char temp;
unsigned char tht_temp[6];
unsigned char set_point;
// unsigned char dot_ffflag;
unsigned char breakflag;
unsigned int i;
unsigned char save_address;
flash_times = 10;
menu_exit_flag = 0;
save_address = read(40);
disvalue_big_asc(" ");
tht_temp[5] = save_address%10;
display_bit(tht_temp[5],5,0);
save_address = save_address/10;
tht_temp[4] = save_address%10;
display_bit(tht_temp[4],4,0);
save_address = save_address/10;
tht_temp[3] = save_address%10;
display_bit(tht_temp[3],3,0);
dis_big_value[5] = 0x86; //h
set_point = 5;
while(1){
breakflag = 0;
while(1){
for(i = 0;i <2000; i++){
display_bit(tht_temp[set_point],set_point,0);
delay(3);
temp = key_scan();
if((temp==set_value)||(temp==left_value)||(temp ==up_value)||(temp == ds_value))
{
breakflag = 1;
break;
}
}
if(breakflag == 1) break;
flash_times = flash_times - 1;
if(flash_times<0) {
menu_exit_flag = 1;
return;
}
//**********************************************************
for(i = 0;i <2000; i++){
display_bit(10,set_point,0);
delay(3);
temp = key_scan();
if((temp==set_value)||(temp==left_value)||(temp ==up_value)||(temp == ds_value))
{
breakflag = 1;
break;
}
}
if(breakflag == 1) break;
}
flash_times = 10;
menu_exit_flag = 0;
if(temp==set_value) {//执行到下一步设置状态了,保存当前设置的地址值
save_address = 0;
save_address = tht_temp[3]*100;
save_address = save_address + tht_temp[4]*10;
save_address = save_address + tht_temp[5];
write(40,save_address);
return;
}
if(temp==up_value){
tht_temp[set_point] = tht_temp[set_point] + 1;
if(tht_temp[set_point]>9) tht_temp[set_point] = 0;
if(tht_temp[3]>2) tht_temp[3]=0;
if((tht_temp[3]==2)&&(tht_temp[4]>5)) tht_temp[4]=0;
if((tht_temp[3]==2)&&(tht_temp[4]==5)&&(tht_temp[5]>5)) tht_temp[5]=0;
}
if(temp ==left_value){
display_bit(tht_temp[set_point],set_point,0);
set_point = set_point + 1;
if(set_point>5) set_point = 3;
}
}
}
void menu_list(void)
{
setmenu_hld(0);
if(menu_exit_flag ==1){
disvalue_big_asc(" ");
initial();
return;
}
setmenu_hld(1);
if(menu_exit_flag ==1){
disvalue_big_asc(" ");
initial();
return;
}
setmenu_b();
if(menu_exit_flag ==1){
disvalue_big_asc(" ");
initial();
return;
}
setmenu_e();
if(menu_exit_flag ==1){
disvalue_big_asc(" ");
initial();
return;
}
setmenu_p();
if(menu_exit_flag ==1){
disvalue_big_asc(" ");
initial();
return;
}
setmenu_hld(2);
disvalue_big_asc(" ");
initial();
return;
}
//**********************************************************************
//**********************************************************************
//**********************************************************************
void s24(void) {
_nop_();scl=0;sda=1;scl=1;_nop_();sda=0;_nop_();scl=0;
}
void p24(void) {
sda=0;scl=1;_nop_();sda=1;
}
unsigned char rd24(void) {
sda=1;
scl=1;a7=sda;scl=0;
scl=1;a6=sda;scl=0;
scl=1;a5=sda;scl=0;
scl=1;a4=sda;scl=0;
scl=1;a3=sda;scl=0;
scl=1;a2=sda;scl=0;
scl=1;a1=sda;scl=0;
scl=1;a0=sda;scl=0;
sda=1;scl=1;scl=0;
return(ACC);
}
void wd24(unsigned char dd) {
ACC=dd;
sda=a7;scl=1;scl=0;
sda=a6;scl=1;scl=0;
sda=a5;scl=1;scl=0;
sda=a4;scl=1;scl=0;
sda=a3;scl=1;scl=0;
sda=a2;scl=1;scl=0;
sda=a1;scl=1;scl=0;
sda=a0;scl=1;scl=0;
sda=1;scl=1;
}
unsigned char read(unsigned int address){
unsigned char dd;
dd=((address&0x7ff)/256)<<1;
s24();wd24(0xa0|dd);scl=0;wd24(address);scl=0;
s24();wd24(0xa1|dd);scl=0;dd=rd24();p24();return(dd);
}
void write(unsigned int address,unsigned char dd){
unsigned char ddd;
unsigned char time;
ddd=((address&0x7ff)/256)<<1;
s24();wd24(0xa0|ddd);scl=0;wd24(address);scl=0;wd24(dd);scl=0;p24();
time=0; //time为定时器时间参考,time增加1代表1ms,如果没有用定时器,取消该行
while (1) {
s24();
wd24(0xa0|ddd);
sda=1;
if (sda==0) break;
if (time>10){
time = time + 1;
delayms(300);
break; //此行防止由于eeprom器件损坏后的死循环
}
scl=0;
}
}
unsigned int read_int(unsigned int address)
{
unsigned int temp;
union{
unsigned char aaa[2];
unsigned int bbb;
}ccc;
temp = address;
ccc.aaa[0] = read (temp);
ccc.aaa[1] = read (temp+1);
temp = ccc.bbb;
return(temp);
}
void write_int(unsigned int address,unsigned int dd)
{
unsigned int temp;
union{
unsigned char aaa[2];
unsigned int bbb;
}ccc;
temp = address;
ccc.bbb = dd;
write(temp,ccc.aaa[0]);
write(temp + 1,ccc.aaa[1]);
}
//*********************************************************
//*********************************************************
long read_long(unsigned int address)
{
unsigned int temp;
long temp1;
union{
unsigned char aaa[4];
long bbb;
}ccc;
temp = address;
ccc.aaa[0] = read (temp);
ccc.aaa[1] = read (temp+1);
ccc.aaa[2] = read (temp+2);
ccc.aaa[3] = read (temp+3);
temp1 = ccc.bbb;
return(temp1);
}
void write_long(unsigned int address,long dd)
{
unsigned int temp;
union{
unsigned char aaa[4];
long bbb;
}ccc;
temp = address;
ccc.bbb = dd;
write(temp,ccc.aaa[0]);
write(temp + 1,ccc.aaa[1]);
write(temp + 2,ccc.aaa[2]);
write(temp + 3,ccc.aaa[3]);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?